diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 1a7fd3e3bbe..c880d63618b 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -390,3 +390,7 @@
proc/close_spawn_windows()
src << browse(null, "window=latechoices") //closes late choices window
src << browse(null, "window=playersetup") //closes the player setup window
+
+ verb/ShowPreferences()
+ set category = "OOC"
+ preferences.ShowChoices(src)
\ No newline at end of file
diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm
index 9b566bba4b2..d9a690506be 100644
--- a/code/modules/mob/new_player/preferences.dm
+++ b/code/modules/mob/new_player/preferences.dm
@@ -125,6 +125,10 @@ datum/preferences
var/skill_specialization = null
var/list/skills = list() // skills can range from 0 to 3
+ // maps each organ to either null(intact), "cyborg" or "amputated"
+ // will probably not be able to do this for head and torso ;)
+ var/list/organ_data = list()
+
// OOC Metadata:
var/metadata = ""
@@ -279,7 +283,34 @@ datum/preferences
dat += "Blood Type: [b_type]
"
dat += "Skin Tone: [-s_tone + 35]/220
"
- // if(!IsGuestKey(user.key))//Seeing as it doesn't do anything, it may as well not show up.
+ dat += "Limbs: Adjust Limbs
"
+ for(var/name in organ_data)
+ var/status = organ_data[name]
+ var/organ_name = null
+ switch(name)
+ if("l_arm")
+ organ_name = "left arm"
+ if("r_arm")
+ organ_name = "right arm"
+ if("l_leg")
+ organ_name = "left leg"
+ if("r_leg")
+ organ_name = "right leg"
+ if("l_foot")
+ organ_name = "left foot"
+ if("r_foot")
+ organ_name = "right foot"
+ if("l_hand")
+ organ_name = "left hand"
+ if("r_hand")
+ organ_name = "right hand"
+
+ if(status == "cyborg")
+ dat += "\tRobotical [organ_name] prothesis
"
+ if(status == "amputated")
+ dat += "\tAmputated [organ_name]
"
+ dat+="
"
+
if(gender == MALE)
dat += "Underwear: [underwear_m[underwear]]
"
else
@@ -915,6 +946,40 @@ datum/preferences
if(species == "Skrell")
hair_style = new/datum/sprite_accessory/hair/alien/skrell/male/tentacle
+ if(link_tags["limbs"])
+ var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
+ if(!limb_name) return
+
+ var/limb = null
+ switch(limb_name)
+ if("Left Leg")
+ limb = "l_leg"
+ if("Right Leg")
+ limb = "r_leg"
+ if("Left Arm")
+ limb = "l_arm"
+ if("Right Arm")
+ limb = "r_arm"
+ if("Left Foot")
+ limb = "l_foot"
+ if("Right Foot")
+ limb = "r_foot"
+ if("Left Hand")
+ limb = "l_hand"
+ if("Right Hand")
+ limb = "r_hand"
+
+ var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis")
+ if(!new_state) return
+
+ switch(new_state)
+ if("Normal")
+ organ_data[limb] = null
+ if("Amputated")
+ organ_data[limb] = "amputated"
+ if("Prothesis")
+ organ_data[limb] = "cyborg"
+
if(link_tags["UI"])
switch(UI_style)
if("Midnight")
@@ -1135,6 +1200,17 @@ datum/preferences
character.h_style = h_style
character.f_style = f_style
+ // Destroy/cyborgize organs
+ for(var/name in organ_data)
+ var/datum/organ/external/O = character.organs[name]
+ if(!O) continue
+
+ var/status = organ_data[name]
+ if(status == "amputated")
+ del O
+ else if(status == "cyborg")
+ O.status |= ROBOT
+
switch(UI_style)
if("Midnight")
character.UI = 'screen1_Midnight.dmi'
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 7c3c2a2f1e7..82119490662 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -219,7 +219,24 @@ datum/preferences
else if(g == "f")
preview_icon = new /icon('genetics.dmi', "skrell_female_s", "dir" = preview_dir)
else
- preview_icon = new /icon('human.dmi', "body_[g]_s", "dir" = preview_dir)
+ preview_icon = new /icon('human.dmi', "torso_[g]_s", "dir" = preview_dir)
+
+ preview_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
+
+ if(organ_data["head"] != "amputated")
+ preview_icon.Blend(new /icon('human.dmi', "head_[g]_s"), ICON_OVERLAY)
+
+ for(var/name in organ_data)
+ if(organ_data[name] == "amputated") continue
+
+ var/icon/temp = new /icon('human.dmi', "[name]_s")
+ if(organ_data[name] == "cyborg")
+ temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
+
+ preview_icon.Blend(temp, ICON_OVERLAY)
+
+ preview_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
+
// Skin tone
if (s_tone >= 0)
diff --git a/code/modules/mob/new_player/savefile.dm b/code/modules/mob/new_player/savefile.dm
index f0c4c3a6bd6..981e84658dc 100644
--- a/code/modules/mob/new_player/savefile.dm
+++ b/code/modules/mob/new_player/savefile.dm
@@ -157,6 +157,8 @@ datum/preferences/proc/savefile_save(mob/user, slot)
F["skills"] << src.skills
F["skill_specialization"] << src.skill_specialization
+ F["organ_data"] << src.organ_data
+
F["OOC_Notes"] << src.metadata
return 1
@@ -250,6 +252,9 @@ datum/preferences/proc/savefile_load(mob/user, slot)
if(!src.skills) src.skills = list()
if(!src.used_skillpoints) src.used_skillpoints= 0
+ F["organ_data"] >> src.organ_data
+ if(!src.organ_data) src.organ_data = list()
+
F["job_engsec_high"] >> src.job_engsec_high
F["job_engsec_med"] >> src.job_engsec_med
F["job_engsec_low"] >> src.job_engsec_low