diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 122b882278..42ef3a8146 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -7,6 +7,9 @@ #define SPECIES_UMAMMAL "undead_mammal" #define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic" #define SPECIES_ARACHNID "arachnid" +#define SPECIES_TESHARI "teshari" +#define SPECIES_VOX "vox" +#define SPECIES_XENOCHIMERA "xenochimera" #define SPECIES_INSECT "insect" #define SPECIES_UINSECT "undead_insect" #define SPECIES_DULLAHAN "dullahan" diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 506639928e..5bce26d514 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -335,7 +335,7 @@ GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff")) GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color")) //body ids that have greyscale sprites -GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","slimelumi","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic", "shadekin")) +GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","slimelumi","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic", "shadekin", "teshari", "vox")) //body ids that have prosthetic sprites GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","grayson","hephaestus","nanotrasen","talon","veymed")) //I don't know if i can module this to splurt @@ -344,7 +344,7 @@ GLOBAL_LIST_INIT(prosthetic_limb_types, list("xion","bishop","cybersolutions","g GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow", "cultgolem", "agent", "plasmaman", "clockgolem", "clothgolem")) //list of eye types, corresponding to a respective left and right icon state for the set of eyes -GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "noodle", "none")) +GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "spider", "cyclops", "third", "spectre", "shadekin", "teshari", "vox", "noodle", "none")) //list linking bodypart bitflags to their actual names GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) diff --git a/code/modules/arousal/genitals_sprite_accessories.dm b/code/modules/arousal/genitals_sprite_accessories.dm index 65c71edb30..604963948a 100644 --- a/code/modules/arousal/genitals_sprite_accessories.dm +++ b/code/modules/arousal/genitals_sprite_accessories.dm @@ -15,6 +15,11 @@ alt_aroused = TRUE feat_taur = "cock_taur" +/datum/sprite_accessory/penis/teshari + icon_state = "taperedteshari" + name = "Teshari" + icon = 'modular_splurt/icons/obj/genitals/teshari_penis.dmi' + /datum/sprite_accessory/penis/human icon_state = "human" name = "Human" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ad1ac131e7..7af123f9da 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -155,6 +155,8 @@ There are several things that need to be remembered: target_overlay = "[target_overlay]_d" var/alt_worn = U.mob_overlay_icon || 'icons/mob/clothing/uniform.dmi' + if(dna.species.icon_uniform) + alt_worn = dna.species.icon_uniform var/variant_flag = NONE if((DIGITIGRADE in dna.species.species_traits) && U.mutantrace_variation & STYLE_DIGITIGRADE && !(U.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) @@ -382,7 +384,10 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) client.screen += gloves update_observer_view(gloves,1) - overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/clothing/hands.dmi') + var/icon_chosen = 'icons/mob/clothing/hands.dmi' + if(dna.species.icon_hands) + icon_chosen = dna.species.icon_hands + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_chosen) gloves_overlay = overlays_standing[GLOVES_LAYER] if(OFFSET_GLOVES in dna.species.offset_features) gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] @@ -443,7 +448,10 @@ There are several things that need to be remembered: client.screen += glasses //Either way, add the item to the HUD update_observer_view(glasses,1) if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/clothing/eyes.dmi', override_state = glasses.icon_state) + var/icon_chosen = 'icons/mob/clothing/eyes.dmi' + if(dna.species.icon_eyes) + icon_chosen = dna.species.icon_eyes + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_chosen, override_state = glasses.icon_state) var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] if(glasses_overlay) if(OFFSET_GLASSES in dna.species.offset_features) @@ -469,8 +477,10 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += ears //add it to the client's screen update_observer_view(ears,1) - - overlays_standing[EAR_LEFT_LAYER] = ears.build_worn_icon(default_layer = EAR_LEFT_LAYER, default_icon_file = 'modular_sand/icons/mob/clothing/ears.dmi', use_mob_overlay_icon = FALSE) + var/icon_chosen = 'modular_sand/icons/mob/clothing/ears.dmi' + if(dna.species.icon_ears) + icon_chosen = dna.species.icon_ears + overlays_standing[EAR_LEFT_LAYER] = ears.build_worn_icon(default_layer = EAR_LEFT_LAYER, default_icon_file = icon_chosen, use_mob_overlay_icon = FALSE) var/mutable_appearance/ears_overlay = overlays_standing[EAR_LEFT_LAYER] if(OFFSET_EARS in dna.species.offset_features) ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] @@ -495,8 +505,10 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += ears_extra //add it to the client's screen update_observer_view(ears_extra,1) - - overlays_standing[EAR_RIGHT_LAYER] = ears_extra.build_worn_icon(default_layer = EAR_RIGHT_LAYER, default_icon_file = 'modular_sand/icons/mob/clothing/ears_extra.dmi', use_mob_overlay_icon = FALSE) + var/icon_chosen = 'modular_sand/icons/mob/clothing/ears_extra.dmi' + if(dna.species.icon_ears) + icon_chosen = dna.species.icon_ears + overlays_standing[EAR_RIGHT_LAYER] = ears_extra.build_worn_icon(default_layer = EAR_RIGHT_LAYER, default_icon_file = icon_chosen, use_mob_overlay_icon = FALSE) var/mutable_appearance/ears_overlay = overlays_standing[EAR_RIGHT_LAYER] if(OFFSET_EARS in dna.species.offset_features) ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] @@ -529,6 +541,8 @@ There are several things that need to be remembered: update_observer_view(shoes,1) var/alt_icon = S.mob_overlay_icon || 'icons/mob/clothing/feet.dmi' + if(dna.species.icon_feet) + alt_icon = dna.species.icon_feet var/variation_flag = NONE if((DIGITIGRADE in dna.species.species_traits) && S.mutantrace_variation & STYLE_DIGITIGRADE && !(S.mutantrace_variation & STYLE_NO_ANTHRO_ICON)) alt_icon = S.anthro_mob_worn_overlay || 'icons/mob/clothing/feet_digi.dmi' @@ -558,7 +572,12 @@ There are several things that need to be remembered: var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.mob_overlay_icon) ? s_store.mob_overlay_icon : 'icons/mob/clothing/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) + + var/icon_chosen = 'icons/mob/clothing/belt_mirror.dmi' + if(dna.species.icon_belt) + icon_chosen = dna.species.icon_belt + + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.mob_overlay_icon) ? s_store.mob_overlay_icon : icon_chosen), t_state, -SUIT_STORE_LAYER) var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_STORE_LAYER] if(OFFSET_S_STORE in dna.species.offset_features) s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] @@ -586,6 +605,8 @@ There are several things that need to be remembered: remove_overlay(HEAD_LAYER) var/obj/item/clothing/head/H = head var/alt_icon = H.mob_overlay_icon || 'icons/mob/clothing/head.dmi' + if(dna.species.icon_head) + alt_icon = dna.species.icon_head var/muzzled = FALSE var/variation_flag = NONE if(dna.species.mutant_bodyparts["mam_snouts"] && dna.features["mam_snouts"] != "None") @@ -619,8 +640,10 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.hud_shown) client.screen += belt update_observer_view(belt) - - overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = 'icons/mob/clothing/belt.dmi') + var/icon_chosen = 'icons/mob/clothing/belt.dmi' + if(dna.species.icon_belt) + icon_chosen = dna.species.icon_belt + overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_chosen) var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] if(OFFSET_BELT in dna.species.offset_features) belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] @@ -645,6 +668,8 @@ There are several things that need to be remembered: update_observer_view(wear_suit,1) var/worn_icon = wear_suit.mob_overlay_icon || 'icons/mob/clothing/suit.dmi' + if(dna.species.icon_suit) + worn_icon = dna.species.icon_suit var/worn_state = wear_suit.icon_state var/center = FALSE var/dimension_x = 32 @@ -735,6 +760,8 @@ There are several things that need to be remembered: var/obj/item/clothing/mask/M = wear_mask remove_overlay(FACEMASK_LAYER) var/alt_icon = M.mob_overlay_icon || 'icons/mob/clothing/mask.dmi' + if(dna.species.icon_mask) + alt_icon = dna.species.icon_mask var/muzzled = FALSE var/variation_flag = NONE if(head && (head.flags_inv & HIDEMASK)) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index cd9cd5db4c..cea51b4cd2 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -110,7 +110,10 @@ if(wear_neck) if(!(head && (head.flags_inv & HIDENECK))) - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck.dmi', override_state = wear_neck.icon_state) + var/chosen_icon = 'icons/mob/clothing/neck.dmi' + if(dna.species.icon_neck) + chosen_icon = dna.species.icon_neck + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = chosen_icon, override_state = wear_neck.icon_state) update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -123,7 +126,10 @@ inv?.update_icon() if(back) - overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi', override_state = back.icon_state) + var/chosen_icon = 'icons/mob/clothing/back.dmi' + if(dna.species.icon_back) + chosen_icon = dna.species.icon_back + overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = chosen_icon, override_state = back.icon_state) update_hud_back(back) apply_overlay(BACK_LAYER) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5e4fb22904..fc165c4fb0 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -574,8 +574,8 @@ var/tbrute = round( (brute_dam/max_damage)*3, 1 ) var/tburn = round( (burn_dam/max_damage)*3, 1 ) if((tbrute != brutestate) || (tburn != burnstate)) - brutestate = tbrute - burnstate = tburn + brutestate = min(tbrute, 3) + burnstate = min(tburn, 3) //So, WHY NOBODY THOUGHT ON THIS BEFORE??? //Comicao1 return TRUE return FALSE diff --git a/config/entries/general.txt b/config/entries/general.txt index b0d80af990..40e572a408 100644 --- a/config/entries/general.txt +++ b/config/entries/general.txt @@ -335,6 +335,9 @@ ROUNDSTART_RACES dullahan ROUNDSTART_RACES spectre_bot ROUNDSTART_RACES vampire_roundstart ROUNDSTART_RACES shadekin +ROUNDSTART_RACES teshari +ROUNDSTART_RACES vox +ROUNDSTART_RACES xenochimera ROUNDSTART_RACES undead_mammal ROUNDSTART_RACES undead_insect ROUNDSTART_RACES ghoul_lizard diff --git a/icons/mob/dam_mob.dmi b/icons/mob/dam_mob.dmi index c34b57b434..d462a1e982 100644 Binary files a/icons/mob/dam_mob.dmi and b/icons/mob/dam_mob.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index ec48e5f016..99e3833be7 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 6d63d30122..bc83059508 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index a4a86dc237..06520eb5e9 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/modular_sand/code/modules/clothing/outfits/standard.dm b/modular_sand/code/modules/clothing/outfits/standard.dm index 9e7b25fb7f..c29677d695 100644 --- a/modular_sand/code/modules/clothing/outfits/standard.dm +++ b/modular_sand/code/modules/clothing/outfits/standard.dm @@ -4,10 +4,10 @@ icon_state = "cent_headset_alt" item_state = "cent_headset_alt" bowman = TRUE - + /obj/item/gun/energy/taser/debug ammo_type = list(/obj/item/ammo_casing/energy/electrode/debug) - + /obj/item/ammo_casing/energy/electrode/debug e_cost = 1 diff --git a/modular_splurt/code/game/machinery/limbgrower.dm b/modular_splurt/code/game/machinery/limbgrower.dm index 8b98b7a523..a84c8c5e10 100644 --- a/modular_splurt/code/game/machinery/limbgrower.dm +++ b/modular_splurt/code/game/machinery/limbgrower.dm @@ -1,6 +1,8 @@ /obj/machinery/limbgrower/Initialize(mapload) var/list/extra_cat = list( - "shadekin" + "shadekin", + "teshari", + "vox" ) LAZYADD(categories, extra_cat) . = ..() @@ -8,3 +10,34 @@ /datum/species/mammal/shadekin limbs_id = SPECIES_SHADEKIN icon_limbs = 'modular_splurt/icons/mob/human_parts_greyscale.dmi' + +/datum/species/mammal/teshari + limbs_id = SPECIES_TESHARI + icon_limbs = 'modular_splurt/icons/mob/teshari.dmi' + icon_accessories = 'modular_splurt/icons/mob/clothing/species/teshari/accessories.dmi' + icon_back = 'modular_splurt/icons/mob/clothing/species/teshari/back.dmi' + icon_belt = 'modular_splurt/icons/mob/clothing/species/teshari/belt.dmi' + icon_ears = 'modular_splurt/icons/mob/clothing/species/teshari/ears.dmi' + icon_eyes = 'modular_splurt/icons/mob/clothing/species/teshari/eyes.dmi' + icon_feet = 'modular_splurt/icons/mob/clothing/species/teshari/feet.dmi' + icon_feet64 = 'modular_splurt/icons/mob/clothing/species/teshari/feet_64.dmi' + icon_hands = 'modular_splurt/icons/mob/clothing/species/teshari/hands.dmi' + icon_head = 'modular_splurt/icons/mob/clothing/species/teshari/head.dmi' + icon_mask = 'modular_splurt/icons/mob/clothing/species/teshari/mask.dmi' + icon_neck = 'modular_splurt/icons/mob/clothing/species/teshari/neck.dmi' + icon_uniform = 'modular_splurt/icons/mob/clothing/species/teshari/uniform.dmi' + icon_suit = 'modular_splurt/icons/mob/clothing/species/teshari/suit.dmi' + +/datum/species/vox + limbs_id = SPECIES_VOX + icon_limbs = 'modular_splurt/icons/mob/vox.dmi' + icon_back = 'modular_splurt/icons/mob/clothing/species/vox/back.dmi' + icon_ears = 'modular_splurt/icons/mob/clothing/species/vox/ears.dmi' + icon_eyes = 'modular_splurt/icons/mob/clothing/species/vox/eyes.dmi' + icon_feet = 'modular_splurt/icons/mob/clothing/species/vox/feet.dmi' + icon_feet64 = 'modular_splurt/icons/mob/clothing/species/vox/feet.dmi' + icon_hands = 'modular_splurt/icons/mob/clothing/species/vox/hands.dmi' + icon_head = 'modular_splurt/icons/mob/clothing/species/vox/head.dmi' + icon_mask = 'modular_splurt/icons/mob/clothing/species/vox/face.dmi' + icon_uniform = 'modular_splurt/icons/mob/clothing/species/vox/uniform.dmi' + icon_suit = 'modular_splurt/icons/mob/clothing/species/vox/suit.dmi' diff --git a/modular_splurt/code/modules/cargo/packs/misc.dm b/modular_splurt/code/modules/cargo/packs/misc.dm index 98bdc574ac..cb4af91dee 100644 --- a/modular_splurt/code/modules/cargo/packs/misc.dm +++ b/modular_splurt/code/modules/cargo/packs/misc.dm @@ -576,3 +576,133 @@ /obj/item/cane/plague ) crate_name = "plague doctor crate" + +/datum/supply_pack/randomised/costumes/tesh_cloaks_vr + name = "Teshari cloaks" + + contains = list( + /obj/item/clothing/neck/cloak/teshari/standard/white, + /obj/item/clothing/neck/cloak/teshari/standard/white_grey, + /obj/item/clothing/neck/cloak/teshari/standard/red_grey, + /obj/item/clothing/neck/cloak/teshari/standard/orange_grey, + /obj/item/clothing/neck/cloak/teshari/standard/yellow_grey, + /obj/item/clothing/neck/cloak/teshari/standard/green_grey, + /obj/item/clothing/neck/cloak/teshari/standard/blue_grey, + /obj/item/clothing/neck/cloak/teshari/standard/purple_grey, + /obj/item/clothing/neck/cloak/teshari/standard/pink_grey, + /obj/item/clothing/neck/cloak/teshari/standard/brown_grey, + /obj/item/clothing/neck/cloak/teshari/standard/rainbow, + /obj/item/clothing/neck/cloak/teshari/standard/orange + ) + cost = 40 + + + +/datum/supply_pack/randomised/costumes/tesh_cloaks_b_vr + name = "Teshari cloaks (black)" + + contains = list( + /obj/item/clothing/neck/cloak/teshari, + /obj/item/clothing/neck/cloak/teshari/standard/black_red, + /obj/item/clothing/neck/cloak/teshari/standard/black_orange, + /obj/item/clothing/neck/cloak/teshari/standard/black_yellow, + /obj/item/clothing/neck/cloak/teshari/standard/black_green, + /obj/item/clothing/neck/cloak/teshari/standard/black_blue, + /obj/item/clothing/neck/cloak/teshari/standard/black_purple, + /obj/item/clothing/neck/cloak/teshari/standard/black_pink, + /obj/item/clothing/neck/cloak/teshari/standard/black_brown, + /obj/item/clothing/neck/cloak/teshari/standard/black_grey, + /obj/item/clothing/neck/cloak/teshari/standard/black_white, + /obj/item/clothing/neck/cloak/teshari/standard/black_glow, + /obj/item/clothing/neck/cloak/teshari/standard/dark_retrowave + ) + cost = 40 + + + +/datum/supply_pack/randomised/costumes/tesh_beltcloaks_vr + name = "Teshari cloaks (belted)" + + contains = list( + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/orange_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/rainbow, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/lightgrey_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/white_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/red_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/orange, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/yellow_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/green_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/blue_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/purple_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/pink_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/brown_grey + ) + cost = 40 + + + +/datum/supply_pack/randomised/costumes/tesh_beltcloaks_b_vr + name = "Teshari cloaks (belted, black)" + + contains = list( + /obj/item/clothing/suit/hooded/teshari/beltcloak, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_orange, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_grey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_midgrey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_lightgrey, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_white, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_red, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_yellow, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_green, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_blue, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_purple, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_pink, + /obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_brown + ) + cost = 40 + + + +/datum/supply_pack/randomised/costumes/tesh_hoodcloaks_vr + name = "Teshari cloaks (hooded)" + + contains = list( + /obj/item/clothing/suit/hooded/teshari/standard/orange_grey, + /obj/item/clothing/suit/hooded/teshari/standard/lightgrey_grey, + /obj/item/clothing/suit/hooded/teshari/standard/white_grey, + /obj/item/clothing/suit/hooded/teshari/standard/red_grey, + /obj/item/clothing/suit/hooded/teshari/standard/orange, + /obj/item/clothing/suit/hooded/teshari/standard/yellow_grey, + /obj/item/clothing/suit/hooded/teshari/standard/green_grey, + /obj/item/clothing/suit/hooded/teshari/standard/blue_grey, + /obj/item/clothing/suit/hooded/teshari/standard/purple_grey, + /obj/item/clothing/suit/hooded/teshari/standard/pink_grey, + /obj/item/clothing/suit/hooded/teshari/standard/brown_grey + ) + cost = 40 + + + +/datum/supply_pack/randomised/costumes/tesh_hoodcloaks_b_vr + name = "Teshari cloaks (hooded, black)" + + contains = list( + /obj/item/clothing/suit/hooded/teshari, + /obj/item/clothing/suit/hooded/teshari/standard/black_orange, + /obj/item/clothing/suit/hooded/teshari/standard/black_grey, + /obj/item/clothing/suit/hooded/teshari/standard/black_midgrey, + /obj/item/clothing/suit/hooded/teshari/standard/black_lightgrey, + /obj/item/clothing/suit/hooded/teshari/standard/black_white, + /obj/item/clothing/suit/hooded/teshari/standard/black_red, + /obj/item/clothing/suit/hooded/teshari/standard/black, + /obj/item/clothing/suit/hooded/teshari/standard/black_yellow, + /obj/item/clothing/suit/hooded/teshari/standard/black_green, + /obj/item/clothing/suit/hooded/teshari/standard/black_blue, + /obj/item/clothing/suit/hooded/teshari/standard/black_purple, + /obj/item/clothing/suit/hooded/teshari/standard/black_pink, + /obj/item/clothing/suit/hooded/teshari/standard/black_brown + ) + cost = 40 + + diff --git a/modular_splurt/code/modules/client/loadout/neck.dm b/modular_splurt/code/modules/client/loadout/neck.dm index 6fa1c5bdfb..5e1b89e29c 100644 --- a/modular_splurt/code/modules/client/loadout/neck.dm +++ b/modular_splurt/code/modules/client/loadout/neck.dm @@ -52,3 +52,35 @@ path = /obj/item/clothing/neck/petcollar/poly loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION | LOADOUT_CAN_COLOR_POLYCHROMIC loadout_initial_colors = list("#00bb70", "#FFC600") + +/datum/gear/neck/teshari + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + +/datum/gear/neck/teshari/standard + name = "Teshari Cloak" + path = /obj/item/clothing/neck/cloak/teshari + + +/datum/gear/neck/teshari/black_red + name = "Teshari Cloak Black Red" + path = /obj/item/clothing/neck/cloak/teshari/standard/black_red + +/datum/gear/neck/teshari/white + name = "Teshari Cloak White" + path = /obj/item/clothing/neck/cloak/teshari/standard/white + +/datum/gear/neck/teshari/rainbow + name = "Teshari Cloak Rainbow" + path = /obj/item/clothing/neck/cloak/teshari/standard/rainbow + +/datum/gear/neck/teshari/orange + name = "Teshari Cloak orange" + path = /obj/item/clothing/neck/cloak/teshari/standard/orange + +/datum/gear/neck/teshari/dark_retrowave + name = "Teshari Cloak Dark Retrowave" + path = /obj/item/clothing/neck/cloak/teshari/standard/dark_retrowave + +/datum/gear/neck/teshari/black_glow + name = "Teshari Cloak Dark Black Glow" + path = /obj/item/clothing/neck/cloak/teshari/standard/black_glow diff --git a/modular_splurt/code/modules/clothing/outfits/standard.dm b/modular_splurt/code/modules/clothing/outfits/standard.dm new file mode 100644 index 0000000000..89e34afd8a --- /dev/null +++ b/modular_splurt/code/modules/clothing/outfits/standard.dm @@ -0,0 +1,4 @@ +/datum/outfit/vox + name = "Vox" + r_hand = /obj/item/tank/internals/plasmaman/belt/full + mask = /obj/item/clothing/mask/breath diff --git a/modular_splurt/code/modules/clothing/suits/cloaks.dm b/modular_splurt/code/modules/clothing/suits/cloaks.dm index bbbf127829..64e64151cb 100644 --- a/modular_splurt/code/modules/clothing/suits/cloaks.dm +++ b/modular_splurt/code/modules/clothing/suits/cloaks.dm @@ -50,3 +50,713 @@ . = ..() */ + +// Standard Cloaks +/obj/item/clothing/neck/cloak/teshari + name = "black cloak" + desc = "It drapes over a Teshari's shoulders and closes at the neck with pockets convienently placed inside." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesh_cloak_bn" + + + +/obj/item/clothing/neck/cloak/teshari/standard/black_red + name = "black and red cloak" + icon_state = "tesh_cloak_br" + +/obj/item/clothing/neck/cloak/teshari/standard/black_orange + name = "black and orange cloak" + icon_state = "tesh_cloak_bo" + +/obj/item/clothing/neck/cloak/teshari/standard/black_yellow + name = "black and yellow cloak" + icon_state = "tesh_cloak_by" + +/obj/item/clothing/neck/cloak/teshari/standard/black_green + name = "black and green cloak" + icon_state = "tesh_cloak_bgr" + +/obj/item/clothing/neck/cloak/teshari/standard/black_blue + name = "black and blue cloak" + icon_state = "tesh_cloak_bbl" + +/obj/item/clothing/neck/cloak/teshari/standard/black_purple + name = "black and purple cloak" + icon_state = "tesh_cloak_bp" + +/obj/item/clothing/neck/cloak/teshari/standard/black_pink + name = "black and pink cloak" + icon_state = "tesh_cloak_bpi" + +/obj/item/clothing/neck/cloak/teshari/standard/black_brown + name = "black and brown cloak" + icon_state = "tesh_cloak_bbr" + +/obj/item/clothing/neck/cloak/teshari/standard/black_grey + name = "black and grey cloak" + icon_state = "tesh_cloak_bg" + +/obj/item/clothing/neck/cloak/teshari/standard/black_white + name = "black and white cloak" + icon_state = "tesh_cloak_bw" + +/obj/item/clothing/neck/cloak/teshari/standard/white + name = "white cloak" + icon_state = "tesh_cloak_wn" + +/obj/item/clothing/neck/cloak/teshari/standard/white_grey + name = "white and grey cloak" + icon_state = "tesh_cloak_wg" + +/obj/item/clothing/neck/cloak/teshari/standard/red_grey + name = "red and grey cloak" + icon_state = "tesh_cloak_rg" + +/obj/item/clothing/neck/cloak/teshari/standard/orange_grey + name = "orange and grey cloak" + icon_state = "tesh_cloak_og" + +/obj/item/clothing/neck/cloak/teshari/standard/yellow_grey + name = "yellow and grey cloak" + icon_state = "tesh_cloak_yg" + +/obj/item/clothing/neck/cloak/teshari/standard/green_grey + name = "green and grey cloak" + icon_state = "tesh_cloak_gg" + +/obj/item/clothing/neck/cloak/teshari/standard/blue_grey + name = "blue and grey cloak" + icon_state = "tesh_cloak_blug" + +/obj/item/clothing/neck/cloak/teshari/standard/purple_grey + name = "purple and grey cloak" + icon_state = "tesh_cloak_pg" + +/obj/item/clothing/neck/cloak/teshari/standard/pink_grey + name = "pink and grey cloak" + icon_state = "tesh_cloak_pig" + +/obj/item/clothing/neck/cloak/teshari/standard/brown_grey + name = "brown and grey cloak" + icon_state = "tesh_cloak_brg" + +/obj/item/clothing/neck/cloak/teshari/standard/rainbow + name = "rainbow cloak" + icon_state = "tesh_cloak_rainbow" + +/obj/item/clothing/neck/cloak/teshari/standard/orange + name = "orange cloak" + icon_state = "tesh_cloak_on" + +/obj/item/clothing/neck/cloak/teshari/standard/dark_retrowave + name = "dark aesthetic cloak" + icon_state = "tesh_cloak_dretrowave" + +/obj/item/clothing/neck/cloak/teshari/standard/black_glow + name = "black and glowing cloak" + icon_state = "tesh_cloak_bglowing" + + +// Job Cloaks +/obj/item/clothing/neck/cloak/teshari/jobs/cap + name = "site manager cloak" + desc = "A soft Teshari cloak made for the Site Manager" + icon_state = "tesh_cloak_cap" + +//Cargo + +/obj/item/clothing/neck/cloak/teshari/jobs/qm + name = "quartermaster cloak" + desc = "A soft Teshari cloak made for the Quartermaster" + icon_state = "tesh_cloak_qm" + +/obj/item/clothing/neck/cloak/teshari/jobs/cargo + name = "cargo cloak" + desc = "A soft Teshari cloak made for the Cargo department" + icon_state = "tesh_cloak_car" + +/obj/item/clothing/neck/cloak/teshari/jobs/mining + name = "mining cloak" + desc = "A soft Teshari cloak made for Mining" + icon_state = "tesh_cloak_mine" + +//Engineering + +/obj/item/clothing/neck/cloak/teshari/jobs/ce + name = "cheif engineer cloak" + desc = "A soft Teshari cloak made the Chief Engineer" + icon_state = "tesh_cloak_ce" + +/obj/item/clothing/neck/cloak/teshari/jobs/engineer + name = "engineering cloak" + desc = "A soft Teshari cloak made for the Engineering department" + icon_state = "tesh_cloak_engie" + +/obj/item/clothing/neck/cloak/teshari/jobs/atmos + name = "atmospherics cloak" + desc = "A soft Teshari cloak made for the Atmospheric Technician" + icon_state = "tesh_cloak_atmos" + +//Medical + +/obj/item/clothing/neck/cloak/teshari/jobs/cmo + name = "chief medical officer cloak" + desc = "A soft Teshari cloak made the Cheif Medical Officer" + icon_state = "tesh_cloak_cmo" + +/obj/item/clothing/neck/cloak/teshari/jobs/medical + name = "medical cloak" + desc = "A soft Teshari cloak made for the Medical department" + icon_state = "tesh_cloak_doc" + +/obj/item/clothing/neck/cloak/teshari/jobs/chemistry + name = "chemist cloak" + desc = "A soft Teshari cloak made for the Chemist" + icon_state = "tesh_cloak_chem" + +/obj/item/clothing/neck/cloak/teshari/jobs/viro + name = "virologist cloak" + desc = "A soft Teshari cloak made for the Virologist" + icon_state = "tesh_cloak_viro" + +/obj/item/clothing/neck/cloak/teshari/jobs/para + name = "paramedic cloak" + desc = "A soft Teshari cloak made for the Paramedic" + icon_state = "tesh_cloak_para" + +/obj/item/clothing/neck/cloak/teshari/jobs/psych + name = " psychiatrist cloak" + desc = "A soft Teshari cloak made for the Psychiatrist" + icon_state = "tesh_cloak_psych" + +//Science + +/obj/item/clothing/neck/cloak/teshari/jobs/rd + name = "research director cloak" + desc = "A soft Teshari cloak made for the Research Director" + icon_state = "tesh_cloak_rd" + +/obj/item/clothing/neck/cloak/teshari/jobs/sci + name = "scientist cloak" + desc = "A soft Teshari cloak made for the Science department" + icon_state = "tesh_cloak_sci" + +/obj/item/clothing/neck/cloak/teshari/jobs/robo + name = "roboticist cloak" + desc = "A soft Teshari cloak made for the Roboticist" + icon_state = "tesh_cloak_robo" + +//Security + +/obj/item/clothing/neck/cloak/teshari/jobs/hos + name = "head of security cloak" + desc = "A soft Teshari cloak made for the Head of Security" + icon_state = "tesh_cloak_hos" + +/obj/item/clothing/neck/cloak/teshari/jobs/sec + name = "security cloak" + desc = "A soft Teshari cloak made for the Security department" + icon_state = "tesh_cloak_sec" + +/obj/item/clothing/neck/cloak/teshari/jobs/iaa + name = "internal affairs cloak" + desc = "A soft Teshari cloak made for the Internal Affairs Agent" + icon_state = "tesh_cloak_iaa" + +//Service + +/obj/item/clothing/neck/cloak/teshari/jobs/hop + name = "head of personnel cloak" + desc = "A soft Teshari cloak made for the Head of Personnel" + icon_state = "tesh_cloak_hop" + +/obj/item/clothing/neck/cloak/teshari/jobs/service + name = "service cloak" + desc = "A soft Teshari cloak made for the Service department" + icon_state = "tesh_cloak_serv" + +//Misc + +/obj/item/clothing/suit/hooded/toggle/labcoat/teshari + name = "Teshari labcoat" + desc = "A small suit that protects against minor chemical spills. This one is a good fit on Teshari." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesh_labcoat" + + +/obj/item/clothing/suit/hooded/toggle/tesharicoat + name = "small black coat" + desc = "A coat that seems too small to fit a human." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesharicoat" + + + +/obj/item/clothing/suit/hooded/toggle/tesharicoatwhite + name = "small coat" + desc = "A coat that seems too small to fit a human." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesharicoatwhite" + + + +//Hooded teshari cloaks +/obj/item/clothing/suit/hooded/teshari + name = "Hooded Teshari Cloak" + desc = "A soft teshari cloak with an added hood." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesh_hcloak_bo" + + + + + hoodtype = /obj/item/clothing/head/hooded/tesh_hood + + +/obj/item/clothing/head/hooded/tesh_hood + name = "Cloak Hood" + desc = "A hood attached to a teshari cloak." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + //default_worn_icon = 'icons/inventory/suit/mob_teshari.dmi' + icon_state = "tesh_hood_bo" + + + + body_parts_covered = HEAD + +/obj/item/clothing/suit/hooded/teshari/standard/black_orange + name = "black and orange hooded cloak" + icon_state = "tesh_hcloak_bo" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_orange + +/obj/item/clothing/suit/hooded/teshari/standard/black_grey + name = "black and grey hooded cloak" + icon_state = "tesh_hcloak_bg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_grey + +/obj/item/clothing/suit/hooded/teshari/standard/black_midgrey + name = "black and medium grey hooded cloak" + icon_state = "tesh_hcloak_bmg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_midgrey + +/obj/item/clothing/suit/hooded/teshari/standard/black_lightgrey + name = "black and light grey hooded cloak" + icon_state = "tesh_hcloak_blg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_lightgrey + +/obj/item/clothing/suit/hooded/teshari/standard/black_white + name = "black and white hooded cloak" + icon_state = "tesh_hcloak_bw" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_white + +/obj/item/clothing/suit/hooded/teshari/standard/black_red + name = "black and red hooded cloak" + icon_state = "tesh_hcloak_br" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_red + +/obj/item/clothing/suit/hooded/teshari/standard/black + name = "black hooded cloak" + icon_state = "tesh_hcloak_bn" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black + +/obj/item/clothing/suit/hooded/teshari/standard/black_yellow + name = "black and yellow hooded cloak" + icon_state = "tesh_hcloak_by" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_yellow + +/obj/item/clothing/suit/hooded/teshari/standard/black_green + name = "black and green hooded cloak" + icon_state = "tesh_hcloak_bgr" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_green + +/obj/item/clothing/suit/hooded/teshari/standard/black_blue + name = "black and blue hooded cloak" + icon_state = "tesh_hcloak_bbl" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_blue + +/obj/item/clothing/suit/hooded/teshari/standard/black_purple + name = "black and purple hooded cloak" + icon_state = "tesh_hcloak_bp" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_purple + +/obj/item/clothing/suit/hooded/teshari/standard/black_pink + name = "black and pink hooded cloak" + icon_state = "tesh_hcloak_bpi" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_pink + +/obj/item/clothing/suit/hooded/teshari/standard/black_brown + name = "black and brown hooded cloak" + icon_state = "tesh_hcloak_bbr" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/black_brown + +/obj/item/clothing/suit/hooded/teshari/standard/orange_grey + name = "orange and grey hooded cloak" + icon_state = "tesh_hcloak_og" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/orange_grey + +///obj/item/clothing/suit/hooded/teshari/standard/rainbow +// name = "rainbow hooded cloak" +// icon_state = "tesh_hcloak_rainbow" +// hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/rainbow + +/obj/item/clothing/suit/hooded/teshari/standard/lightgrey_grey + name = "light grey and grey hooded cloak" + icon_state = "tesh_hcloak_lgg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/lightgrey_grey + +/obj/item/clothing/suit/hooded/teshari/standard/white_grey + name = "white and grey hooded cloak" + icon_state = "tesh_hcloak_wg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/white_grey + +/obj/item/clothing/suit/hooded/teshari/standard/red_grey + name = "red and grey hooded cloak" + icon_state = "tesh_hcloak_rg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/red_grey + +/obj/item/clothing/suit/hooded/teshari/standard/orange + name = "orange hooded cloak" + icon_state = "tesh_hcloak_on" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/orange + +/obj/item/clothing/suit/hooded/teshari/standard/yellow_grey + name = "yellow and grey hooded cloak" + icon_state = "tesh_hcloak_yg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/yellow_grey + +/obj/item/clothing/suit/hooded/teshari/standard/green_grey + name = "green and grey hooded cloak" + icon_state = "tesh_hcloak_gg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/green_grey + +/obj/item/clothing/suit/hooded/teshari/standard/blue_grey + name = "blue and grey hooded cloak" + icon_state = "tesh_hcloak_blug" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/blue_grey + +/obj/item/clothing/suit/hooded/teshari/standard/purple_grey + name = "purple and grey hooded cloak" + icon_state = "tesh_hcloak_pg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/purple_grey + +/obj/item/clothing/suit/hooded/teshari/standard/pink_grey + name = "pink and grey hooded cloak" + icon_state = "tesh_hcloak_pig" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/pink_grey + +/obj/item/clothing/suit/hooded/teshari/standard/brown_grey + name = "brown and grey hooded cloak" + icon_state = "tesh_hcloak_brg" + hoodtype = /obj/item/clothing/head/hooded/tesh_hood/standard/brown_grey + +//The actual hoods +/obj/item/clothing/head/hooded/tesh_hood/standard/black_orange + name = "black and orange cloak hood" + icon_state = "tesh_hood_bo" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_grey + name = "black and grey cloak hood" + icon_state = "tesh_hood_bg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_midgrey + name = "black and medium grey cloak hood" + icon_state = "tesh_hood_bmg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_lightgrey + name = "black and light grey cloak hood" + icon_state = "tesh_hood_blg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_white + name = "black and white cloak hood" + icon_state = "tesh_hood_bw" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_red + name = "black and red cloak hood" + icon_state = "tesh_hood_br" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black + name = "black cloak hood" + icon_state = "tesh_hood_bn" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_yellow + name = "black and yellow cloak hood" + icon_state = "tesh_hood_by" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_green + name = "black and green cloak hood" + icon_state = "tesh_hood_bgr" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_blue + name = "black and blue cloak hood" + icon_state = "tesh_hood_bbl" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_purple + name = "black and purple cloak hood" + icon_state = "tesh_hood_bp" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_pink + name = "black and pink cloak hood" + icon_state = "tesh_hood_bpi" + +/obj/item/clothing/head/hooded/tesh_hood/standard/black_brown + name = "black and brown cloak hood" + icon_state = "tesh_hood_bbr" + +/obj/item/clothing/head/hooded/tesh_hood/standard/orange_grey + name = "orange and grey cloak hood" + icon_state = "tesh_hood_og" + +/obj/item/clothing/head/hooded/tesh_hood/standard/rainbow + name = "rainbow cloak hood" + icon_state = "tesh_hood_rainbow" + +/obj/item/clothing/head/hooded/tesh_hood/standard/lightgrey_grey + name = "light grey and grey cloak hood" + icon_state = "tesh_hood_lgg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/white_grey + name = "white and grey cloak hood" + icon_state = "tesh_hood_wg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/red_grey + name = "red and grey cloak hood" + icon_state = "tesh_hood_rg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/orange + name = "orange cloak hood" + icon_state = "tesh_hood_on" + +/obj/item/clothing/head/hooded/tesh_hood/standard/yellow_grey + name = "yellow and grey cloak hood" + icon_state = "tesh_hood_yg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/green_grey + name = "green and grey cloak hood" + icon_state = "tesh_hood_gg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/blue_grey + name = "blue and grey cloak hood" + icon_state = "tesh_hood_blug" + +/obj/item/clothing/head/hooded/tesh_hood/standard/purple_grey + name = "purple and grey cloak hood" + icon_state = "tesh_hood_pg" + +/obj/item/clothing/head/hooded/tesh_hood/standard/pink_grey + name = "pink and grey cloak hood" + icon_state = "tesh_hood_pig" + +/obj/item/clothing/head/hooded/tesh_hood/standard/brown_grey + name = "brown and grey cloak hood" + icon_state = "tesh_hood_brg" + +//Belted cloaks +/obj/item/clothing/suit/hooded/teshari/beltcloak + name = "belted cloak" + desc = "A more ridged and stylized Teshari cloak." + icon = 'modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi' + icon_state = "tesh_beltcloak_bo" + + + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_orange + name = "black belted cloak (orange)" + icon_state = "tesh_beltcloak_bo" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_grey + name = "black belted cloak" + icon_state = "tesh_beltcloak_bg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_midgrey + name = "black belted cloak (medium grey)" + icon_state = "tesh_beltcloak_bmg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_lightgrey + name = "black belted cloak (light grey)" + icon_state = "tesh_beltcloak_blg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_white + name = "black belted cloak (white)" + icon_state = "tesh_beltcloak_bw" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_red + name = "black belted cloak (red)" + icon_state = "tesh_beltcloak_br" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black + name = "black simple belted cloak" + icon_state = "tesh_beltcloak_bn" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_yellow + name = "black belted cloak (yellow)" + icon_state = "tesh_beltcloak_by" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_green + name = "black belted cloak (green)" + icon_state = "tesh_beltcloak_bgr" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_blue + name = "black belted cloak (blue)" + icon_state = "tesh_beltcloak_bbl" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_purple + name = "black belted cloak (purple)" + icon_state = "tesh_beltcloak_bp" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_pink + name = "black belted cloak (pink)" + icon_state = "tesh_beltcloak_bpi" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/black_brown + name = "black belted cloak (brown)" + icon_state = "tesh_beltcloak_bbr" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/orange_grey + name = "orange belted cloak" + icon_state = "tesh_beltcloak_og" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/rainbow + name = "rainbow belted cloak" + icon_state = "tesh_beltcloak_rainbow" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/lightgrey_grey + name = "light grey belted cloak" + icon_state = "tesh_beltcloak_lgg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/white_grey + name = "white belted cloak" + icon_state = "tesh_beltcloak_wg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/red_grey + name = "red belted cloak" + icon_state = "tesh_beltcloak_rg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/orange + name = "orange simple belted cloak" + icon_state = "tesh_beltcloak_on" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/yellow_grey + name = "yellow belted cloak" + icon_state = "tesh_beltcloak_yg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/green_grey + name = "green belted cloak" + icon_state = "tesh_beltcloak_gg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/blue_grey + name = "blue belted cloak" + icon_state = "tesh_beltcloak_blug" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/purple_grey + name = "purple belted cloak" + icon_state = "tesh_beltcloak_pg" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/pink_grey + name = "pink belted cloak" + icon_state = "tesh_beltcloak_pig" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/standard/brown_grey + name = "brown belted cloak" + icon_state = "tesh_beltcloak_brg" + +//Belted job cloaks +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/cargo + name = "cargo belted cloak" + desc = "A soft Teshari cloak made for the Cargo department" + icon_state = "tesh_beltcloak_car" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/mining + name = "mining belted cloak" + desc = "A soft Teshari cloak made for Mining" + icon_state = "tesh_beltcloak_mine" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/command + name = "command belted cloak" + desc = "A soft Teshari cloak made for the Command department" + icon_state = "tesh_beltcloak_comm" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/ce + name = "chief engineer belted cloak" + desc = "A soft Teshari cloak made the Chief Engineer" + icon_state = "tesh_beltcloak_ce" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/engineer + name = "engineering belted cloak" + desc = "A soft Teshari cloak made for the Engineering department" + icon_state = "tesh_beltcloak_engie" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/atmos + name = "atmospherics belted cloak" + desc = "A soft Teshari cloak made for the Atmospheric Technician" + icon_state = "tesh_beltcloak_atmos" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/cmo + name = "chief medical officer belted cloak" + desc = "A soft Teshari cloak made the Chief Medical Officer" + icon_state = "tesh_beltcloak_cmo" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/medical + name = "medical belted cloak" + desc = "A soft Teshari cloak made for the Medical department" + icon_state = "tesh_beltcloak_doc" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/chemistry + name = "chemist belted cloak" + desc = "A soft Teshari cloak made for the Chemist" + icon_state = "tesh_beltcloak_chem" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/viro + name = "virologist belted cloak" + desc = "A soft Teshari cloak made for the Virologist" + icon_state = "tesh_beltcloak_viro" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/para + name = "paramedic belted cloak" + desc = "A soft Teshari cloak made for the Paramedic" + icon_state = "tesh_beltcloak_para" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/sci + name = "scientist belted cloak" + desc = "A soft Teshari cloak made for the Science department" + icon_state = "tesh_beltcloak_sci" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/robo + name = "roboticist belted cloak" + desc = "A soft Teshari cloak made for the Roboticist" + icon_state = "tesh_beltcloak_robo" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/sec + name = "security belted cloak" + desc = "A soft Teshari cloak made for the Security department" + icon_state = "tesh_beltcloak_sec" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/qm + name = "quartermaster belted cloak" + desc = "A soft Teshari cloak made for the Quartermaster" + icon_state = "tesh_beltcloak_qm" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/service + name = "service belted cloak" + desc = "A soft Teshari cloak made for the Service department" + icon_state = "tesh_beltcloak_serv" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/iaa + name = "internal affairs belted cloak" + desc = "A soft Teshari cloak made for the Internal Affairs Agent" + icon_state = "tesh_beltcloak_iaa" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/wrdn + name = "warden belted cloak" + desc = "A soft Teshari cloak made for the Warden" + icon_state = "tesh_beltcloak_wrdn" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/hos + name = "security chief belted cloak" + desc = "A soft Teshari cloak made for the Head of Security" + icon_state = "tesh_beltcloak_hos" + +/obj/item/clothing/suit/hooded/teshari/beltcloak/jobs/jani + name = "janitor belted cloak" + desc = "A soft Teshari cloak made for the Janitor" + icon_state = "tesh_beltcloak_jani" + diff --git a/modular_splurt/code/modules/language/language_holder.dm b/modular_splurt/code/modules/language/language_holder.dm new file mode 100644 index 0000000000..a526fa7c16 --- /dev/null +++ b/modular_splurt/code/modules/language/language_holder.dm @@ -0,0 +1,4 @@ +/datum/language_holder/synthetic/New() + . = ..() + understood_languages += list(/datum/language/schechi = list(LANGUAGE_ATOM)) + spoken_languages += list(/datum/language/schechi = list(LANGUAGE_ATOM)) diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm index bbe533a9f6..e667f2906a 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/hair_head.dm @@ -170,3 +170,211 @@ name = "Phoebe" icon = 'modular_splurt/icons/mob/hair.dmi' icon_state = "hair_phoebe" + + +/datum/sprite_accessory/hair/teshari + name = "Teshari Default" + icon_state = "teshari_default" + icon = 'modular_splurt/icons/mob/hair.dmi' + +/datum/sprite_accessory/hair/teshari/altdefault + name = "Teshari Alt. Default" + icon_state = "teshari_ears" + +/datum/sprite_accessory/hair/teshari/tight + name = "Teshari Tight" + icon_state = "teshari_tight" + +/datum/sprite_accessory/hair/teshari/excited + name = "Teshari Spiky" + icon_state = "teshari_spiky" + +/datum/sprite_accessory/hair/teshari/spike + name = "Teshari Spike" + icon_state = "teshari_spike" + +/datum/sprite_accessory/hair/teshari/long + name = "Teshari Overgrown" + icon_state = "teshari_long" + +/datum/sprite_accessory/hair/teshari/burst + name = "Teshari Starburst" + icon_state = "teshari_burst" + +/datum/sprite_accessory/hair/teshari/shortburst + name = "Teshari Short Starburst" + icon_state = "teshari_burst_short" + +/datum/sprite_accessory/hair/teshari/mohawk + name = "Teshari Mohawk" + icon_state = "teshari_mohawk" + +/datum/sprite_accessory/hair/teshari/pointy + name = "Teshari Pointy" + icon_state = "teshari_pointy" + +/datum/sprite_accessory/hair/teshari/upright + name = "Teshari Upright" + icon_state = "teshari_upright" + +/datum/sprite_accessory/hair/teshari/mane + name = "Teshari Mane" + icon_state = "teshari_mane" + +/datum/sprite_accessory/hair/teshari/droopy + name = "Teshari Droopy" + icon_state = "teshari_droopy" + +/datum/sprite_accessory/hair/teshari/mushroom + name = "Teshari Mushroom" + icon_state = "teshari_mushroom" + +/datum/sprite_accessory/hair/teshari/twies + name = "Teshari Twies" + icon_state = "teshari_twies" + +/datum/sprite_accessory/hair/teshari/backstrafe + name = "Teshari Backstrafe" + icon_state = "teshari_backstrafe" + +/datum/sprite_accessory/hair/teshari/_longway + name = "Teshari Long way" + icon_state = "teshari_longway" + +/datum/sprite_accessory/hair/teshari/tree + name = "Teshari Tree" + icon_state = "teshari_tree" + +/datum/sprite_accessory/hair/teshari/fluffymohawk + name = "Teshari Fluffy Mohawk" + icon_state = "teshari_fluffymohawk" + +//Teshari face things +/datum/sprite_accessory/facial_hair/teshari + name = "Teshari Beard" + icon_state = "teshari_chin" + gender = NEUTER + icon = 'modular_splurt/icons/mob/hair.dmi' + +/datum/sprite_accessory/facial_hair/teshari/scraggly + name = "Teshari Scraggly" + icon_state = "teshari_scraggly" + +/datum/sprite_accessory/facial_hair/teshari/chops + name = "Teshari Chops" + icon_state = "teshari_gap" + +/datum/sprite_accessory/ears/mam_ears/teshari + name = "Teshari (COLORABLE)" + + icon_state = "teshari" + color_src = MUTCOLORS2 + icon = 'modular_splurt/icons/mob/ears.dmi' + +/datum/sprite_accessory/ears/mam_ears/tesharihigh + name = "Teshari upper ears (COLORABLE)" + + icon_state = "tesharihigh" + color_src = MUTCOLORS + icon = 'modular_splurt/icons/mob/ears.dmi' + +/datum/sprite_accessory/ears/mam_ears/tesharilow + name = "Teshari lower ears (COLORABLE)" + + icon_state = "tesharilow" + color_src = MUTCOLORS + icon = 'modular_splurt/icons/mob/ears.dmi' + +/datum/sprite_accessory/tails/mam_tails/teshari + icon = 'modular_splurt/icons/mob/tail.dmi' + recommended_species = list("teshari") + color_src = MATRIXED + +/datum/sprite_accessory/tails/mam_tails/teshari/tesharitailhc + name = "teshari tail, colorable" + icon_state = "tesharicolorable" + matrixed_sections = MATRIX_RED + +/datum/sprite_accessory/tails/mam_tails/teshari/tesharitailfeatheredhc + name = "teshari tail w/ feathers, colorable" + icon_state = "tesharifeatherscolorable" + matrixed_sections = MATRIX_RED + + + + + +/datum/sprite_accessory/mam_body_markings/tesh_feathers + name = "Teshari Feathers" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_feathers" + covered_limbs = list("Left Foot" = MATRIX_GREEN, "Right Foot" = MATRIX_GREEN, "Left Hand" = MATRIX_GREEN, "Right Hand" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/teshi_small_feathers + name = "Teshari small wingfeathers" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_sf" + covered_limbs = list("Left Foot" = MATRIX_GREEN, "Right Foot" = MATRIX_GREEN, "Left Hand" = MATRIX_GREEN, "Right Hand" = MATRIX_GREEN, "Chest" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/tesh_skull + name = "Teshari Skull Face" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_skull" + covered_limbs = list("Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_teshari_large_eyes + name = "Teshari large eyes" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "teshlarge_eyes" + covered_limbs = list("Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_teshari_coat + name = "Teshari coat" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_coat" + covered_limbs = list("Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN, "Chest" = MATRIX_GREEN, "Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_teshari_pattern_male + name = "Teshari male pattern" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_pattern_male" + covered_limbs = list("Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN, "Left Hand" = MATRIX_GREEN, "Right Hand" = MATRIX_GREEN, "Chest" = MATRIX_GREEN, "Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_teshari_pattern_female + name = "Teshari female pattern" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_pattern_fem" + covered_limbs = list("Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Hand" = MATRIX_GREEN, "Right Hand" = MATRIX_GREEN, "Chest" = MATRIX_GREEN, "Groin" = MATRIX_GREEN, "Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_tesh_beak + name = "Teshari beak, pointed" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_beak" + covered_limbs = list("Head" = MATRIX_GREEN) + recommended_species = list("teshari") + +/datum/sprite_accessory/mam_body_markings/vr_tesh_beak_alt + name = "Teshari beak, rounded" + icon = 'modular_splurt/icons/mob/mam_markings.dmi' + icon_state = "tesh_beak_alt" + covered_limbs = list("Head" = MATRIX_GREEN) + recommended_species = list("teshari") + + + + + + + + + + + + diff --git a/modular_splurt/code/modules/mob/living/carbon/human/human.dm b/modular_splurt/code/modules/mob/living/carbon/human/human.dm index 3017490811..07d15c0bf2 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/human.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/human.dm @@ -20,6 +20,12 @@ /mob/living/carbon/human/species/mammal/shadekin race = /datum/species/mammal/shadekin +/mob/living/carbon/human/species/mammal/teshari + race = /datum/species/mammal/teshari + +/mob/living/carbon/human/species/mammal/vox + race = /datum/species/vox + /mob/living/carbon/human/is_literate() // Check for D4C craving if(HAS_TRAIT(src, TRAIT_DUMB_CUM_CRAVE)) diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species.dm b/modular_splurt/code/modules/mob/living/carbon/human/species.dm index 0ed5a22b75..c6e6b5b977 100644 --- a/modular_splurt/code/modules/mob/living/carbon/human/species.dm +++ b/modular_splurt/code/modules/mob/living/carbon/human/species.dm @@ -1,3 +1,19 @@ +/datum/species + var/icon_accessories + var/icon_back + var/icon_belt + var/icon_ears + var/icon_eyes + var/icon_feet + var/icon_feet64 + var/icon_hands + var/icon_head + var/icon_mask + var/icon_neck + var/icon_suit + var/icon_uniform + + /datum/species/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) if(user == target && istype(user)) if(HAS_TRAIT(user, TRAIT_FLOORED)) diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm new file mode 100644 index 0000000000..1cb171d13c --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/teshari.dm @@ -0,0 +1,193 @@ +#define TESHARI_TEMP_OFFSET -30 // K, added to comfort/damage limit etc +#define TESHARI_BURNMOD 1.25 // They take more damage from practically everything +#define TESHARI_BRUTEMOD 1.2 +#define TESHARI_HEATMOD 1.3 +#define TESHARI_COLDMOD 0.67 // Except cold. + + +/datum/species/mammal/teshari + name = "Teshari" + id = SPECIES_TESHARI + say_mod = "mars" + eye_type = "teshari" + mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "mam_tail" = "teshari tail, colorable", "mam_ears" = "None", "mam_body_markings" = list()) + allowed_limb_ids = null + override_bp_icon = 'modular_splurt/icons/mob/teshari.dmi' + damage_overlay_type = "teshari" + species_language_holder = /datum/language_holder/teshari + exotic_blood_color = "#D514F7" + disliked_food = GROSS | GRAIN + liked_food = MEAT + payday_modifier = 0.75 + attack_verb = "claw" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + ass_image = 'icons/ass/asslizard.png' + + species_traits = list(MUTCOLORS, + EYECOLOR, + NO_UNDERWEAR, + HAIR, + FACEHAIR, + MARKINGS + ) + + coldmod = TESHARI_COLDMOD + heatmod = TESHARI_HEATMOD + brutemod = TESHARI_BRUTEMOD + burnmod = TESHARI_BURNMOD + + +/datum/species/mammal/teshari/on_species_gain(mob/living/carbon/human/C, datum/species/old_species, pref_load) + if(ishuman(C)) + C.verbs += /mob/living/carbon/human/proc/sonar_ping + C.verbs += /mob/living/carbon/human/proc/hide + C.setMaxHealth(50) + C.physiology.hunger_mod *= 2 + C.add_movespeed_modifier(/datum/movespeed_modifier/teshari) + +/datum/movespeed_modifier/teshari + multiplicative_slowdown = -0.2 + +/datum/emote/sound/teshari + mob_type_allowed_typecache = list(/mob/living/carbon/human) + emote_type = EMOTE_AUDIBLE + +/datum/language_holder/teshari + understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM)) + spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM)) + +/datum/language/schechi + +/datum/emote/living/audio/teshari/teshsqueak + key = "surprised" + key_third_person = "surprised" + message = "chirps in surprise!" + message_mime = "lets out an inaudible chirp!" + emote_sound = 'modular_splurt/sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + emote_cooldown = 2.1 SECONDS + +/datum/emote/living/audio/teshari/teshsqueak/run_emote(mob/user, params) + var/datum/dna/D = user.has_dna() + if(D.species.name != "Teshari") + return + // Return normally + . = ..() + +/datum/emote/living/audio/teshari/teshchirp + key = "tchirp" + key_third_person = "tchirp" + message = "chirps!" + message_mime = "lets out an inaudible chirp!" + emote_sound = 'modular_splurt/sound/voice/teshchirp.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + emote_cooldown = 2.1 SECONDS + +/datum/emote/living/audio/teshari/teshchirp/run_emote(mob/user, params) + var/datum/dna/D = user.has_dna() + if(D.species.name != "Teshari") + return + // Return normally + . = ..() + +/datum/emote/living/audio/teshari/trill + key = "trill" + key_third_person = "trill" + message = "trills!" + message_mime = "lets out an inaudible chirp!" + emote_sound = 'modular_splurt/sound/voice/teshtrill.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + emote_cooldown = 2.1 SECONDS + +/datum/emote/living/audio/teshari/trill/run_emote(mob/user, params) + var/datum/dna/D = user.has_dna() + if(D.species.name != "Teshari") + return + // Return normally + . = ..() + +/datum/emote/living/audio/teshari/teshscream + key = "teshscream" + key_third_person = "teshscream" + message = "screams!" + message_mime = "lets out an inaudible screams!" + emote_sound = 'modular_splurt/sound/voice/teshscream.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + emote_cooldown = 2.1 SECONDS + +/datum/emote/living/audio/teshari/teshscream/run_emote(mob/user, params) + var/datum/dna/D = user.has_dna() + if(D.species.name != "Teshari") + return + // Return normally + . = ..() + +/mob/living/carbon/human + var/next_sonar_ping = 0 + var/hiding = 0 + +/mob/living/carbon/human/proc/hide() + set name = "Hide" + set desc = "Allows to hide beneath tables or certain items. Toggled on or off." + set category = "Abilities" + + if(stat == DEAD || restrained() || buckled|| has_buckled_mobs()) //VORE EDIT: Check for has_buckled_mobs() (taur riding) + return + + if(hiding) + plane = initial(plane) + layer = initial(layer) + to_chat(usr, "You have stopped hiding.") + hiding = 0 + else + hiding = 1 + layer = BELOW_OBJ_LAYER //Just above cables with their 2.44 + plane = GAME_PLANE + to_chat(src,"You are now hiding.") + + +/mob/living/carbon/human/proc/sonar_ping() + set name = "Listen In" + set desc = "Allows you to listen in to movement and noises around you." + set category = "Abilities" + + if(incapacitated()) + to_chat(src, "You need to recover before you can use this ability.") + return + if(world.time < next_sonar_ping) + to_chat(src, "You need another moment to focus.") + return + var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS) + if(ears.deaf > 0) + to_chat(src, "You are for all intents and purposes currently deaf!") + return + next_sonar_ping += 10 SECONDS + var/heard_something = FALSE + to_chat(src, "You take a moment to listen in to your environment...") + for(var/mob/living/L in range(client.view, src)) + var/turf/T = get_turf(L) + if(!T || L == src || L.stat == DEAD) + continue + heard_something = TRUE + var/feedback = list() + feedback += "There are noises of movement " + var/direction = get_dir(src, L) + if(direction) + feedback += "towards the [dir2text(direction)], " + switch(get_dist(src, L) / 7) + if(0 to 0.2) + feedback += "very close by." + if(0.2 to 0.4) + feedback += "close by." + if(0.4 to 0.6) + feedback += "some distance away." + if(0.6 to 0.8) + feedback += "further away." + else + feedback += "far away." + else // No need to check distance if they're standing right on-top of us + feedback += "right on top of you." + feedback += "" + to_chat(src,jointext(feedback,null)) + if(!heard_something) + to_chat(src, "You hear no movement but your own.") + diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm new file mode 100644 index 0000000000..a6da9f28c3 --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -0,0 +1,76 @@ +/datum/species/vox + name = "Vox" + id = SPECIES_VOX + override_bp_icon = 'modular_splurt/icons/mob/vox.dmi' + species_language_holder = /datum/language_holder/vox + + + breathid = "tox" + + mutantlungs = /obj/item/organ/lungs/vox + + species_traits = list(MUTCOLORS, + EYECOLOR, + NO_UNDERWEAR, + HAIR, + FACEHAIR, + MARKINGS + ) + + exotic_blood_color = "#9066BD" + //flesh_color = "#808D11" + + + attack_verb = "claw" + attack_sound = 'sound/weapons/slash.ogg' + miss_sound = 'sound/weapons/slashmiss.ogg' + + say_mod = "shrieks" + eye_type = "vox" + mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "mam_tail" = "teshari tail, colorable", "mam_ears" = "None", "mam_body_markings" = list()) + allowed_limb_ids = null + damage_overlay_type = "vox" + +/datum/species/vox/before_equip_job(datum/job/J, mob/living/carbon/human/H, visualsOnly = FALSE) + var/datum/outfit/vox/O = new /datum/outfit/vox + H.equipOutfit(O, visualsOnly) + H.internal = H.get_item_for_held_index(2) + H.update_internals_hud_icon(1) + return 0 + +/datum/species/vox/on_species_gain(mob/living/carbon/human/C, datum/species/old_species, pref_load) + if(ishuman(C)) + C.add_movespeed_modifier(/datum/movespeed_modifier/vox) + ..() + +/datum/movespeed_modifier/vox + multiplicative_slowdown = -0.2 + + +/datum/language_holder/vox + understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM)) + spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM), + /datum/language/schechi = list(LANGUAGE_ATOM)) + +/datum/language/vox + +/datum/emote/sound/vox + mob_type_allowed_typecache = list(/mob/living/carbon/human) + emote_type = EMOTE_AUDIBLE + + +/datum/emote/living/audio/vox/shriek + key = "shriek" + key_third_person = "shrieks" + message = "shrieks!" + message_mime = "lets out an inaudible shriek!" + emote_sound = 'modular_splurt/sound/voice/shriek1.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio. + emote_cooldown = 2.1 SECONDS + +/datum/emote/living/audio/vox/shriek/run_emote(mob/user, params) + var/datum/dna/D = user.has_dna() + if(D.species.name != "Vox") + return + // Return normally + . = ..() diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/xenochimera.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/xenochimera.dm new file mode 100644 index 0000000000..d8409ab295 --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/xenochimera.dm @@ -0,0 +1,281 @@ +// Xenochimera thing mostly +#define REVIVING_NOW -1 +#define REVIVING_DONE 0 +#define REVIVING_READY 1 + + +/datum/species/mammal/xenochimera + name = "Xenochimera" + id = SPECIES_XENOCHIMERA + mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "mam_snouts" = "None", "mam_tail" = "None", "mam_ears" = "None", "deco_wings" = "None", + "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") + species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,LIPS,WINGCOLOR,HAS_FLESH,HAS_BONE) + mutanteyes = /obj/item/organ/eyes/night_vision + brutemod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. + burnmod = 1.15 //As vulnerable to burn as a Tajara. + +/datum/species/mammal/xenochimera/on_species_gain(mob/living/carbon/human/C, datum/species/old_species, pref_load) + if(ishuman(C)) + C.verbs += /mob/living/carbon/human/proc/reconstitute_form + C.verbs += /mob/living/carbon/human/proc/sonar_ping + C.verbs += /mob/living/carbon/human/proc/tie_hair + C.add_movespeed_modifier(/datum/movespeed_modifier/xenochimera) + +/datum/species/mammal/xenochimera/spec_life(mob/living/carbon/human/H) + //If they're KO'd/dead, or reviving, they're probably not thinking a lot about much of anything. + //if(!H.stat || !(H.revive_ready == REVIVING_NOW || H.revive_ready == REVIVING_DONE)) + // handle_feralness(H) + + //While regenerating + if(H.revive_ready == REVIVING_NOW || H.revive_ready == REVIVING_DONE) + H.Paralyze(1000) + var/regen_sounds = list( + 'modular_splurt/sound/effects/regen_1.ogg', + 'modular_splurt/sound/effects/regen_2.ogg', + 'modular_splurt/sound/effects/regen_4.ogg', + 'modular_splurt/sound/effects/regen_3.ogg', + 'modular_splurt/sound/effects/regen_5.ogg' + ) + if(prob(2)) // 2% chance of playing squelchy noise while reviving, which is run roughly every 2 seconds/tick while regenerating. + playsound(H, pick(regen_sounds), 30) + H.visible_message("

