Merge pull request #840 from Comicao1/Races-port

Teshari [TESTING]
This commit is contained in:
BongaTheProto
2023-09-10 23:59:28 -05:00
committed by GitHub
70 changed files with 1771 additions and 18 deletions
+3
View File
@@ -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"
+2 -2
View File
@@ -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"))
@@ -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"
@@ -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))
@@ -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)
+2 -2
View File
@@ -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
+3
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 121 KiB

@@ -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
@@ -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'
@@ -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
@@ -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
@@ -0,0 +1,4 @@
/datum/outfit/vox
name = "Vox"
r_hand = /obj/item/tank/internals/plasmaman/belt/full
mask = /obj/item/clothing/mask/breath
@@ -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"
@@ -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))
@@ -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")
@@ -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))
@@ -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))
@@ -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 <b>inaudible</b> 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 <b>inaudible</b> 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 <b>inaudible</b> 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 <b>inaudible</b> 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, "<span class='notice'>You have stopped hiding.</span>")
hiding = 0
else
hiding = 1
layer = BELOW_OBJ_LAYER //Just above cables with their 2.44
plane = GAME_PLANE
to_chat(src,"<span class='notice'>You are now hiding.</span>")
/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, "<span class='warning'>You need to recover before you can use this ability.</span>")
return
if(world.time < next_sonar_ping)
to_chat(src, "<span class='warning'>You need another moment to focus.</span>")
return
var/obj/item/organ/ears/ears = getorganslot(ORGAN_SLOT_EARS)
if(ears.deaf > 0)
to_chat(src, "<span class='warning'>You are for all intents and purposes currently deaf!</span>")
return
next_sonar_ping += 10 SECONDS
var/heard_something = FALSE
to_chat(src, "<span class='notice'>You take a moment to listen in to your environment...</span>")
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 += "<span class='notice'>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 += "</span>"
to_chat(src,jointext(feedback,null))
if(!heard_something)
to_chat(src, "<span class='notice'>You hear no movement but your own.</span>")
@@ -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 <b>inaudible</b> 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
. = ..()
@@ -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("<span class='danger'><p><font size=4>[H.name]'s motionless form shudders grotesquely, rippling unnaturally.</font></p></span>")
//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, "<span class='warning'>You can't mess with your hair right now!</span>")
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, "<span class='warning'>You can't mess with your hair right now!</span>")
return
else if(selected_string && hair_style != selected_string)
hair_style = selected_string
regenerate_icons()
visible_message("<span class='notice'>[src] pauses a moment to style their hair.</span>")
else
to_chat(src, "<span class ='notice'>You're already using that style.</span>")
/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, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
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, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch.</span>")
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, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
else
to_chat(src, "<span class='warning'>Consciousness begins to stir as your battered body struggles to recover from its ordeal..</span>")
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("<span class='warning'><p><font size=4>The former corpse staggers to its feet, all its former wounds having vanished...</font></p></span>") //Bloody hell...
clear_alert("hatch")
return
//Alive when hatching
else
chimera_hatch()
visible_message("<span class='warning'><p><font size=4>[src] rises to \his feet.</font></p></span>") //Bloody hell...
clear_alert("hatch")
/mob/living/carbon/human/proc/chimera_hatch()
verbs -= /mob/living/carbon/human/proc/hatch
to_chat(src, "<span class='notice'>Your new body awakens, bursting free from your old skin.</span>")
//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("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //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
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+5
View File
@@ -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"