diff --git a/baystation12.dme b/baystation12.dme index 557b577e3dd..517d479c851 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1089,6 +1089,7 @@ #include "code\modules\clothing\spacesuits\rig\suits\light.dm" #include "code\modules\clothing\spacesuits\rig\suits\merc.dm" #include "code\modules\clothing\spacesuits\rig\suits\station.dm" +#include "code\modules\clothing\spacesuits\rig\suits\terminator.dm" #include "code\modules\clothing\spacesuits\void\captain.dm" #include "code\modules\clothing\spacesuits\void\merc.dm" #include "code\modules\clothing\spacesuits\void\station.dm" @@ -1409,6 +1410,7 @@ #include "code\modules\mob\living\carbon\human\species\outsider\vox.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm" #include "code\modules\mob\living\carbon\human\species\station\human_subspecies.dm" +#include "code\modules\mob\living\carbon\human\species\station\machine_subspecies.dm" #include "code\modules\mob\living\carbon\human\species\station\monkey.dm" #include "code\modules\mob\living\carbon\human\species\station\resomi.dm" #include "code\modules\mob\living\carbon\human\species\station\slime.dm" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index dc20f8400bd..9a075af3912 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -22,6 +22,7 @@ #define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB) #define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB) #define HAS_SOCKS 0x40 // If this species can wear socks +#define HAS_FBP 0x80 // If for whatever ungodly reason we decide to ever have non-Shell FBPs. // Languages. #define LANGUAGE_EAL "Encoded Audio Language" diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index e543fafdcfb..e4d9d85b97b 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -59,13 +59,13 @@ var/global/list/socks_f = list( "White thigh" = "white_thigh", "Black normal" = "black_norm", "Black short" = "black_short", "Black knee" = "black_knee", "Black thigh" = "black_thigh", "Striped normal" = "striped_norm", "Striped short" = "striped_short", "Striped knee" = "striped_knee", "Striped thigh" = "striped_thigh", - "Rainbow normal" = "rainbow_norm", "Rainbow short" = "rainbow_short", "Rainbow knee" = "rainbow_knee", + "Rainbow normal" = "rainbow_norm", "Rainbow short" = "rainbow_short", "Rainbow knee" = "rainbow_knee", "Rainbow thigh" = "rainbow_thigh", "Pantyhose" = "pantyhose", "None") var/global/list/socks_m = list( "White normal" = "white_norm", "White short" = "white_short", "White knee" = "white_knee", - "Black normal" = "black_norm", "Black short" = "black_short", "Black knee" = "black_knee", - "Striped normal" = "striped_norm", "Striped short" = "striped_short", "Striped knee" = "striped_knee", + "Black normal" = "black_norm", "Black short" = "black_short", "Black knee" = "black_knee", + "Striped normal" = "striped_norm", "Striped short" = "striped_short", "Striped knee" = "striped_knee", "Rainbow normal" = "rainbow_norm", "Rainbow short" = "rainbow_short", "Rainbow knee" = "rainbow_knee", "None") //Backpacks @@ -84,6 +84,7 @@ var/global/list/endgame_exits = list() var/global/list/endgame_safespawns = list() var/global/list/syndicate_access = list(access_maint_tunnels, access_syndicate, access_external_airlocks) + ////////////////////////// /////Initial Building///// ////////////////////////// diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 0755cfb5f89..110a59ea4c7 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1682,7 +1682,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containertype = /obj/structure/closet/crate containername = "glowsticks crate" group = "Operations" - + /datum/supply_packs/randomised/illegalguns name = "Illegal weapons crate" num_contained = 2 @@ -1707,3 +1707,14 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Space-bike Crate" contraband = 1 group = "Operations" + +/datum/supply_packs/ipc_tag_pack + name = "IPC/Shell Tag Implanter Crate" + contains = list(/obj/item/weapon/implanter/ipc_tag, + /obj/item/weapon/implanter/ipc_tag, + /obj/item/weapon/implanter/ipc_tag + ) + cost = 40 + containertype = /obj/structure/closet/crate + containername = "IPC/Shell tag implanters" + group = "Security" diff --git a/code/game/antagonist/station/changeling.dm b/code/game/antagonist/station/changeling.dm index a98abea5881..462460b06f8 100644 --- a/code/game/antagonist/station/changeling.dm +++ b/code/game/antagonist/station/changeling.dm @@ -6,7 +6,7 @@ feedback_tag = "changeling_objective" restricted_jobs = list("AI", "Cyborg", "Head of Security", "Captain", "Internal Affairs Agent") protected_jobs = list("Security Officer", "Warden", "Detective") - restricted_species = list("Machine") + restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame") welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them." flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE antaghud_indicator = "hudchangeling" diff --git a/code/game/antagonist/station/thrall.dm b/code/game/antagonist/station/thrall.dm index f6f1db84dcf..876eeac0723 100644 --- a/code/game/antagonist/station/thrall.dm +++ b/code/game/antagonist/station/thrall.dm @@ -8,7 +8,7 @@ var/datum/antagonist/thrall/vampire_thrall = null feedback_tag = "thrall_objective" restricted_jobs = list("AI", "Cyborg", "Chaplain") protected_jobs = list() - restricted_species = list("Machine") + restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame") welcome_text = "You are a vampire's thrall: a pawn to be commanded by them at will." flags = 0 antaghud_indicator = "hudthrall" diff --git a/code/game/antagonist/station/vampire.dm b/code/game/antagonist/station/vampire.dm index f69cc38da4f..d8436f4d261 100644 --- a/code/game/antagonist/station/vampire.dm +++ b/code/game/antagonist/station/vampire.dm @@ -8,7 +8,7 @@ var/datum/antagonist/vampire/vamp = null feedback_tag = "vampire_objective" restricted_jobs = list("AI", "Cyborg", "Chaplain", "Head of Security", "Captain", "Internal Affairs Agent") protected_jobs = list("Security Officer", "Warden", "Detective") - restricted_species = list("Machine", "Diona") + restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame","Diona") welcome_text = "You are a Vampire! Use the \"Vampire Help\" command to learn about the backstory and mechanics! Stay away from the Chaplain, and use the darkness to your advantage." flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE antaghud_indicator = "hudvampire" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 7a59519ee76..834837e190f 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -319,10 +319,14 @@ var/global/list/additional_antag_types = list() if(M.client) clients++ if(ishuman(M)) + var/mob/living/carbon/human/H = M if(M.stat != DEAD) surviving_humans++ if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations) escaped_humans++ + if (isipc(H)) + var/datum/species/machine/machine = H.species + machine.update_tag(H, H.client) if(M.stat != DEAD) surviving_total++ if(M.loc && M.loc.loc && M.loc.loc.type in escape_locations) diff --git a/code/game/gamemodes/vampire/vampire_helpers.dm b/code/game/gamemodes/vampire/vampire_helpers.dm index 6400475d00a..5bde0d4dac2 100644 --- a/code/game/gamemodes/vampire/vampire_helpers.dm +++ b/code/game/gamemodes/vampire/vampire_helpers.dm @@ -89,7 +89,7 @@ src << "You lack the power required to affect another creature of the Veil." return 0 - if (T.get_species() == "Machine") + if (isipc(T)) if (notify) src << "You lack the power interact with mechanical constructs." return 0 diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm index 49d4f16ca53..3bb818ba473 100644 --- a/code/game/objects/items/weapons/implants/implanter.dm +++ b/code/game/objects/items/weapons/implants/implanter.dm @@ -132,3 +132,69 @@ S.remove_from_storage(A) A.loc.contents.Remove(A) update() + +/obj/item/weapon/implanter/ipc_tag + name = "IPC/Shell tag implanter" + desc = "A special implanter used for implanting synthetics with a special tag." + var/obj/item/organ/ipc_tag/ipc_tag = null + +/obj/item/weapon/implanter/ipc_tag/New() + ipc_tag = new(src) + ..() + update() + +/obj/item/weapon/implanter/ipc_tag/update() + if (ipc_tag) + icon_state = "cimplanter1" + else + icon_state = "cimplanter0" + return + +/obj/item/weapon/implanter/ipc_tag/attack(mob/M as mob, mob/user as mob) + if (!ishuman(M)) + return + + if (!ipc_tag) + user << "[src] is empty!" + return + + var/mob/living/carbon/human/H = M + if (!H.species || !isipc(H) || !H.organs_by_name["groin"]) + user << "You cannot use this on a non-synthetic organism!" + return + + if (H.internal_organs_by_name["ipc tag"]) + user << "[H] is already tagged!" + return + + for (var/mob/O in viewers(M, null)) + O.show_message("[M] has been implanted by [user].", 1) + + M.attack_log += text("\[[time_stamp()]\] Implanted with [src.name] ([src.ipc_tag.name]) by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] ([src.ipc_tag.name]) to implant [M.name] ([M.ckey])") + msg_admin_attack("[key_name_admin(user)] implanted [key_name_admin(M)] with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") + + user.show_message("You implanted the implant into [M].") + + ipc_tag.replaced(H, H.organs_by_name["groin"]) + + qdel(ipc_tag) + + update() + + var/datum/species/machine/machine = H.species + machine.update_tag(H, H.client) + +/obj/item/weapon/implanter/ipc_tag/attackby(var/obj/item/organ/ipc_tag/new_tag, mob/user as mob) + ..() + + if (!istype(new_tag)) + return + + if (ipc_tag) + return + + ipc_tag = new_tag + user.drop_item() + new_tag.loc = src + update() \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index e3104f7d707..fd4400e68c4 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -59,10 +59,10 @@ ..() if(isliving(AM)) var/mob/M = AM - + if(M.buckled) //wheelchairs, office chairs, rollerbeds return - + M << "You step on \the [src]!" playsound(src.loc, 'sound/effects/glass_step.ogg', 50, 1) // not sure how to handle metal shards with sounds if(ishuman(M)) @@ -73,7 +73,7 @@ if( H.shoes || ( H.wear_suit && (H.wear_suit.body_parts_covered & FEET) ) ) return - + var/list/check = list("l_foot", "r_foot") while(check.len) var/picked = pick(check) @@ -94,5 +94,8 @@ /obj/item/weapon/material/shard/shrapnel/New(loc) ..(loc, "steel") +/obj/item/weapon/material/shard/shrapnel/flechette/New(loc) + ..(loc, "titanium") + /obj/item/weapon/material/shard/phoron/New(loc) ..(loc, "phglass") diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm index 6fd42e76c9e..4c8cdac13f8 100644 --- a/code/modules/admin/verbs/bluespacetech.dm +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -129,7 +129,7 @@ switch(species.name) if("Tajara") bsc() - if("Machine") + if("Baseline Frame") bsb() if("Diona") bsd() @@ -182,7 +182,7 @@ suicide() proc/bsb() - if(set_species("Machine")) + if(set_species("Baseline Frame")) h_style = "blue IPC screen" name = "Bluespace Bot" voice_name = "Bluespace Bot" @@ -258,7 +258,7 @@ suicide() proc/bsv() - if(set_species("Vaurca")) + if(set_species("Vaurca Worker")) h_style = "Bald" name = "Bluespace Bug" voice_name = "Bluespace Bug" diff --git a/code/modules/antag_contest/contest_objective.dm b/code/modules/antag_contest/contest_objective.dm index 2b88ed59b46..25fd4070c61 100644 --- a/code/modules/antag_contest/contest_objective.dm +++ b/code/modules/antag_contest/contest_objective.dm @@ -21,10 +21,10 @@ for(var/datum/mind/possible_target in ticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) if (require_synth) - if (possible_target.current.get_species() == "Machine") + if (possible_target.current.get_species() == "Baseline Frame") possible_targets += possible_target else - if (possible_target.current.get_species() == "Machine") + if (possible_target.current.get_species() == "Baseline Frame") continue possible_targets += possible_target if(possible_targets.len > 0) @@ -33,9 +33,9 @@ /datum/objective/competition/find_target_by_role(role, role_type = 0, var/require_synth = 0) for(var/datum/mind/possible_target in ticker.minds) if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role)) - if (require_synth && possible_target.current.get_species() != "Machine") + if (require_synth && possible_target.current.get_species() != "Baseline Frame") continue - if (!require_synth && possible_target.current.get_species() == "Machine") + if (!require_synth && possible_target.current.get_species() == "Baseline Frame") continue target = possible_target break diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 99c2d96b3e7..71037aade69 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -66,7 +66,7 @@ log_debug("SQL CHARACTER LOAD: Logic error, general/basic/load_special() didn't return any rows when it should have. Character ID: [pref.current_character].") /datum/category_item/player_setup_item/general/basic/sanitize_character() - pref.age = sanitize_integer(text2num(pref.age), AGE_MIN, AGE_MAX, initial(pref.age)) + pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age)) pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders)) pref.real_name = sanitize_name(pref.real_name, pref.species) if(!pref.real_name) @@ -121,9 +121,9 @@ return TOPIC_REFRESH else if(href_list["age"]) - var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference", pref.age) as num|null + var/new_age = input(user, "Choose your character's age:\n([pref.getMinAge()]-[pref.getMaxAge()])", "Character Preference", pref.age) as num|null if(new_age && CanUseTopic(user)) - pref.age = max(min(round(text2num(new_age)), AGE_MAX), AGE_MIN) + pref.age = max(min(round(text2num(new_age)), pref.getMaxAge()),pref.getMinAge()) return TOPIC_REFRESH else if(href_list["spawnpoint"]) @@ -141,4 +141,4 @@ pref.metadata = sanitize(new_metadata) return TOPIC_REFRESH - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index b934cdbe69c..934d525855a 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -161,7 +161,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O user << browse_rsc(pref.preview_icon_front, "previewicon.png") user << browse_rsc(pref.preview_icon_side, "previewicon2.png") - var/mob_species = all_species[pref.species] + var/datum/species/mob_species = all_species[pref.species] . += "
| Body "
. += "(®)"
. += " " @@ -170,69 +170,81 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if(has_flag(mob_species, HAS_SKIN_TONE)) . += "Skin Tone: [-pref.s_tone + 35]/220 " . += "Needs Glasses: [pref.disabilities & NEARSIGHTED ? "Yes" : "No"] " - . += "Limbs: Adjust " - . += "Internal Organs: Adjust " + if(has_flag(mob_species, HAS_FBP)) + . += "Shell Type: Shellect " + else + . += "Limbs: Adjust " + . += "Internal Organs: Adjust " + . += "Prosthesis/Amputations: Reset " + //display limbs below var/ind = 0 - for(var/name in pref.organ_data) - var/status = pref.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("heart") - organ_name = "heart" - if("eyes") - organ_name = "eyes" - - if(status == "cyborg") - ++ind - if(ind > 1) - . += ", " - var/datum/robolimb/R - if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) - R = all_robolimbs[pref.rlimb_data[name]] - else - R = basic_robolimb - . += "\t[R.company] [organ_name] prothesis" - else if(status == "amputated") - ++ind - if(ind > 1) - . += ", " - . += "\tAmputated [organ_name]" - else if(status == "mechanical") - ++ind - if(ind > 1) - . += ", " - . += "\tMechanical [organ_name]" - else if(status == "assisted") - ++ind - if(ind > 1) - . += ", " - switch(organ_name) + if(mob_species.name != "Shell Frame") + for(var/name in pref.organ_data) + var/status = pref.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("groin") + organ_name = "lower body" + if("chest") + organ_name = "upper body" + if("head") + organ_name = "head" if("heart") - . += "\tPacemaker-assisted [organ_name]" - if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements - . += "\tSurgically altered [organ_name]" + organ_name = "heart" if("eyes") - . += "\tRetinal overlayed [organ_name]" + organ_name = "eyes" + + if(status == "cyborg") + ++ind + if(ind > 1) + . += ", " + var/datum/robolimb/R + if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]]) + R = all_robolimbs[pref.rlimb_data[name]] else - . += "\tMechanically assisted [organ_name]" + R = basic_robolimb + . += "\t[R.company] [organ_name] prosthesis" + else if(status == "amputated") + ++ind + if(ind > 1) + . += ", " + . += "\tAmputated [organ_name]" + else if(status == "mechanical") + ++ind + if(ind > 1) + . += ", " + . += "\tMechanical [organ_name]" + else if(status == "assisted") + ++ind + if(ind > 1) + . += ", " + switch(organ_name) + if("heart") + . += "\tPacemaker-assisted [organ_name]" + if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements + . += "\tSurgically altered [organ_name]" + if("eyes") + . += "\tRetinal overlayed [organ_name]" + else + . += "\tMechanically assisted [organ_name]" if(!ind) . += "\[...\] " else @@ -302,7 +314,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O continue if(pref.gender == FEMALE && S.gender == MALE) continue - if(!(mob_species.get_bodytype() in S.species_allowed)) + if(!(mob_species.get_bodytype() in S.species_allowed) || mob_species.name == "Industrial Frame") //super snowflake check because Industrial Frames are IPC bodytypes, but don't have an IPC head. continue valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] @@ -337,6 +349,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.b_hair = 0//hex2num(copytext(new_hair, 6, 8)) pref.s_tone = 0 + pref.organ_data.Cut() + pref.rlimb_data.Cut() + return TOPIC_REFRESH else if(href_list["hair_color"]) @@ -420,9 +435,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O return TOPIC_REFRESH else if(href_list["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") + var/list/acceptable_organ_input = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand") + var/limb_name = input(user, "Which limb do you want to change?") as null|anything in acceptable_organ_input if(!limb_name && !CanUseTopic(user)) return TOPIC_NOACTION + var/carries_organs = 0 var/limb = null var/second_limb = null // if you try to change the arm, the hand should also change var/third_limb = null // if you try to unchange the hand, the arm should also change @@ -451,8 +468,20 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O if("Right Hand") limb = "r_hand" third_limb = "r_arm" + if("Lower Body") + limb = "groin" + carries_organs = 1 + if("Upper Body") + limb = "chest" + carries_organs = 1 + if("Head") + limb = "head" + carries_organs = 1 - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis") + var/list/available_states = list("Normal","Amputated","Prosthesis") + if(carries_organs) + available_states = list("Normal","Prosthesis") + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in available_states if(!new_state && !CanUseTopic(user)) return TOPIC_NOACTION switch(new_state) @@ -469,12 +498,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.organ_data[second_limb] = "amputated" pref.rlimb_data[second_limb] = null - if("Prothesis") + if("Prosthesis") var/tmp_species = pref.species ? pref.species : "Human" var/list/usable_manufacturers = list() for(var/company in chargen_robolimbs) var/datum/robolimb/M = chargen_robolimbs[company] - if(tmp_species in M.species_cannot_use) + if(!(tmp_species in M.species_can_use)) continue usable_manufacturers[company] = M if(!usable_manufacturers.len) @@ -514,6 +543,49 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O pref.organ_data[organ] = "mechanical" return TOPIC_REFRESH + else if(href_list["reset_organs"]) + pref.organ_data.Cut() + pref.rlimb_data.Cut() + + return TOPIC_REFRESH + + else if(href_list["shell"]) + var/shellection = input(user, "What species shall you mimic?") as null|anything in list("Humanity","Vaurcae","Unathi","Tajara","Skrell") + if(!shellection) return + + var/shell_type + switch(shellection) + if("Humanity") + shell_type = "Human" + mob_species.tail = null + mob_species.tail_animation = null + if("Vaurcae") + shell_type = "Vaurca" + mob_species.tail = null + mob_species.tail_animation = null + if("Unathi") + shell_type = "Unathi" + mob_species.tail = "sogtail" + mob_species.tail_animation = 'icons/mob/species/unathi/tail.dmi' + if("Tajara") + shell_type = "Tajara" + mob_species.tail = "tajtail" + mob_species.tail_animation = 'icons/mob/species/tajaran/tail.dmi' + if("Skrell") + shell_type = "Skrell" + mob_species.tail = null + mob_species.tail_animation = null + + mob_species.bodytype = shell_type + var/shell_prosthetic = "[shell_type] Synthskin" + var/total_organs = list("l_leg","r_leg","l_arm","r_arm","l_foot","r_foot","l_hand","r_hand","groin","chest","head") + for(var/organ in total_organs) + pref.rlimb_data[organ] = shell_prosthetic + for(var/organ in total_organs) + pref.organ_data[organ] = "cyborg" + + return TOPIC_REFRESH + else if(href_list["disabilities"]) var/disability_flag = text2num(href_list["disabilities"]) pref.disabilities ^= disability_flag @@ -581,3 +653,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O dat += " |