[H.name]'s motionless form shudders grotesquely, rippling unnaturally.

") + + //Cold/pressure effects when not regenerating + else + var/datum/gas_mixture/environment = H.loc.return_air() + var/pressure2 = environment.return_pressure() + var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2) + + //Very low pressure damage + if(adjusted_pressure2 <= 20) + H.take_overall_damage(LOW_PRESSURE_DAMAGE, 0) + + + //Cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral. + //NB: 'body_temperature' used here is the 'setpoint' species var + var/body_temperature = 310.15 + var/temp_diff = body_temperature - H.bodytemperature + if(temp_diff >= 50) + H.eye_blurry = max(5,H.eye_blurry) + +/datum/movespeed_modifier/xenochimera + multiplicative_slowdown = -0.1 + +/mob/living/carbon/human/proc/reconstitute_form() //Scree's race ability.in exchange for: No cloning. + set name = "Reconstitute Form" + set category = "Abilities" + + // Sanity is mostly handled in chimera_regenerate() + if(stat == DEAD) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate your corpse? This process can take up to thirty minutes.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else if (quickcheckuninjured()) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate? As you are uninjured this will only take 30 seconds and match your appearance to your character slot.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else + var/confirm = tgui_alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to fifteen minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + +/mob/living/carbon/human/proc/tie_hair() + set name = "Tie Hair" + set desc = "Style your hair." + set category = "IC" + + if(incapacitated()) + to_chat(src, "You can't mess with your hair right now!") + return + + if(hair_style) + var/selected_string + var/list/datum/sprite_accessory/hair/valid_hairstyles = list() + for(var/hair_string in GLOB.hair_styles_list) + valid_hairstyles.Add(hair_string) + selected_string = tgui_input_list(usr, "Select a new hairstyle", "Your hairstyle", valid_hairstyles) + if(incapacitated()) + to_chat(src, "You can't mess with your hair right now!") + return + else if(selected_string && hair_style != selected_string) + hair_style = selected_string + regenerate_icons() + visible_message("[src] pauses a moment to style their hair.") + else + to_chat(src, "You're already using that style.") + +/mob/living/carbon/human + var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far. + var/revive_finished = 0 // Only used for xenochimera regen, allows us to find out when the regen will finish. + +/mob/living/carbon/human/proc/chimera_regenerate() + //If they're already regenerating + switch(revive_ready) + if(REVIVING_NOW) + to_chat(src, "You are already reconstructing, just wait for the reconstruction to finish!") + return + if(REVIVING_DONE) + to_chat(src, "Your reconstruction is done, but you need to hatch now.") + return + if(revive_ready > world.time) + to_chat(src, "You can't use that ability again so soon!") + return + + var/time = min(900, (120+780/(1 + nutrition/100))) //capped at 15 mins, roughly 6 minutes at 250 (yellow) nutrition, 4.1 minutes at 500 (grey), cannot be below 2 mins + if (quickcheckuninjured()) //if you're completely uninjured, then you get a speedymode - check health first for quickness + time = 30 + + //Clicked regen while dead. + if(stat == DEAD) + + //reviving from dead takes extra nutriment to be provided from outside OR takes twice as long and consumes extra at the end + if(!nutrition > 0) + time = time*2 + + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + + //Scary spawnerization. + revive_ready = REVIVING_NOW + revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. + throw_alert("regen", /atom/movable/screen/alert/xenochimera/reconstitution) + spawn(time SECONDS) + // check to see if they've been fixed by outside forces in the meantime such as defibbing + if(stat != DEAD) + to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") + revive_ready = REVIVING_READY //reset their cooldown + clear_alert("regen") + throw_alert("hatch", /atom/movable/screen/alert/xenochimera/readytohatch) + + // Was dead, still dead. + else + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + clear_alert("regen") + throw_alert("hatch", /atom/movable/screen/alert/xenochimera/readytohatch) + + + //Clicked regen while NOT dead + else + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + + //Waiting for regen after being alive + revive_ready = REVIVING_NOW + revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. + throw_alert("regen", /atom/movable/screen/alert/xenochimera/reconstitution) + spawn(time SECONDS) + + //Slightly different flavour messages + if(stat != DEAD || nutrition > 0) + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") + else + to_chat(src, "Consciousness begins to stir as your battered body struggles to recover from its ordeal..") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + + clear_alert("regen") + throw_alert("hatch", /atom/movable/screen/alert/xenochimera/readytohatch) + +/mob/living/carbon/human/proc/hatch() + set name = "Hatch" + set category = "Abilities" + + if(revive_ready != REVIVING_DONE) + //Hwhat? + verbs -= /mob/living/carbon/human/proc/hatch + return + + var/confirm = tgui_alert(usr, "Are you sure you want to hatch right now? This will be very obvious to anyone in view.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + + //Dead when hatching + if(stat == DEAD) + + //Reviving from ded takes extra nutrition - if it isn't provided from outside sources, it comes from you + if(!nutrition > 0) + nutrition=nutrition * 0.75 + chimera_hatch() + + visible_message("

