diff --git a/code/__defines/mobs_yw.dm b/code/__defines/mobs_yw.dm new file mode 100644 index 0000000000..adceca8519 --- /dev/null +++ b/code/__defines/mobs_yw.dm @@ -0,0 +1 @@ +#define SPECIES_SHADEKIN_YW "GeneShadekin" \ No newline at end of file diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index d57bd09558..b97fb809d5 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -427,7 +427,8 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, SPECIES_XENO_QUEEN, SPECIES_SHADOW, SPECIES_GOLEM, //Some special species that may or may not be ever used in event too, - SPECIES_SHADEKIN) //Shadefluffers just poof away + SPECIES_SHADEKIN, + SPECIES_SHADEKIN_YW) //Shadefluffers just poof away /hook/startup/proc/init_vore_datum_ref_lists() var/paths diff --git a/code/modules/mob/living/carbon/human/chem_side_effects.dm b/code/modules/mob/living/carbon/human/chem_side_effects.dm index c7009107de..42462af554 100644 --- a/code/modules/mob/living/carbon/human/chem_side_effects.dm +++ b/code/modules/mob/living/carbon/human/chem_side_effects.dm @@ -1,4 +1,4 @@ -// MEDICAL SIDE EFFECT BASE +oh // MEDICAL SIDE EFFECT BASE // ======================== /datum/medical_effect var/name = "None" diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_yw.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_yw.dm new file mode 100644 index 0000000000..79d8575a48 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_yw.dm @@ -0,0 +1,249 @@ +/datum/species/shadekin_yw + name = SPECIES_SHADEKIN_YW + name_plural = "Shadekin" + icobase = 'icons/mob/human_races/r_shadekin_vr.dmi' + deform = 'icons/mob/human_races/r_shadekin_vr.dmi' + tail = "tail" + icobase_tail = 1 + blurb = "A shadekin, where their powers have been stripped down, their access to the bluespace warp, removed." + catalogue_data = list(/datum/category_item/catalogue/fauna/shadekin) + + language = LANGUAGE_SHADEKIN + assisted_langs = list() + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin) + rarity_value = 15 //INTERDIMENSIONAL FLUFFERS + + siemens_coefficient = 0 + darksight = 10 + + slowdown = -0.5 + item_slowdown_mod = 0.5 + + brute_mod = 0.7 // Naturally sturdy. + burn_mod = 1.2 // Furry + + warning_low_pressure = 50 + hazard_low_pressure = -1 + + warning_high_pressure = 300 + hazard_high_pressure = INFINITY + + cold_level_1 = -1 //Immune to cold + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 850 //Resistant to heat + heat_level_2 = 1000 + heat_level_3 = 1150 + + flags = NO_SCAN | NO_MINOR_CUT | NO_INFECT + spawn_flags = SPECIES_CAN_JOIN + + reagent_tag = IS_SHADEKIN // for shadekin-unqiue chem interactions + + flesh_color = "#FFC896" + blood_color = "#A10808" + base_color = "#f0f0f0" + color_mult = 1 + + has_glowing_eyes = TRUE + + death_message = "phases to somewhere far away!" + male_cough_sounds = null + female_cough_sounds = null + male_sneeze_sound = null + female_sneeze_sound = null + + speech_bubble_appearance = "ghost" + + genders = list(PLURAL, NEUTER) //no sexual dymorphism + ambiguous_genders = TRUE //but just in case + + virus_immune = 1 + + breath_type = null + poison_type = null + + vision_flags = SEE_SELF + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_UNDERWEAR + + move_trail = /obj/effect/decal/cleanable/blood/tracks/paw + + has_organ = list( + O_HEART = /obj/item/organ/internal/heart, + O_VOICE = /obj/item/organ/internal/voicebox, + O_LIVER = /obj/item/organ/internal/liver, + O_KIDNEYS = /obj/item/organ/internal/kidneys, + O_BRAIN = /obj/item/organ/internal/brain/shadekin, + O_EYES = /obj/item/organ/internal/eyes, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/vr/shadekin), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) +/* + //SHADEKIN-UNIQUE STUFF GOES HERE + var/list/shadekin_abilities = list(/datum/power/shadekin/phase_shift, + /datum/power/shadekin/regenerate_other, + /datum/power/shadekin/create_shade) + var/list/shadekin_ability_datums = list() + + +/datum/species/shadekin/New() + ..() + for(var/power in shadekin_abilities) + var/datum/power/shadekin/SKP = new power(src) + shadekin_ability_datums.Add(SKP) +*/ +/datum/species/shadekin_yw/handle_death(var/mob/living/carbon/human/H) + spawn(1) + for(var/obj/item/W in H) + H.drop_from_inventory(W) + qdel(H) + +/datum/species/shadekin_yw/get_bodytype() + return SPECIES_SHADEKIN + +/datum/species/shadekin_yw/get_random_name() + return "shadekin" + +///datum/species/shadekin_yw/handle_environment_special(var/mob/living/carbon/human/H) +// handle_shade(H) + +/datum/species/shadekin_yw/can_breathe_water() + return TRUE //they dont quite breathe +/* +/datum/species/shadekin/add_inherent_verbs(var/mob/living/carbon/human/H) + ..() + add_shadekin_abilities(H) + +/datum/species/shadekin/proc/add_shadekin_abilities(var/mob/living/carbon/human/H) + if(!H.ability_master || !istype(H.ability_master, /obj/screen/movable/ability_master/shadekin)) + H.ability_master = null + H.ability_master = new /obj/screen/movable/ability_master/shadekin(H) + for(var/datum/power/shadekin/P in shadekin_ability_datums) + if(!(P.verbpath in H.verbs)) + H.verbs += P.verbpath + H.ability_master.add_shadekin_ability( + object_given = H, + verb_given = P.verbpath, + name_given = P.name, + ability_icon_given = P.ability_icon_state, + arguments = list() + +/datum/species/shadekin/proc/handle_shade(var/mob/living/carbon/human/H) + //Shifted kin don't gain/lose energy (and save time if we're at the cap) + var/darkness = 1 + var/dark_gains = 0 + + var/turf/T = get_turf(H) + if(!T) + dark_gains = 0 + return + + var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 + darkness = 1-brightness //Invert + + if(H.ability_flags & AB_PHASE_SHIFTED) + dark_gains = 0 + else + //Heal (very) slowly in good darkness + if(darkness >= 0.75) + H.adjustFireLoss(-0.05) + H.adjustBruteLoss(-0.05) + H.adjustToxLoss(-0.05) + dark_gains = 0.75 + else + dark_gains = 0.25 + + set_energy(H, get_energy(H) + dark_gains) + + //Update huds + update_shadekin_hud(H) + +/datum/species/shadekin/proc/get_energy(var/mob/living/carbon/human/H) + var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] + + if(!istype(shade_organ)) + return 0 + + return shade_organ.dark_energy + +/datum/species/shadekin/proc/get_max_energy(var/mob/living/carbon/human/H) + var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] + + if(!istype(shade_organ)) + return 0 + + return shade_organ.max_dark_energy + +/datum/species/shadekin/proc/set_energy(var/mob/living/carbon/human/H, var/new_energy) + var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] + + if(!istype(shade_organ)) + return + + shade_organ.dark_energy = CLAMP(new_energy, 0, get_max_energy(H)) + +/datum/species/shadekin/proc/set_max_energy(var/mob/living/carbon/human/H, var/new_max_energy) + var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] + + if(!istype(shade_organ)) + return 0 + + shade_organ.max_dark_energy = new_max_energy + +/datum/species/shadekin/proc/check_infinite_energy(var/mob/living/carbon/human/H) + var/obj/item/organ/internal/brain/shadekin/shade_organ = H.internal_organs_by_name[O_BRAIN] + + if(!istype(shade_organ)) + return 0 + + return shade_organ.dark_energy_infinite + +/datum/species/shadekin/proc/update_shadekin_hud(var/mob/living/carbon/human/H) + var/turf/T = get_turf(H) + if(!T) + return + if(H.shadekin_energy_display) + H.shadekin_energy_display.invisibility = 0 + switch(get_energy(H)) + if(80 to INFINITY) + H.shadekin_energy_display.icon_state = "energy0" + if(60 to 80) + H.shadekin_energy_display.icon_state = "energy1" + if(40 to 60) + H.shadekin_energy_display.icon_state = "energy2" + if(20 to 40) + H.shadekin_energy_display.icon_state = "energy3" + if(0 to 20) + H.shadekin_energy_display.icon_state = "energy4" + if(H.shadekin_dark_display) + H.shadekin_dark_display.invisibility = 0 + var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0 + var/darkness = 1-brightness //Invert + switch(darkness) + if(0.80 to 1.00) + H.shadekin_dark_display.icon_state = "dark2" + if(0.60 to 0.80) + H.shadekin_dark_display.icon_state = "dark1" + if(0.40 to 0.60) + H.shadekin_dark_display.icon_state = "dark" + if(0.20 to 0.40) + H.shadekin_dark_display.icon_state = "dark-1" + if(0.00 to 0.20) + H.shadekin_dark_display.icon_state = "dark-2" + return +*/ \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 2c316175db..6e31d3ad78 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -8,7 +8,7 @@ //var/icon_add = 'icons/mob/human_face.dmi' //Already defined in sprite_accessories.dm line 49. var/color_blend_mode = ICON_MULTIPLY - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN) //This lets all races use the default hairstyles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) //This lets all races use the default hairstyles. astolfo name = "Astolfo" @@ -481,7 +481,7 @@ icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "shadekin_short" - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) gender = NEUTER shadekin_hair_poofy @@ -489,7 +489,7 @@ icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "shadekin_poofy" - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) gender = NEUTER shadekin_hair_long @@ -497,7 +497,7 @@ icon = 'icons/mob/human_face_vr.dmi' icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "shadekin_long" - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) gender = NEUTER shadekin_hair_rivyr @@ -506,7 +506,7 @@ icon_add = 'icons/mob/human_face_vr_add.dmi' icon_state = "shadekin_rivyr" ckeys_allowed = list("verysoft") - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) gender = NEUTER /datum/sprite_accessory/facial_hair @@ -1096,7 +1096,7 @@ name = "Heterochromia" icon_state = "heterochromia" body_parts = list(BP_HEAD) - species_allowed = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN) //This lets all races use the default hairstyles. + species_allowed = list(SPECIES_HUMAN, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_ZORREN_FLAT, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) //This lets all races use the default hairstyles. werewolf_nose name = "Werewolf nose" @@ -1135,4 +1135,4 @@ icon_state = "shadekin-snoot" color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) - species_allowed = list(SPECIES_SHADEKIN) \ No newline at end of file + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) \ No newline at end of file diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 1f82272c2a..f58609602c 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -167,7 +167,7 @@ clip_mask_icon = null clip_mask_state = null apply_restrictions = TRUE - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) /datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c name = "Shadekin Tail dual-color (Shadekin)" diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index e3db39ec3c..7d12902d90 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -39,7 +39,7 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY apply_restrictions = TRUE - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) // Ears avaliable to anyone @@ -692,7 +692,7 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY apply_restrictions = TRUE - species_allowed = list(SPECIES_SHADEKIN) + species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_YW) // Everyone tails diff --git a/vorestation.dme b/vorestation.dme index eee0f30c60..1376a9fde2 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -60,6 +60,7 @@ #include "code\__defines\misc_vr.dm" #include "code\__defines\mobs.dm" #include "code\__defines\mobs_vr.dm" +#include "code\__defines\mobs_yw.dm" #include "code\__defines\nifsoft.dm" #include "code\__defines\objects.dm" #include "code\__defines\planets.dm" @@ -2321,6 +2322,7 @@ #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin.dm" #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_abilities.dm" #include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_hud.dm" +#include "code\modules\mob\living\carbon\human\species\shadekin\shadekin_yw.dm" #include "code\modules\mob\living\carbon\human\species\station\alraune.dm" #include "code\modules\mob\living\carbon\human\species\station\blank_vr.dm" #include "code\modules\mob\living\carbon\human\species\station\golem.dm"