diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index c234366012a..09e3c0c3c57 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -219,10 +219,11 @@ #define APPEARANCE_EYE_COLOR 256 #define APPEARANCE_CULTURE 512 #define APPEARANCE_LANGUAGE 1024 +#define APPEARANCE_PROSTHETICS 2048 #define APPEARANCE_ALL 65535 #define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR) #define APPEARANCE_PLASTICSURGERY (APPEARANCE_ALL & ~APPEARANCE_RACE) -#define APPEARANCE_SURGERYKIT (APPEARANCE_PLASTICSURGERY & ~APPEARANCE_LANGUAGE) +#define APPEARANCE_SURGERYKIT (APPEARANCE_PLASTICSURGERY & ~APPEARANCE_LANGUAGE & ~ APPEARANCE_PROSTHETICS) // Click cooldown #define DEFAULT_ATTACK_COOLDOWN 8 //Default timeout for aggressive actions @@ -423,10 +424,14 @@ #define PROSTHETIC_TESLA "Tesla Powered Prosthetics" #define PROSTHETIC_TESLA_BODY "Industrial Tesla Powered Prosthetics" #define PROSTHETIC_VAURCA "Vaurca Robotic Limb" +#define PROSTHETIC_UNBRANDED "Unbranded" #define PROSTHETIC_HOPLAN "Hoplan Head" #define PROSTHETIC_RAXUS "Raxus Head" #define PROSTHETIC_INDRICUS "Indricus Head" +//Prosthetics that aren't restricted by species +#define PROSTHETICS_UNRESTRICTED list(PROSTHETIC_BC, PROSTHETIC_HI, PROSTHETIC_XMG, PROSTHETIC_UNBRANDED, PROSTHETIC_ZH) + //Brain Damage defines #define BRAIN_DAMAGE_MILD 10 #define BRAIN_DAMAGE_SEVERE 40 diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 96f32dabeb8..bec615079cc 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -143,6 +143,62 @@ check_dna() dna.ready_dna(src) +/mob/living/carbon/human/proc/change_limb(var/limb, var/company) + var/obj/item/organ/external/target = organs_by_name[limb] + if(limb == BP_HEAD || limb == BP_CHEST || limb == BP_GROIN) //don't want to robotize or delete head/torso if this somehow happens + return + if(company == "Normal" || !target || target.species == GLOB.all_species["Nymph Limb"]) //If they're missing the limb, create a new one so it can be transformed properly. We also need to redo this here if they're editing a nymph limb to properly remove it. + species.create_organs(src) + remove_verb(src, /mob/living/carbon/human/proc/detach_nymph_limb) //this resets organs, so we can remove this here. if we don't we get funny stuff like being able to detach non-nymph arms or the verb just sticks around + + if(company == "Amputated") + organs_by_name[limb] = null + organs -= target + if(target.children) // This might need to become recursive. + for(var/obj/item/organ/external/child in target.children) + organs_by_name[child.limb_name] = null + organs -= child + + if(company == "Diona Nymph") //special snowflake code for diona limbs go brrr + target.AddComponent(/datum/component/nymph_limb) + var/datum/component/nymph_limb/D = target.GetComponent(/datum/component/nymph_limb) + if(D) + D.nymphize(src, target.limb_name, TRUE) + + else + target.robotize(company) + + force_update_limbs() + updatehealth() + update_body() + return TRUE + +/mob/living/carbon/human/proc/change_organ(var/organ_tag, var/modification) + var/obj/item/organ/internal/target = internal_organs_by_name[organ_tag] + if(istype(target)) + switch(modification) + if("Assisted") + target.mechassist() + if("Mechanical") + target.robotize() + if("Removed") + qdel(target) + update_body() + return TRUE + +/mob/living/carbon/human/proc/generate_valid_prosthetics() + var/list/valid_prosthetics = PROSTHETICS_UNRESTRICTED + if(species.valid_prosthetics) + valid_prosthetics.Add(species.valid_prosthetics) + return valid_prosthetics + +/mob/living/carbon/human/proc/generate_valid_limbs() + var/list/valid_limbs = list() + for(var/L in BP_ALL_LIMBS) + if(L != BP_CHEST && L != BP_HEAD && L != BP_GROIN) + valid_limbs += parse_zone(L) //turn it into actual text for the selection + return valid_limbs + /mob/living/carbon/human/proc/generate_valid_species(var/check_whitelist = 1, var/list/whitelist = list(), var/list/blacklist = list()) var/list/valid_species = new() for(var/current_species_name in GLOB.all_species) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index adee8cc9bf6..41cf8a1d4dd 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -307,6 +307,8 @@ var/character_creation_psi_points = 0 /// Is this species psionically deaf? var/psi_deaf = FALSE + ///Which species-unique robolimb types can this species take? + var/list/valid_prosthetics /datum/species/proc/get_eyes(var/mob/living/carbon/human/H) return diff --git a/code/modules/mob/living/carbon/human/species/station/human/human.dm b/code/modules/mob/living/carbon/human/species/station/human/human.dm index bf099c31b5e..4a0e3f9e44a 100644 --- a/code/modules/mob/living/carbon/human/species/station/human/human.dm +++ b/code/modules/mob/living/carbon/human/species/station/human/human.dm @@ -60,6 +60,7 @@ character_color_presets = list("Dark" = "#000000", "Warm" = "#250302", "Cold" = "#1e1e29") onfire_overlay = 'icons/mob/burning/burning_human.dmi' + valid_prosthetics = list(PROSTHETIC_SYNTHSKIN) /datum/species/human/handle_npc(var/mob/living/carbon/human/H) if(H.stat != CONSCIOUS) diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 8bef8c6adfd..017b9df3574 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -129,6 +129,7 @@ metabolism_mod = 0.8 meat_type = /obj/item/reagent_containers/food/snacks/meat/adhomai + valid_prosthetics = list(PROSTHETIC_TESLA) /datum/species/tajaran/after_equip(var/mob/living/carbon/human/H) . = ..() diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm index 29396cec7f4..66ea0909796 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm @@ -188,6 +188,8 @@ bump_flag = HEAVY swap_flags = ~HEAVY push_flags = (~HEAVY) ^ ROBOT + possible_external_organs_modifications = list("Normal", "Amputated") //We don't have any alternate limbs for Tesla suits + valid_prosthetics = null /datum/species/tajaran/tesla_body/New() ..() diff --git a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm index cd72e5b914c..50fba1cf6e8 100644 --- a/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/station/unathi/unathi.dm @@ -133,6 +133,7 @@ zombie_type = SPECIES_ZOMBIE_UNATHI possible_external_organs_modifications = list("Normal","Amputated","Prosthesis", "Diona Nymph") + valid_prosthetics = list(PROSTHETIC_AUTAKH) /datum/species/unathi/after_equip(var/mob/living/carbon/human/H) . = ..() diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm index a040e80c8d3..1ad6a8695ef 100644 --- a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm +++ b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca.dm @@ -148,6 +148,7 @@ alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_STOMACH, BP_APPENDIX) psi_deaf = TRUE possible_speech_bubble_types = list("robot", "default") + valid_prosthetics = list(PROSTHETIC_VAURCA) /datum/species/bug/before_equip(var/mob/living/carbon/human/H) . = ..() diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca_subspecies.dm index 0b46b2a9f36..505eac2b39b 100644 --- a/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/vaurca/vaurca_subspecies.dm @@ -139,6 +139,8 @@ BP_APPENDIX = /obj/item/organ/internal/appendix/vaurca, BP_HIVENET_SHIELD = /obj/item/organ/internal/augment/hiveshield ) + possible_external_organs_modifications = list("Normal", "Amputated") //We don't have any limb modfications for this species + valid_prosthetics = null /datum/species/bug/type_c/New() ..() @@ -228,6 +230,8 @@ ) default_h_style = "Bald" + possible_external_organs_modifications = list("Normal", "Amputated") //We don't have any limb modfications for this species + valid_prosthetics = null /datum/species/bug/type_big/handle_post_spawn(var/mob/living/carbon/human/H) H.mutations |= HULK @@ -296,6 +300,8 @@ Bulwarks are much larger and have significantly thicker carapaces than most Vaur sprint_speed_factor = 1.0 stamina = 50 + possible_external_organs_modifications = list("Normal", "Amputated") //We don't have any limb modfications for this species, yet + valid_prosthetics = null /datum/species/bug/type_e/New() ..() diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/nano/modules/human_appearance.dm index f13fd09fcfb..57abcea138e 100644 --- a/code/modules/nano/modules/human_appearance.dm +++ b/code/modules/nano/modules/human_appearance.dm @@ -18,6 +18,9 @@ var/list/valid_citizenships = list() var/list/valid_accents = list() var/list/valid_languages = list() + var/list/valid_prosthetics = list() + var/list/valid_limbs = list() + var/list/valid_organs = list() var/check_whitelist var/list/whitelist @@ -184,6 +187,22 @@ . = TRUE if("set_height") owner.height = clamp(params["height"], owner.species.height_min, owner.species.height_max) + if("prosthetics") + if(can_change(APPEARANCE_PROSTHETICS)) + var/limb = tgui_input_list(owner, "Select a Limb", "Limb Modifications", valid_limbs) + limb = reverse_parse_zone(limb) //turn it back into a proper organ tag + if(limb) + var/company = tgui_input_list(owner, "Select a Limb Type", "Limb Modifications", owner.species.possible_external_organs_modifications) //For amputated or nymph we just pass it straight into change_limb + if(company == "Prosthesis") + company = tgui_input_list(owner, "Select a Manufacturer", "Limb Modifications", valid_prosthetics) + owner.change_limb(limb, company) + . = TRUE + if("organs") + if(can_change(APPEARANCE_PROSTHETICS)) + var/organ = tgui_input_list(owner, "Select an Organ", "Organ Modification", valid_organs) + var/obj/item/organ/internal/O = owner.internal_organs_by_name[organ] + var/modification = tgui_input_list(owner, "Select a Modification", "Organ Modification", O.possible_modifications) + owner.change_organ(organ, modification) /datum/tgui_module/appearance_changer/ui_interact(var/mob/user, var/datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -208,6 +227,7 @@ data["height_max"] = owner.species.height_max data["height_min"] = owner.species.height_min data["owner_height"] = owner.height + data["change_prosthetics"] = can_change(APPEARANCE_PROSTHETICS) data["owner_gender"] = owner.gender data["owner_pronouns"] = owner.pronouns @@ -301,6 +321,9 @@ valid_citizenships = list() valid_accents = list() valid_languages = list() + valid_prosthetics = list() + valid_limbs = list() + valid_organs = list() generate_data() /datum/tgui_module/appearance_changer/proc/generate_data() @@ -344,3 +367,9 @@ valid_accents = owner.origin.possible_accents if(!length(valid_languages)) valid_languages = owner.generate_valid_languages() + if(!length(valid_prosthetics)) + valid_prosthetics = owner.generate_valid_prosthetics() + if(!length(valid_limbs)) + valid_limbs = owner.generate_valid_limbs() + if(!length(valid_organs)) + valid_organs = owner.species.alterable_internal_organs diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index e0aa237df62..4bed2eabe12 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -76,7 +76,7 @@ /obj/item/organ/internal/proc/special_condition() // For unique conditions return -/obj/item/organ/internal/robotize(var/company = "Unbranded") +/obj/item/organ/internal/robotize(var/company = PROSTHETIC_UNBRANDED) ..() min_bruised_damage += 5 min_broken_damage += 10 diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 4b2dcd59325..6817886b3f3 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -374,6 +374,13 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) if(robotic_name) name = robotic_name +/obj/item/organ/proc/derobotize() //Turn a robot organ back into a flesh one. Used for appearance changers, etc. + robotic = initial(robotic) + status = initial(status) + drop_sound = initial(drop_sound) + pickup_sound = initial(pickup_sound) + name = initial(name) + /obj/item/organ/proc/mechassist() //Used to add things like pacemakers, etc status = ORGAN_ASSISTED robotic = ROBOTIC_ASSISTED diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 5fefce39009..336eb3a69f3 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -18,7 +18,7 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) /datum/robolimb /// Shown when selecting the limb. - var/company = "Unbranded" + var/company = PROSTHETIC_UNBRANDED /// Seen when examining a limb. var/desc = "A generic unbranded robotic prosthesis." /// Icon base to draw from. diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 3d4abc64164..a8b13f62a79 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -628,17 +628,17 @@ dislocated = -1 can_intake_reagents = 0 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/chest/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/groin/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/groin/ipc/unbranded/cap // extreme nugget action force_prosthetic_name = "prosthetic groin cap" @@ -659,39 +659,39 @@ /obj/item/organ/external/arm/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/arm/right/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/leg/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/leg/right/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/foot/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/foot/right/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/hand/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED /obj/item/organ/external/hand/right/ipc/unbranded dislocated = -1 encased = "support frame" - robotize_type = "Unbranded" + robotize_type = PROSTHETIC_UNBRANDED diff --git a/code/modules/surgery/facial_surgery.dm b/code/modules/surgery/facial_surgery.dm index 456d6383288..280c73af4c3 100644 --- a/code/modules/surgery/facial_surgery.dm +++ b/code/modules/surgery/facial_surgery.dm @@ -81,7 +81,7 @@ target.dna.real_name = getName if(target.mind) target.mind.name = target.name - target.change_appearance(APPEARANCE_PLASTICSURGERY, user, TRUE, ui_state = GLOB.default_state, state_object = target) + target.change_appearance(APPEARANCE_PLASTICSURGERY &~ APPEARANCE_PROSTHETICS, user, TRUE, ui_state = GLOB.default_state, state_object = target) target.op_stage.face = FACE_ALTERED @@ -229,7 +229,7 @@ target.dna.real_name = getName if(target.mind) target.mind.name = target.name - target.change_appearance(APPEARANCE_PLASTICSURGERY, user, TRUE, ui_state = GLOB.default_state, state_object = target) + target.change_appearance(APPEARANCE_PLASTICSURGERY &~ APPEARANCE_PROSTHETICS, user, TRUE, ui_state = GLOB.default_state, state_object = target) target.op_stage.face = FACE_ALTERED diff --git a/html/changelogs/RustingWithYou - robolimbs.yml b/html/changelogs/RustingWithYou - robolimbs.yml new file mode 100644 index 00000000000..0b14ee2ae47 --- /dev/null +++ b/html/changelogs/RustingWithYou - robolimbs.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: RustingWithYou + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Prosthetic/amputated limbs and organs can now be edited in the appearance changer." + - qol: "Height and speech bubbles can now be edited when unable to change species in appearance editor." diff --git a/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa_ghostroles.dm b/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa_ghostroles.dm index d1cbcc283b9..a58adb68426 100644 --- a/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa_ghostroles.dm +++ b/maps/away/ships/unathi_pirate/tarwa/unathi_pirate_tarwa_ghostroles.dm @@ -17,7 +17,7 @@ respawn_flag = null extra_languages = list(LANGUAGE_AZAZIBA) away_site = TRUE - welcome_message = "The Tarwa Conglomerate is a pirate group, largely operating towards the southeastern edge of the Spur. Little is known of them to others, and your ship likely thrives on this mystique. The wiki page for Unathi Piracy contains more information on this group, and how they operate. NOTE - If you spawned with a Diona limb and are missing a hand or foot, use the 'Detach Nymph' verb and then reattach the nymph to fix this." + welcome_message = "The Tarwa Conglomerate is a pirate group, largely operating towards the southeastern edge of the Spur. Little is known of them to others, and your ship likely thrives on this mystique. The wiki page for Unathi Piracy contains more information on this group, and how they operate." /datum/ghostspawner/human/tarwa/diona short_name = "tarwa_diona" @@ -34,7 +34,7 @@ /datum/ghostspawner/human/tarwa/captain short_name = "tarwa_captain" name = "Tarwa Conglomerate Captain" - desc = "You are the captain of a pirate crew of the Tarwa Conglomerate - also called the living-dead fleet. Lead your crew to profit and glory, for the sake of your fleet. NOT AN ANTAGONIST! Do not act as such. NOTE - If you spawned with a Diona limb and are missing a hand or foot, use the 'Detach Nymph' verb and then reattach the nymph to fix this." + desc = "You are the captain of a pirate crew of the Tarwa Conglomerate - also called the living-dead fleet. Lead your crew to profit and glory, for the sake of your fleet. NOT AN ANTAGONIST! Do not act as such." max_count = 1 uses_species_whitelist = TRUE assigned_role = "Tarwa Conglomerate Captain" @@ -56,19 +56,6 @@ /obj/item/storage/box/survival = 1 ) -/obj/outfit/admin/tarwa/post_equip(mob/living/carbon/human/H, visualsOnly) - if(!istype(H)) - return - for(var/organ in H.organs_by_name) - var/obj/item/organ/external/O = H.organs_by_name[organ] - if(!O || organ == BP_HEAD || organ == BP_CHEST || organ == BP_GROIN) - continue - if(prob(25)) - O.AddComponent(/datum/component/nymph_limb) - var/datum/component/nymph_limb/D = O.GetComponent(/datum/component/nymph_limb) - if(D) - D.nymphize(H, O.limb_name, TRUE) - /obj/outfit/admin/tarwa/get_id_access() return list(ACCESS_UNATHI_PIRATE, ACCESS_EXTERNAL_AIRLOCKS) @@ -78,9 +65,6 @@ head = /obj/item/clothing/head/bandana/pirate backpack_contents = list(/obj/item/device/uv_light = 1) -/obj/outfit/admin/tarwa/diona/post_equip(mob/living/carbon/human/H, visualsOnly) //don't give a diona a diona nymph limb. idiot. - return - /obj/outfit/admin/tarwa/captain name = "Tarwa Conglomerate Captain" suit = /obj/item/clothing/suit/storage/toggle/asymmetriccoat diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger.tsx index 86dca21f556..a909d2e1bdc 100644 --- a/tgui/packages/tgui/interfaces/AppearanceChanger.tsx +++ b/tgui/packages/tgui/interfaces/AppearanceChanger.tsx @@ -49,6 +49,8 @@ export type ChangerData = { change_hair_color: BooleanLike; change_facial_hair_color: BooleanLike; + + change_prosthetics: BooleanLike; }; export const AppearanceChanger = (props, context) => { @@ -59,6 +61,7 @@ export const AppearanceChanger = (props, context) => { {data.change_race ? : ''} {data.change_gender ? : ''} + {data.change_culture ? : ''} {data.change_language ? : ''} @@ -87,29 +90,6 @@ export const SpeciesWindow = (props, context) => { /> ))} -
- {data.valid_speech_bubbles.length - ? data.valid_speech_bubbles.map((new_speech_bubble) => ( -
-
- act('set_height', { height: value })} - /> -
); }; @@ -140,6 +120,33 @@ export const GenderWindow = (props, context) => { ); }; +export const BodyWindow = (props, context) => { + const { act, data } = useBackend(context); + + return ( +
+ {data.change_prosthetics ? ( +
+ ); +}; export const CultureWindow = (props, context) => { const { act, data } = useBackend(context); @@ -184,6 +191,20 @@ export const CultureWindow = (props, context) => { /> ))} +
+ {data.valid_speech_bubbles.length + ? data.valid_speech_bubbles.map((new_speech_bubble) => ( +
); };