The former corpse staggers to its feet, all its former wounds having vanished...

") //Bloody hell... + clear_alert("hatch") + return + + //Alive when hatching + else + chimera_hatch() + + visible_message("

[src] rises to \his feet.

") //Bloody hell... + clear_alert("hatch") + +/mob/living/carbon/human/proc/chimera_hatch() + verbs -= /mob/living/carbon/human/proc/hatch + to_chat(src, "Your new body awakens, bursting free from your old skin.") + //Modify and record values (half nutrition and braindamage) + var/old_nutrition = nutrition + var/uninjured=quickcheckuninjured() + //I did have special snowflake code, but this is easier. + revive() + cure_husk() + + + if(!uninjured) + nutrition = old_nutrition * 0.5 + //Drop everything + for(var/obj/item/W in src) + dropItemToGround(W, 1) + //Visual effects + var/T = get_turf(src) + + new /obj/effect/gibspawner/human(T, src) + visible_message("

The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... + + else //lower cost for doing a quick cosmetic revive + nutrition = old_nutrition * 0.9 + + //Unfreeze some things + //does_not_breathe = FALSE + //update_canmove() + //weakened = 2 + SetParalyzed(0) + revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often. + + +/atom/movable/screen/alert/xenochimera/reconstitution + name = "Reconstructing Form" + desc = "You're still rebuilding your body! Click the alert to find out how long you have left." + icon_state = "regenerating" + + // Commenting this out for now, will revisit later once I can figure out how to override Click() appropriately. +/atom/movable/screen/alert/xenochimera/reconstitution/Click() + if(ishuman(usr)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert. + var/mob/living/carbon/human/H = usr + if(istype(H.dna.species, /datum/species/mammal/xenochimera)) + if(H.revive_ready == REVIVING_NOW) + to_chat(usr, "We are currently reviving, and will be done in [(H.revive_finished - world.time) / 10] seconds.") + else if(H.revive_ready == REVIVING_DONE) + to_chat(usr, "You should have a notification + alert for this! Bug report that this is still here!") + + +/atom/movable/screen/alert/xenochimera/readytohatch + name = "Ready to Hatch" + desc = "You're done reconstructing your cells! Click me to Hatch!" + icon_state = "hatch_ready" + + // Commenting this out for now, will revisit later once I can figure out how to override Click() appropriately. +/atom/movable/screen/alert/xenochimera/readytohatch/Click() + if(ishuman(usr)) // If you're somehow able to click this while not a chimera, this should prevent weird runtimes. Will need changing if regeneration is ever opened to non-chimera using the same alert. + var/mob/living/carbon/human/H = usr + if(istype(H.dna.species, /datum/species/mammal/xenochimera)) + if(H.revive_ready == REVIVING_DONE) // Sanity check. + H.hatch() // Hatch. + + +/mob/living/carbon/human/proc/quickcheckuninjured() + if (getBruteLoss() || getFireLoss() || getToxLoss() || getOxyLoss()) //fails if they have any of the main damage types + return FALSE + return TRUE + +#undef REVIVING_NOW +#undef REVIVING_DONE +#undef REVIVING_READY + diff --git a/modular_splurt/code/modules/surgery/organs/lungs.dm b/modular_splurt/code/modules/surgery/organs/lungs.dm index 639e304de8..ec89182492 100644 --- a/modular_splurt/code/modules/surgery/organs/lungs.dm +++ b/modular_splurt/code/modules/surgery/organs/lungs.dm @@ -1,3 +1,14 @@ /obj/item/organ/lungs/ipc name = "IPC cooling system" desc = "Helps regulate the body temperature of synthetic beings. Helpful!" + +/obj/item/organ/lungs/vox + name = "plasma filter" + desc = "A spongy rib-shaped mass for filtering plasma from the air." + icon_state = "lungs-plasma" + breathing_class = BREATH_PLASMA + maxHealth = INFINITY//I don't understand how plamamen work, so I'm not going to try t give them special lungs atm + +/obj/item/organ/lungs/vox/populate_gas_info() + ..() + gas_max -= GAS_PLASMA diff --git a/modular_splurt/icons/mob/clothing/species/teshari/accessories.dmi b/modular_splurt/icons/mob/clothing/species/teshari/accessories.dmi new file mode 100644 index 0000000000..ee27184181 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/accessories.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/back.dmi b/modular_splurt/icons/mob/clothing/species/teshari/back.dmi new file mode 100644 index 0000000000..bcecaae765 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/back.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/belt.dmi b/modular_splurt/icons/mob/clothing/species/teshari/belt.dmi new file mode 100644 index 0000000000..eadfe01a6e Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/belt.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/ears.dmi b/modular_splurt/icons/mob/clothing/species/teshari/ears.dmi new file mode 100644 index 0000000000..0d74260887 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/ears.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/eyes.dmi b/modular_splurt/icons/mob/clothing/species/teshari/eyes.dmi new file mode 100644 index 0000000000..4868ae09f7 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/eyes.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/feet.dmi b/modular_splurt/icons/mob/clothing/species/teshari/feet.dmi new file mode 100644 index 0000000000..53a2f1f70e Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/feet.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/feet_64.dmi b/modular_splurt/icons/mob/clothing/species/teshari/feet_64.dmi new file mode 100644 index 0000000000..72d7453676 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/feet_64.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/hands.dmi b/modular_splurt/icons/mob/clothing/species/teshari/hands.dmi new file mode 100644 index 0000000000..885c3895fa Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/hands.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/head.dmi b/modular_splurt/icons/mob/clothing/species/teshari/head.dmi new file mode 100644 index 0000000000..16ef5634cb Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/head.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/mask.dmi b/modular_splurt/icons/mob/clothing/species/teshari/mask.dmi new file mode 100644 index 0000000000..b84fb3ae96 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/mask.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/neck.dmi b/modular_splurt/icons/mob/clothing/species/teshari/neck.dmi new file mode 100644 index 0000000000..35118102fc Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/neck.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/suit.dmi b/modular_splurt/icons/mob/clothing/species/teshari/suit.dmi new file mode 100644 index 0000000000..6fc1411dd4 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/suit.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi b/modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi new file mode 100644 index 0000000000..2a5179e00c Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/tesh_items.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/teshari/uniform.dmi b/modular_splurt/icons/mob/clothing/species/teshari/uniform.dmi new file mode 100644 index 0000000000..3abaf61753 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/teshari/uniform.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/back.dmi b/modular_splurt/icons/mob/clothing/species/vox/back.dmi new file mode 100644 index 0000000000..b3c7e2dde1 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/back.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/ears.dmi b/modular_splurt/icons/mob/clothing/species/vox/ears.dmi new file mode 100644 index 0000000000..09fea15502 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/ears.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/eyes.dmi b/modular_splurt/icons/mob/clothing/species/vox/eyes.dmi new file mode 100644 index 0000000000..f6cfbf5b2e Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/eyes.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/face.dmi b/modular_splurt/icons/mob/clothing/species/vox/face.dmi new file mode 100644 index 0000000000..de6101e2a7 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/face.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/feet.dmi b/modular_splurt/icons/mob/clothing/species/vox/feet.dmi new file mode 100644 index 0000000000..8512234e6d Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/feet.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/hands.dmi b/modular_splurt/icons/mob/clothing/species/vox/hands.dmi new file mode 100644 index 0000000000..936dbc337a Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/hands.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/head.dmi b/modular_splurt/icons/mob/clothing/species/vox/head.dmi new file mode 100644 index 0000000000..c1fa4ed377 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/head.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/suit.dmi b/modular_splurt/icons/mob/clothing/species/vox/suit.dmi new file mode 100644 index 0000000000..b2e41a9422 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/suit.dmi differ diff --git a/modular_splurt/icons/mob/clothing/species/vox/uniform.dmi b/modular_splurt/icons/mob/clothing/species/vox/uniform.dmi new file mode 100644 index 0000000000..03c5ce75f4 Binary files /dev/null and b/modular_splurt/icons/mob/clothing/species/vox/uniform.dmi differ diff --git a/modular_splurt/icons/mob/ears.dmi b/modular_splurt/icons/mob/ears.dmi new file mode 100644 index 0000000000..660a01e6b8 Binary files /dev/null and b/modular_splurt/icons/mob/ears.dmi differ diff --git a/modular_splurt/icons/mob/hair.dmi b/modular_splurt/icons/mob/hair.dmi index 46abc169e7..07e756f8f4 100644 Binary files a/modular_splurt/icons/mob/hair.dmi and b/modular_splurt/icons/mob/hair.dmi differ diff --git a/modular_splurt/icons/mob/mam_markings.dmi b/modular_splurt/icons/mob/mam_markings.dmi index 76921764ee..20a3b335df 100644 Binary files a/modular_splurt/icons/mob/mam_markings.dmi and b/modular_splurt/icons/mob/mam_markings.dmi differ diff --git a/modular_splurt/icons/mob/mam_markingsdel.dmi b/modular_splurt/icons/mob/mam_markingsdel.dmi new file mode 100644 index 0000000000..4d6d00fb07 Binary files /dev/null and b/modular_splurt/icons/mob/mam_markingsdel.dmi differ diff --git a/modular_splurt/icons/mob/tail.dmi b/modular_splurt/icons/mob/tail.dmi new file mode 100644 index 0000000000..3e62fee997 Binary files /dev/null and b/modular_splurt/icons/mob/tail.dmi differ diff --git a/modular_splurt/icons/mob/teshari.dmi b/modular_splurt/icons/mob/teshari.dmi new file mode 100644 index 0000000000..82186a36cd Binary files /dev/null and b/modular_splurt/icons/mob/teshari.dmi differ diff --git a/modular_splurt/icons/mob/teshari_parts.dmi b/modular_splurt/icons/mob/teshari_parts.dmi new file mode 100644 index 0000000000..b22395a92d Binary files /dev/null and b/modular_splurt/icons/mob/teshari_parts.dmi differ diff --git a/modular_splurt/icons/mob/vox.dmi b/modular_splurt/icons/mob/vox.dmi new file mode 100644 index 0000000000..e2fbae0c9f Binary files /dev/null and b/modular_splurt/icons/mob/vox.dmi differ diff --git a/modular_splurt/icons/obj/genitals/teshari_penis.dmi b/modular_splurt/icons/obj/genitals/teshari_penis.dmi new file mode 100644 index 0000000000..9931509ae9 Binary files /dev/null and b/modular_splurt/icons/obj/genitals/teshari_penis.dmi differ diff --git a/modular_splurt/sound/effects/hatch.ogg b/modular_splurt/sound/effects/hatch.ogg new file mode 100644 index 0000000000..3ac74fdec1 Binary files /dev/null and b/modular_splurt/sound/effects/hatch.ogg differ diff --git a/modular_splurt/sound/effects/hatch_notification.ogg b/modular_splurt/sound/effects/hatch_notification.ogg new file mode 100644 index 0000000000..f821a898b7 Binary files /dev/null and b/modular_splurt/sound/effects/hatch_notification.ogg differ diff --git a/modular_splurt/sound/effects/regen_1.ogg b/modular_splurt/sound/effects/regen_1.ogg new file mode 100644 index 0000000000..199e7db780 Binary files /dev/null and b/modular_splurt/sound/effects/regen_1.ogg differ diff --git a/modular_splurt/sound/effects/regen_2.ogg b/modular_splurt/sound/effects/regen_2.ogg new file mode 100644 index 0000000000..a15d979797 Binary files /dev/null and b/modular_splurt/sound/effects/regen_2.ogg differ diff --git a/modular_splurt/sound/effects/regen_3.ogg b/modular_splurt/sound/effects/regen_3.ogg new file mode 100644 index 0000000000..5546c2b25f Binary files /dev/null and b/modular_splurt/sound/effects/regen_3.ogg differ diff --git a/modular_splurt/sound/effects/regen_4.ogg b/modular_splurt/sound/effects/regen_4.ogg new file mode 100644 index 0000000000..a5d706e7ce Binary files /dev/null and b/modular_splurt/sound/effects/regen_4.ogg differ diff --git a/modular_splurt/sound/effects/regen_5.ogg b/modular_splurt/sound/effects/regen_5.ogg new file mode 100644 index 0000000000..b85eced5ab Binary files /dev/null and b/modular_splurt/sound/effects/regen_5.ogg differ diff --git a/modular_splurt/sound/voice/shriek1.ogg b/modular_splurt/sound/voice/shriek1.ogg new file mode 100644 index 0000000000..bb13db1ca0 Binary files /dev/null and b/modular_splurt/sound/voice/shriek1.ogg differ diff --git a/modular_splurt/sound/voice/teshchirp.ogg b/modular_splurt/sound/voice/teshchirp.ogg new file mode 100644 index 0000000000..f13c80dd33 Binary files /dev/null and b/modular_splurt/sound/voice/teshchirp.ogg differ diff --git a/modular_splurt/sound/voice/teshscream.ogg b/modular_splurt/sound/voice/teshscream.ogg new file mode 100644 index 0000000000..9beb0106a3 Binary files /dev/null and b/modular_splurt/sound/voice/teshscream.ogg differ diff --git a/modular_splurt/sound/voice/teshsqueak.ogg b/modular_splurt/sound/voice/teshsqueak.ogg new file mode 100644 index 0000000000..41d205ab9f Binary files /dev/null and b/modular_splurt/sound/voice/teshsqueak.ogg differ diff --git a/modular_splurt/sound/voice/teshtrill.ogg b/modular_splurt/sound/voice/teshtrill.ogg new file mode 100644 index 0000000000..db30e988e5 Binary files /dev/null and b/modular_splurt/sound/voice/teshtrill.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 582978187c..694240c37b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4680,6 +4680,7 @@ #include "modular_splurt\code\modules\clothing\masks\miscellaneous.dm" #include "modular_splurt\code\modules\clothing\neck\_neck.dm" #include "modular_splurt\code\modules\clothing\outfits\ert.dm" +#include "modular_splurt\code\modules\clothing\outfits\standard.dm" #include "modular_splurt\code\modules\clothing\shoes\_shoes.dm" #include "modular_splurt\code\modules\clothing\shoes\magboots.dm" #include "modular_splurt\code\modules\clothing\shoes\miscellaneous.dm" @@ -4757,6 +4758,7 @@ #include "modular_splurt\code\modules\keybindings\keybind\communication.dm" #include "modular_splurt\code\modules\keybindings\keybind\human.dm" #include "modular_splurt\code\modules\keybindings\keybind\movement.dm" +#include "modular_splurt\code\modules\language\language_holder.dm" #include "modular_splurt\code\modules\language\signlanguage.dm" #include "modular_splurt\code\modules\language\xenocommon.dm" #include "modular_splurt\code\modules\mapping\lavaland_jungle_gen.dm" @@ -4818,7 +4820,10 @@ #include "modular_splurt\code\modules\mob\living\carbon\human\species_types\podpeople.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species_types\shadekin.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species_types\spectrebot.dm" +#include "modular_splurt\code\modules\mob\living\carbon\human\species_types\teshari.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species_types\vampire.dm" +#include "modular_splurt\code\modules\mob\living\carbon\human\species_types\vox.dm" +#include "modular_splurt\code\modules\mob\living\carbon\human\species_types\xenochimera.dm" #include "modular_splurt\code\modules\mob\living\carbon\human\species_types\zombies2.dm" #include "modular_splurt\code\modules\mob\living\silicon\silicon.dm" #include "modular_splurt\code\modules\mob\living\silicon\pai\pai.dm"