diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 9b44c7cff3..5907cccd10 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -205,15 +205,14 @@
"Medical" = /obj/item/robot_module/medical, \
"Miner" = /obj/item/robot_module/miner, \
"Janitor" = /obj/item/robot_module/janitor, \
- "Service" = /obj/item/robot_module/butler, \
- "MediHound" = /obj/item/robot_module/medihound, \
- "Security K9" = /obj/item/robot_module/k9, \
- "Scrub Puppy" = /obj/item/robot_module/scrubpup)
+ "Service" = /obj/item/robot_module/butler)
if(!CONFIG_GET(flag/disable_peaceborg))
modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper
if(!CONFIG_GET(flag/disable_secborg))
modulelist["Security"] = /obj/item/robot_module/security
+ modulelist + get_cit_modules() //Citadel change - adds Citadel's borg modules.
+
var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist
if(!input_module || module.type != /obj/item/robot_module)
return
@@ -593,39 +592,25 @@
/mob/living/silicon/robot/update_icons()
cut_overlays()
icon_state = module.cyborg_base_icon
- if(module.cyborg_base_icon == "medihound")
- icon = 'icons/mob/widerobot.dmi'
- pixel_x = -16
- if(sleeper_g == 1)
- add_overlay("msleeper_g")
- if(sleeper_r == 1)
- add_overlay("msleeper_r")
- if(stat == DEAD)
- icon_state = "medihound-wreck"
- if(module.cyborg_base_icon == "k9")
- icon = 'icons/mob/widerobot.dmi'
- pixel_x = -16
- if(laser == 1)
- add_overlay("laser")
- if(disabler == 1)
- add_overlay("disabler")
- if(sleeper_g == 1)
- add_overlay("ksleeper_g")
- if(sleeper_r == 1)
- add_overlay("ksleeper_r")
- if(stat == DEAD)
- icon_state = "k9-wreck"
+ //Citadel changes start here - Allows modules to use different icon files, and allows modules to specify a pixel offset
+ icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon))
- if(module.cyborg_base_icon == "scrubpup")
- icon = 'icons/mob/widerobot.dmi'
- pixel_x = -16
- if(sleeper_g == 1)
- add_overlay("jsleeper_g")
- if(sleeper_r == 1)
- add_overlay("jsleeper_r")
- if(stat == DEAD)
- icon_state = "scrubpup-wreck"
+ if(laser)
+ add_overlay("laser")//Is this even used???
+ if(disabler)
+ add_overlay("disabler")//ditto
+
+ if(sleeper_g && module.sleeper_overlay)
+ add_overlay("[module.sleeper_overlay]_g")
+ if(sleeper_r && module.sleeper_overlay)
+ add_overlay("[module.sleeper_overlay]_r")
+ if(stat == DEAD && module.has_snowflake_deadsprite)
+ icon_state = "[module.cyborg_base_icon]-wreck"
+
+ if(module.cyborg_pixel_offset)
+ pixel_x = module.cyborg_pixel_offset
+ //End of citadel changes
if(module.cyborg_base_icon == "robot")
icon = 'icons/mob/robots.dmi'
@@ -1026,6 +1011,7 @@
designation = module.name
if(hands)
hands.icon_state = module.moduleselect_icon
+ hands.icon = (module.moduleselect_alternate_icon ? module.moduleselect_alternate_icon : initial(hands.icon)) //CITADEL CHANGE - allows module select icons to use a different icon file
if(module.can_be_pushed)
status_flags |= CANPUSH
else
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 2f1eb7d378..b3fc0ba4ed 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -336,31 +336,6 @@
can_be_pushed = FALSE
hat_offset = 3
-/obj/item/robot_module/k9
- name = "Security K-9 Unit module"
- basic_modules = list(
- /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog,
- /obj/item/dogborg/jaws/big,
- /obj/item/dogborg/pounce,
- /obj/item/clothing/mask/gas/sechailer/cyborg,
- /obj/item/soap/tongue,
- /obj/item/device/analyzer/nose,
- /obj/item/device/dogborg/sleeper/K9,
- /obj/item/gun/energy/disabler/cyborg,
- /obj/item/pinpointer/crew)
- emag_modules = list(/obj/item/gun/energy/laser/cyborg)
- ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
- /obj/item/clockwork/weapon/ratvarian_spear)
- cyborg_base_icon = "k9"
- moduleselect_icon = "security"
- can_be_pushed = FALSE
- hat_offset = INFINITY
-
-/obj/item/robot_module/k9/do_transform_animation()
- ..()
- to_chat(loc,"While you have picked the security-k9 module, you still have to follow your laws, NOT Space Law. \
- For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.")
-
/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
..()
var/obj/item/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules
@@ -372,59 +347,6 @@
else
T.charge_tick = 0
-/obj/item/robot_module/medihound
- name = "MediHound module"
- basic_modules = list(
- /obj/item/dogborg/jaws/small,
- /obj/item/device/analyzer/nose,
- /obj/item/soap/tongue,
- /obj/item/device/healthanalyzer,
- /obj/item/device/dogborg/sleeper/medihound,
- /obj/item/twohanded/shockpaddles/hound,
- /obj/item/stack/medical/gauze/cyborg,
- /obj/item/device/sensor_device)
- emag_modules = list(/obj/item/dogborg/pounce)
- ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical,
- /obj/item/clockwork/weapon/ratvarian_spear)
- cyborg_base_icon = "medihound"
- moduleselect_icon = "medical"
- can_be_pushed = FALSE
- hat_offset = INFINITY
-
-/obj/item/robot_module/medihound/do_transform_animation()
- ..()
- to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
- You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.")
-
-/obj/item/robot_module/scrubpup
- name = "Janitor"
- basic_modules = list(
- /obj/item/dogborg/jaws/small,
- /obj/item/device/analyzer/nose,
- /obj/item/soap/tongue/scrubpup,
- /obj/item/device/lightreplacer/cyborg,
- /obj/item/device/dogborg/sleeper/compactor)
- emag_modules = list(/obj/item/dogborg/pounce)
- ratvar_modules = list(
- /obj/item/clockwork/slab/cyborg/janitor,
- /obj/item/clockwork/replica_fabricator/cyborg)
- cyborg_base_icon = "scrubpup"
- moduleselect_icon = "janitor"
- hat_offset = INFINITY
- clean_on_move = TRUE
-
-/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
- ..()
- var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
- if(LR)
- for(var/i in 1 to coeff)
- LR.Charge(R)
-
-/obj/item/robot_module/scrubpup/do_transform_animation()
- ..()
- to_chat(loc,"As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.")
-
-
/obj/item/robot_module/security/do_transform_animation()
..()
to_chat(loc, "While you have picked the security module, you still have to follow your laws, NOT Space Law. \
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
new file mode 100644
index 0000000000..808a03bd4c
--- /dev/null
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -0,0 +1,160 @@
+/mob/living/silicon/robot/proc/get_cit_modules()
+ var/list/modulelist = list()
+ modulelist["MediHound"] = /obj/item/robot_module/medihound
+ if(!CONFIG_GET(flag/disable_secborg))
+ modulelist["Security K-9"] = /obj/item/robot_module/k9
+ modulelist["Scrub Puppy"] = /obj/item/robot_module/scrubpup
+ return modulelist
+
+/obj/item/robot_module
+ var/sleeper_overlay
+ var/icon/cyborg_icon_override
+ var/has_snowflake_deadsprite
+ var/cyborg_pixel_offset
+
+/obj/item/robot_module/k9
+ name = "Security K-9 Unit module"
+ basic_modules = list(
+ /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog,
+ /obj/item/dogborg/jaws/big,
+ /obj/item/dogborg/pounce,
+ /obj/item/clothing/mask/gas/sechailer/cyborg,
+ /obj/item/soap/tongue,
+ /obj/item/device/analyzer/nose,
+ /obj/item/device/dogborg/sleeper/K9,
+ /obj/item/gun/energy/disabler/cyborg,
+ /obj/item/pinpointer/crew)
+ emag_modules = list(/obj/item/gun/energy/laser/cyborg)
+ ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security,
+ /obj/item/clockwork/weapon/ratvarian_spear)
+ cyborg_base_icon = "k9"
+ moduleselect_icon = "security"
+ can_be_pushed = FALSE
+ hat_offset = INFINITY
+ sleeper_overlay = "ksleeper"
+ cyborg_icon_override = 'icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ cyborg_pixel_offset = -16
+
+/obj/item/robot_module/k9/do_transform_animation()
+ ..()
+ to_chat(loc,"While you have picked the Security K-9 module, you still have to follow your laws, NOT Space Law. \
+ For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.")
+
+/obj/item/robot_module/medihound
+ name = "MediHound module"
+ basic_modules = list(
+ /obj/item/dogborg/jaws/small,
+ /obj/item/device/analyzer/nose,
+ /obj/item/soap/tongue,
+ /obj/item/device/healthanalyzer,
+ /obj/item/device/dogborg/sleeper/medihound,
+ /obj/item/twohanded/shockpaddles/hound,
+ /obj/item/stack/medical/gauze/cyborg,
+ /obj/item/device/sensor_device)
+ emag_modules = list(/obj/item/dogborg/pounce)
+ ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical,
+ /obj/item/clockwork/weapon/ratvarian_spear)
+ cyborg_base_icon = "medihound"
+ moduleselect_icon = "medical"
+ can_be_pushed = FALSE
+ hat_offset = INFINITY
+ sleeper_overlay = "msleeper"
+ cyborg_icon_override = 'icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ cyborg_pixel_offset = -16
+
+/obj/item/robot_module/medihound/do_transform_animation()
+ ..()
+ to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \
+ You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.")
+
+/obj/item/robot_module/scrubpup
+ name = "Janitor"
+ basic_modules = list(
+ /obj/item/dogborg/jaws/small,
+ /obj/item/device/analyzer/nose,
+ /obj/item/soap/tongue/scrubpup,
+ /obj/item/device/lightreplacer/cyborg,
+ /obj/item/device/dogborg/sleeper/compactor)
+ emag_modules = list(/obj/item/dogborg/pounce)
+ ratvar_modules = list(
+ /obj/item/clockwork/slab/cyborg/janitor,
+ /obj/item/clockwork/replica_fabricator/cyborg)
+ cyborg_base_icon = "scrubpup"
+ moduleselect_icon = "janitor"
+ hat_offset = INFINITY
+ clean_on_move = TRUE
+ sleeper_overlay = "jsleeper"
+ cyborg_icon_override = 'icons/mob/widerobot.dmi'
+ has_snowflake_deadsprite = TRUE
+ cyborg_pixel_offset = -16
+
+/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1)
+ ..()
+ var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules
+ if(LR)
+ for(var/i in 1 to coeff)
+ LR.Charge(R)
+
+/obj/item/robot_module/scrubpup/do_transform_animation()
+ ..()
+ to_chat(loc,"As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.")
+
+
+/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
+ var/mob/living/silicon/robot/R = loc
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Droid")
+ if(!borg_icon)
+ return FALSE
+ switch(borg_icon)
+ if("Default")
+ cyborg_base_icon = "medical"
+ if("Droid")
+ cyborg_base_icon = "medical"
+ cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
+ hat_offset = 4
+ return ..()
+
+/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module)
+ var/mob/living/silicon/robot/R = loc
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Droid")
+ if(!borg_icon)
+ return FALSE
+ switch(borg_icon)
+ if("Default")
+ cyborg_base_icon = "sec"
+ if("Default - Treads")
+ cyborg_base_icon = "sec-tread"
+ special_light_key = "sec"
+ if("Droid")
+ cyborg_base_icon = "Security"
+ special_light_key = "service"
+ hat_offset = 0
+ return ..()
+
+/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
+ var/mob/living/silicon/robot/R = loc
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads")
+ if(!borg_icon)
+ return FALSE
+ switch(borg_icon)
+ if("Default")
+ cyborg_base_icon = "engineer"
+ if("Default - Treads")
+ cyborg_base_icon = "engi-tread"
+ special_light_key = "engineer"
+ return ..()
+
+/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
+ var/mob/living/silicon/robot/R = loc
+ var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Asteroid")
+ if(!borg_icon)
+ return FALSE
+ switch(borg_icon)
+ if("Lavaland")
+ cyborg_base_icon = "miner"
+ if("Asteroid")
+ cyborg_base_icon = "minerOLD"
+ special_light_key = "miner"
+ return ..()
\ No newline at end of file
diff --git a/modular_citadel/icons/mob/robots.dmi b/modular_citadel/icons/mob/robots.dmi
new file mode 100644
index 0000000000..ba39886615
Binary files /dev/null and b/modular_citadel/icons/mob/robots.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index cebbabd8da..60c6f1abcc 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2468,4 +2468,5 @@
#include "modular_citadel\code\game\objects\items\devices\PDA\PDA.dm"
#include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm"
#include "modular_citadel\code\modules\crafting\recipes.dm"
+#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm"
// END_INCLUDE