diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 27e5d22e83..a092b859b3 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -425,7 +425,6 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
switch(new_state)
if("Normal")
-
if(limb == BP_TORSO)
for(var/other_limb in BP_ALL - BP_TORSO)
pref.organ_data[other_limb] = null
@@ -450,6 +449,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/list/usable_manufacturers = list()
for(var/company in chargen_robolimbs)
var/datum/robolimb/M = chargen_robolimbs[company]
+ if(!(limb in M.parts))
+ continue
if(tmp_species in M.species_cannot_use)
continue
usable_manufacturers[company] = M
diff --git a/code/modules/clothing/masks/monitor.dm b/code/modules/clothing/masks/monitor.dm
index e8f6340172..9d0651d5ba 100644
--- a/code/modules/clothing/masks/monitor.dm
+++ b/code/modules/clothing/masks/monitor.dm
@@ -9,28 +9,10 @@
icon = 'icons/mob/monitor_icons.dmi'
icon_override = 'icons/mob/monitor_icons.dmi'
- icon_state = "ipc_blank"
- item_state = null
+ icon_state = "monitor"
var/monitor_state_index = "blank"
- var/global/list/monitor_states = list(
- "blank" = "ipc_blank",
- "pink" = "ipc_pink",
- "red" = "ipc_red",
- "green" = "ipc_green",
- "blue" = "ipc_blue",
- "breakout" = "ipc_breakout",
- "eight" = "ipc_eight",
- "goggles" = "ipc_goggles",
- "heart" = "ipc_heart",
- "monoeye" = "ipc_monoeye",
- "nature" = "ipc_nature",
- "orange" = "ipc_orange",
- "purple" = "ipc_purple",
- "shower" = "ipc_shower",
- "static" = "ipc_static",
- "yellow" = "ipc_yellow"
- )
+ var/global/list/monitor_states = list()
/obj/item/clothing/mask/monitor/set_dir()
dir = SOUTH
@@ -40,8 +22,13 @@
..()
var/mob/living/carbon/human/H = loc
if(istype(H) && H.wear_mask == src)
+ var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD]
+ var/datum/robolimb/robohead = all_robolimbs[E.model]
canremove = 0
- H << "\The [src] connects to your display output."
+ if(robohead.monitor_styles)
+ monitor_states = params2list(robohead.monitor_styles)
+ icon_state = monitor_states[monitor_state_index]
+ H << "\The [src] connects to your display output."
/obj/item/clothing/mask/monitor/dropped()
canremove = 1
@@ -52,9 +39,10 @@
return 0
if(istype(user))
var/obj/item/organ/external/E = user.organs_by_name[BP_HEAD]
- if(istype(E) && (E.robotic >= ORGAN_ROBOT))
+ var/datum/robolimb/robohead = all_robolimbs[E.model]
+ if(istype(E) && (E.robotic >= ORGAN_ROBOT) && robohead.monitor_styles)
return 1
- user << "You must have a robotic head to install this upgrade."
+ user << "You must have a compatible robotic head to install this upgrade."
return 0
/obj/item/clothing/mask/monitor/verb/set_monitor_state()
diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm
index e54598d23e..77c023c0db 100644
--- a/code/modules/organs/robolimbs.dm
+++ b/code/modules/organs/robolimbs.dm
@@ -1,6 +1,27 @@
var/list/all_robolimbs = list()
+var/list/robolimb_data = list()
var/list/chargen_robolimbs = list()
var/datum/robolimb/basic_robolimb
+var/const/standard_monitor_styles = "blank=ipc_blank;\
+ pink=ipc_pink;\
+ green=ipc_green,\
+ red=ipc_red;\
+ blue=ipc_blue;\
+ shower=ipc_shower;\
+ orange=ipc_orange;\
+ nature=ipc_nature;\
+ eight=ipc_eight;\
+ goggles=ipc_goggles;\
+ heart=ipc_heart;\
+ monoeye=ipc_monoeye;\
+ breakout=ipc_breakout;\
+ yellow=ipc_yellow;\
+ static=ipc_static;\
+ purple=ipc_purple;\
+ scroll=ipc_scroll;\
+ console=ipc_console;\
+ glider=ipc_gol_glider;\
+ rainbow=ipc_rainbow"
/proc/populate_robolimb_list()
basic_robolimb = new()
@@ -8,7 +29,7 @@ var/datum/robolimb/basic_robolimb
var/datum/robolimb/R = new limb_type()
all_robolimbs[R.company] = R
if(!R.unavailable_at_chargen)
- chargen_robolimbs[R.company] = R
+ chargen_robolimbs[R.company] = R //List only main brands and solo parts.
/datum/robolimb
var/company = "Unbranded" // Shown when selecting the limb.
@@ -16,38 +37,107 @@ var/datum/robolimb/basic_robolimb
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
var/list/species_cannot_use = list("Teshari")
+ var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
+ var/parts = BP_ALL //Defines what parts said brand can replace on a body.
/datum/robolimb/bishop
company = "Bishop"
desc = "This limb has a white polymer casing with blue holo-displays."
- icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi'
-/datum/robolimb/hesphaistos
+/datum/robolimb/bishop_alt1
+ company = "Bishop - Glyph"
+ desc = "This limb has a white polymer casing with blue holo-displays."
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi'
+ parts = list(BP_HEAD)
+
+/datum/robolimb/bishop_monitor
+ company = "Bishop Monitor"
+ desc = "Bishop Cybernetics' unique spin on a popular prosthetic head model. The themes conflict in an intriguing way."
+ icon = 'icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi'
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/hesphiastos
company = "Hesphiastos"
desc = "This limb has a militaristic black and green casing with gold stripes."
- icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi'
-/datum/robolimb/zenghu
- company = "Zeng-Hu"
- desc = "This limb has a rubbery fleshtone covering with visible seams."
- icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
+/datum/robolimb/hesphiastos_alt1
+ company = "Hesphiastos - Frontier"
+ desc = "A rugged prosthetic head featuring the standard Hesphiastos theme, a visor and an external display."
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi'
+ parts = list(BP_HEAD)
+ monitor_styles = "blank=hesphiastos_alt_off;\
+ pink=hesphiastos_alt_pink;\
+ orange=hesphiastos_alt_orange;\
+ goggles=hesphiastos_alt_goggles;\
+ scroll=hesphiastos_alt_scroll;\
+ rgb=hesphiastos_alt_rgb;\
+ rainbow=hesphiastos_alt_rainbow"
-/datum/robolimb/xion
- company = "Xion"
- desc = "This limb has a minimalist black and red casing."
- icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
+/datum/robolimb/hesphiastos_monitor
+ company = "Hesphiastos Monitor"
+ desc = "Hesphiastos' unique spin on a popular prosthetic head model. It looks rugged and sturdy."
+ icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi'
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
-/datum/robolimb/ipc
+/datum/robolimb/morpheus
company = "Morpheus"
desc = "This limb is simple and functional; no effort has been made to make it look human."
- icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
+ icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi'
+ monitor_styles = standard_monitor_styles
-/datum/robolimb/wardtakahashi
- company = "Ward-Takahashi"
- desc = "This limb features sleek black and white polymers."
- icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi.dmi'
+/datum/robolimb/morpheus_alt1
+ company = "Morpheus - Zenith"
+ desc = "This limb is simple and functional; no effort has been made to make it look human."
+ icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi'
+ parts = list(BP_HEAD)
+ unavailable_at_chargen = null
/datum/robolimb/veymed
company = "Vey-Med"
desc = "This high quality limb is nearly indistinguishable from an organic one."
- icon = 'icons/mob/human_races/cyberlimbs/veymed.dmi'
\ No newline at end of file
+ icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi'
+
+/datum/robolimb/wardtakahashi
+ company = "Ward-Takahashi"
+ desc = "This limb features sleek black and white polymers."
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi'
+
+/datum/robolimb/wardtakahashi_alt1
+ company = "Ward-Takahashi - Shroud"
+ desc = "This limb features sleek black and white polymers. This one looks more like a helmet of some sort."
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi'
+ parts = list(BP_HEAD)
+
+/datum/robolimb/wardtakahashi_monitor
+ company = "Ward-Takahashi Monitor"
+ desc = "Ward-Takahashi's unique spin on a popular prosthetic head model. It looks sleek and modern."
+ icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi'
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/xion
+ company = "Xion"
+ desc = "This limb has a minimalist black and red casing."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_main.dmi'
+
+/datum/robolimb/xion_alt1
+ company = "Xion Mfg. - Breach"
+ desc = "This limb has a minimalist black and red casing. Looks a bit menacing."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi'
+ parts = list(BP_HEAD)
+
+/datum/robolimb/xion_monitor
+ company = "Xion Mfg. Monitor"
+ desc = "Xion Mfg.'s unique spin on a popular prosthetic head model. It looks and minimalist and utilitarian."
+ icon = 'icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi'
+ parts = list(BP_HEAD)
+ monitor_styles = standard_monitor_styles
+
+/datum/robolimb/zenghu
+ company = "Zeng-Hu"
+ desc = "This limb has a rubbery fleshtone covering with visible seams."
+ icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi'
diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi
new file mode 100644
index 0000000000..e403436daf
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/bishop/bishop_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/bishop.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/bishop.dmi
rename to icons/mob/human_races/cyberlimbs/bishop/bishop_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi b/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi
new file mode 100644
index 0000000000..edd2236cfb
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/bishop/bishop_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi
new file mode 100644
index 0000000000..3b6daa48bc
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/hesphaistos.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/hesphaistos.dmi
rename to icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi
new file mode 100644
index 0000000000..5f3d72f3fc
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi
new file mode 100644
index 0000000000..7a0211e603
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/ipc.dmi b/icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/ipc.dmi
rename to icons/mob/human_races/cyberlimbs/morpheus/morpheus_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/veymed.dmi b/icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/veymed.dmi
rename to icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi
new file mode 100644
index 0000000000..10ea9c9514
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/wardtakahashi.dmi
rename to icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi
new file mode 100644
index 0000000000..2777d06ff8
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi
new file mode 100644
index 0000000000..84a7fec2a9
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_alt1.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/xion.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/xion.dmi
rename to icons/mob/human_races/cyberlimbs/xion/xion_main.dmi
diff --git a/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi
new file mode 100644
index 0000000000..0a049fc759
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/xion/xion_monitor.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/zenghu.dmi b/icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi
similarity index 100%
rename from icons/mob/human_races/cyberlimbs/zenghu.dmi
rename to icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi
diff --git a/icons/mob/monitor_icons.dmi b/icons/mob/monitor_icons.dmi
index 5dbc224fa3..542ff23fcc 100644
Binary files a/icons/mob/monitor_icons.dmi and b/icons/mob/monitor_icons.dmi differ