From b831a64bc23803930205fa2b28f301553002222a Mon Sep 17 00:00:00 2001 From: cib Date: Thu, 5 Jul 2012 07:00:22 +0200 Subject: [PATCH] Added limb selection to preferences. --- code/modules/mob/new_player/new_player.dm | 4 + code/modules/mob/new_player/preferences.dm | 78 ++++++++++++++++++- .../mob/new_player/preferences_setup.dm | 19 ++++- code/modules/mob/new_player/savefile.dm | 5 ++ 4 files changed, 104 insertions(+), 2 deletions(-) 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