Files
CHOMPStation2/code/modules/mob/living/carbon/human/species/station/station.dm
CHOMPStation2StaffMirrorBot 667e08ee0a [MIRROR] Kitchen Sink PR (#10745)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-04-26 19:16:57 +02:00

2053 lines
79 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/datum/species/human
name = SPECIES_HUMAN
name_plural = "Humans"
icobase = 'icons/mob/human_races/r_human_vr.dmi'
deform = 'icons/mob/human_races/r_def_human_vr.dmi'
primitive_form = SPECIES_MONKEY
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)
blurb = "Humanity originated in the Sol system, and over the last three centuries has spread \
colonies across a wide swathe of space. They hold a wide range of forms and creeds.<br/><br/> \
While the central Sol government maintains control of its far-flung people, powerful corporate \
interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
worlds tumultous at best."
wikilink="https://wiki.vore-station.net/Human"
catalogue_data = list(/datum/category_item/catalogue/fauna/humans)
num_alternate_languages = 3
species_language = LANGUAGE_SOL_COMMON
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_TERMINUS)
name_language = null // Use the first-name last-name generator rather than a language scrambler
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
min_age = 18
max_age = 130
genders = list(MALE, FEMALE, PLURAL, NEUTER)
economic_modifier = 10
health_hud_intensity = 1.5
base_color = "#EECEB3"
color_mult = 1
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
has_organ = list(
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
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,
O_APPENDIX = /obj/item/organ/internal/appendix,
O_SPLEEN = /obj/item/organ/internal/spleen,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
species_sounds = "Human Male"
gender_specific_species_sounds = TRUE
species_sounds_male = "Human Male"
species_sounds_female = "Human Female"
inherent_verbs = list(
/mob/living/carbon/human/proc/tie_hair)
/datum/species/human/get_bodytype(var/mob/living/carbon/human/H)
return SPECIES_HUMAN
/datum/species/human/vatgrown
spawn_flags = SPECIES_IS_RESTRICTED
/datum/species/unathi
name = SPECIES_UNATHI
name_plural = "Unathi"
icobase = 'icons/mob/human_races/r_lizard_vr.dmi'
deform = 'icons/mob/human_races/r_def_lizard_vr.dmi'
tail_animation = 'icons/mob/species/unathi/tail_vr.dmi'
tail = "sogtail"
vore_belly_default_variant = "L"
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
primitive_form = SPECIES_MONKEY_UNATHI
darksight = 3
ambiguous_genders = TRUE
slowdown = 0.5
total_health = 125
brute_mod = 0.85
burn_mod = 0.85
metabolic_rate = 0.85
item_slowdown_mod = 0.25
mob_size = MOB_MEDIUM
blood_volume = 840
bloodloss_rate = 0.75
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_UNATHI)
name_language = LANGUAGE_UNATHI
species_language = LANGUAGE_UNATHI
health_hud_intensity = 2.5
chem_strength_alcohol = 1.25
throwforce_absorb_threshold = 10
digi_allowed = TRUE
genders = list(MALE, FEMALE, PLURAL, NEUTER)
min_age = 18
max_age = 260
economic_modifier = 10
species_sounds = "Lizard" // Species sounds
pain_verb_1p = list("hiss", "growl")
pain_verb_3p = list("hisses", "growls")
blurb = "Heavily reptilian in appearance, the Unathi hail from the Uueoa-Esa system, roughly translated as 'Burning Mother'. \
Their home planet, Moghes, is an arid climate with hot rocky plains and deserts, and a temperate band of swamps and savannas with \
massive saltwater lakes being the closest equivalent to oceans. This environment bred a very hardy people who value ideals of honesty, \
virtue, proficiency and bravery above all else, frequently even one's own life. These same values lend them culturally to imperialistic \
politics, as well as often being viewed as haughty and arrogant by other interstellar species.<br><br>\
On the stage of the interstellar political realm the Unathi are noteworthy contenders, the Moghes Hegemony possesses vast technological and \
material prowess when compared to human contemporaries such as the Sol-Procyon Commonwealth or Ares Confederation. The Hegemony War nearly one \
hundred years ago is a prime example of this, having engaged in brutal warfare that ultimately fell to a stalemate between all involved parties. \
Nowadays relations remain cool and somewhat tense, although this does not prevent individual Unathi from finding reasonable career success within Human space."
catalogue_data = list(/datum/category_item/catalogue/fauna/unathi)
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
cold_level_3 = 130 //Default 120
breath_cold_level_1 = 260 //Default 240 - Lower is better
breath_cold_level_2 = 200 //Default 180
breath_cold_level_3 = 120 //Default 100
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
breath_heat_level_1 = 450 //Default 380 - Higher is better
breath_heat_level_2 = 530 //Default 450
breath_heat_level_3 = 1400 //Default 1250
minimum_breath_pressure = 18 //Bigger, means they need more air
body_temperature = T20C
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#34AF10"
blood_color = "#b3cbc3"
base_color = "#066000"
color_mult = 1
reagent_tag = IS_UNATHI
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest/unathi),
BP_GROIN = list("path" = /obj/item/organ/external/groin/unathi),
BP_HEAD = list("path" = /obj/item/organ/external/head/unathi),
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)
)
//No kidneys or appendix
has_organ = list(
O_HEART = /obj/item/organ/internal/heart/unathi,
O_LUNGS = /obj/item/organ/internal/lungs/unathi,
O_LIVER = /obj/item/organ/internal/liver/unathi,
O_BRAIN = /obj/item/organ/internal/brain/unathi,
O_EYES = /obj/item/organ/internal/eyes/unathi,
O_STOMACH = /obj/item/organ/internal/stomach/unathi,
O_INTESTINE = /obj/item/organ/internal/intestine/unathi
)
heat_discomfort_level = 320 //VOREStation Edit - 46c (higher than normal humans) Don't spam red text if you're slightly warm.
heat_discomfort_strings = list(
"You feel soothingly warm.",
"You feel the heat sink into your bones.",
"You feel warm enough to take a nap."
)
cold_discomfort_level = 288.15 //VOREStation Edit - 15c Give a little bit of wiggle room here come on.
cold_discomfort_strings = list(
"You feel chilly.",
"You feel sluggish and cold.",
"Your scales bristle against the cold."
)
default_emotes = list(
/decl/emote/human/swish,
/decl/emote/human/wag,
/decl/emote/human/sway,
/decl/emote/human/qwag,
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway
)
footstep = FOOTSTEP_MOB_CLAW
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
wikilink="https://wiki.vore-station.net/Unathi"
/datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
/datum/species/tajaran
name = SPECIES_TAJARAN
name_plural = "Tajaran"
icobase = 'icons/mob/human_races/r_tajaran_vr.dmi'
deform = 'icons/mob/human_races/r_def_tajaran_vr.dmi'
tail = "tajtail"
tail_animation = 'icons/mob/species/tajaran/tail_vr.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
darksight = 8
slowdown = -0.5
snow_movement = -1 //Ignores half of light snow
brute_mod = 1.15
burn_mod = 1.15
flash_mod = 1.1
metabolic_rate = 1.1
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SIIK, LANGUAGE_AKHANI, LANGUAGE_ALAI)
name_language = LANGUAGE_SIIK
species_language = LANGUAGE_SIIK
health_hud_intensity = 2.5
chem_strength_alcohol = 0.75
digi_allowed = TRUE
agility = 90
can_climb = TRUE
climbing_delay = 1.00 //Cats are good climbers.
min_age = 18
max_age = 80
economic_modifier = 10
species_sounds = "Feline"
pain_verb_1p = list("hiss", "growl", "yowl")
pain_verb_3p = list("hisses", "growls", "yowls")
blurb = "The Tajaran are a mammalian species resembling roughly felines, hailing from Meralar in the Rarkajar system. \
While reaching to the stars independently from outside influences, the humans engaged them in peaceful trade contact \
and have accelerated the fledgling culture into the interstellar age. Their history is full of war and highly fractious \
governments, something that permeates even to today's times. They prefer colder, tundra-like climates, much like their \
home worlds and speak a variety of languages, especially Siik and Akhani."
wikilink="https://wiki.vore-station.net/Tajaran"
catalogue_data = list(/datum/category_item/catalogue/fauna/tajaran)
body_temperature = 280.15 //Even more cold resistant, even more flammable
cold_level_1 = 200 //Default 260
cold_level_2 = 140 //Default 200
cold_level_3 = 80 //Default 120
breath_cold_level_1 = 180 //Default 240 - Lower is better
breath_cold_level_2 = 100 //Default 180
breath_cold_level_3 = 60 //Default 100
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 800 //Default 1000
breath_heat_level_1 = 360 //Default 380 - Higher is better
breath_heat_level_2 = 430 //Default 450
breath_heat_level_3 = 1000 //Default 1250
primitive_form = SPECIES_MONKEY_TAJ
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
flesh_color = "#AFA59E"
base_color = "#333333"
color_mult = 1
reagent_tag = IS_TAJARA
allergens = null
climb_mult = 0.75
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
heat_discomfort_level = 295 //Prevents heat discomfort spam at 20c
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
cold_discomfort_level = 215
has_organ = list( //No appendix.
O_HEART = /obj/item/organ/internal/heart/tajaran,
O_LUNGS = /obj/item/organ/internal/lungs/tajaran,
O_VOICE = /obj/item/organ/internal/voicebox,
O_LIVER = /obj/item/organ/internal/liver/tajaran,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes/tajaran,
O_STOMACH = /obj/item/organ/internal/stomach/tajaran,
O_INTESTINE = /obj/item/organ/internal/intestine
)
default_emotes = list(
//VOREStation Add
/decl/emote/audible/gnarl,
/decl/emote/audible/purr,
/decl/emote/audible/purrlong,
//VOREStation Add End
/decl/emote/human/swish,
/decl/emote/human/wag,
/decl/emote/human/sway,
/decl/emote/human/qwag,
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway
)
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds, /mob/living/carbon/human/proc/tie_hair)
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
/datum/species/skrell
name = SPECIES_SKRELL
name_plural = "Skrell"
icobase = 'icons/mob/human_races/r_skrell_vr.dmi'
deform = 'icons/mob/human_races/r_def_skrell_vr.dmi'
primitive_form = SPECIES_MONKEY_SKRELL
unarmed_types = list(/datum/unarmed_attack/punch)
blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
the royals' or 'Light of the Crown'.<br/><br/>Skrell are a highly advanced and logical race who live under the rule \
of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
the secrets of their empire to their allies."
wikilink="https://wiki.vore-station.net/Skrell"
catalogue_data = list(/datum/category_item/catalogue/fauna/skrell)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SKRELLIAN, LANGUAGE_SCHECHI)
name_language = LANGUAGE_SKRELLIAN
species_language = LANGUAGE_SKRELLIAN
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
health_hud_intensity = 2
chem_strength_alcohol = 0.2
water_movement = -3
min_age = 18
max_age = 130
economic_modifier = 10
darksight = 4
flash_mod = 1.2
chemOD_mod = 0.9
blood_reagents = REAGENT_ID_COPPER
bloodloss_rate = 1.5
ambiguous_genders = TRUE
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
flesh_color = "#8CD7A3"
blood_color = "#0081CD"
base_color = "#006666"
color_mult = 1
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
cold_level_3 = 130 //Default 120
breath_cold_level_1 = 250 //Default 240 - Lower is better
breath_cold_level_2 = 190 //Default 180
breath_cold_level_3 = 120 //Default 100
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
breath_heat_level_1 = 400 //Default 380 - Higher is better
breath_heat_level_2 = 500 //Default 450
breath_heat_level_3 = 1350 //Default 1250
reagent_tag = null //I am going to just NUKE reagent_tag omfg...This is ridiculous
allergens = null
genders = list(MALE, FEMALE, PLURAL, NEUTER)
water_breather = TRUE
water_movement = -4 //Negates shallow. Halves deep.
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/skrell),
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)
)
has_organ = list(
O_HEART = /obj/item/organ/internal/heart/skrell,
O_LUNGS = /obj/item/organ/internal/lungs/skrell,
O_VOICE = /obj/item/organ/internal/voicebox/skrell,
O_LIVER = /obj/item/organ/internal/liver/skrell,
O_KIDNEYS = /obj/item/organ/internal/kidneys/skrell,
O_BRAIN = /obj/item/organ/internal/brain/skrell,
O_APPENDIX = /obj/item/organ/internal/appendix/skrell,
O_SPLEEN = /obj/item/organ/internal/spleen/skrell,
O_EYES = /obj/item/organ/internal/eyes/skrell,
O_STOMACH = /obj/item/organ/internal/stomach/skrell,
O_INTESTINE = /obj/item/organ/internal/intestine/skrell
)
default_emotes = list(
/decl/emote/audible/warble,
/decl/emote/audible/lwarble,
/decl/emote/audible/croon,
/decl/emote/audible/croak
)
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
/datum/species/skrell/can_breathe_water()
return TRUE
/datum/species/zaddat
name = SPECIES_ZADDAT
name_plural = "Zaddat"
icobase = 'icons/mob/human_races/r_zaddat.dmi'
deform = 'icons/mob/human_races/r_zaddat.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
brute_mod = 1.15
burn_mod = 1.15
toxins_mod = 1.5
flash_mod = 2
flash_burn = 15 //flashing a zaddat probably counts as police brutality
metabolic_rate = 0.7 //did u know if your ancestors starved ur body will actually start in starvation mode?
item_slowdown_mod = 0.30
taste_sensitivity = TASTE_SENSITIVE
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_ZADDAT, LANGUAGE_UNATHI)
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN) //limited vocal range; can talk Unathi and magical Galcom but not much else
name_language = LANGUAGE_ZADDAT
species_language = LANGUAGE_ZADDAT
health_hud_intensity = 2.5
throwforce_absorb_threshold = 5
minimum_breath_pressure = 20 //have fun with underpressures. any higher than this and they'll be even less suitible for life on the station
economic_modifier = 3
min_age = 18
max_age = 90
// male_scream_sound = null //CHOMPedit
// female_scream_sound = null //CHOMPedit
blurb = "The Zaddat are an Unathi client race only recently introduced to SolGov space. Having evolved on \
the high-pressure and post-apocalyptic world of Xohok, Zaddat require an environmental suit called a Shroud \
to survive in usual planetary and station atmospheres. Despite these restrictions, worsening conditions on \
Xohok and the blessing of the Moghes Hegemony have lead the Zaddat to enter human space in search of work \
and living space."
catalogue_data = list(/datum/category_item/catalogue/fauna/zaddat)
hazard_high_pressure = HAZARD_HIGH_PRESSURE + 500 // Dangerously high pressure.
warning_high_pressure = WARNING_HIGH_PRESSURE + 500 // High pressure warning.
warning_low_pressure = 300 // Low pressure warning.
hazard_low_pressure = 220 // Dangerously low pressure.
safe_pressure = 400
poison_type = GAS_N2 // technically it's a partial pressure thing but IDK if we can emulate that
ideal_air_type = /datum/gas_mixture/belly_air/zaddat
genders = list(MALE, FEMALE, PLURAL, NEUTER)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = null
flesh_color = "#AFA59E"
base_color = "#e2e4a6"
blood_color = "#FFCC00" //a gross sort of orange color
reagent_tag = IS_ZADDAT
heat_discomfort_strings = list(
"Your joints itch.",
"You feel uncomfortably warm.",
"Your carapace feels like a stove."
)
cold_discomfort_strings = list(
"You feel chilly.",
"You shiver suddenly.",
"Your antenna ache."
)
has_organ = list( //No appendix.
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
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,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE =/obj/item/organ/internal/intestine
)
default_emotes = list(
/decl/emote/audible/chirp
)
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
/datum/species/zaddat/equip_survival_gear(var/mob/living/carbon/human/H)
..()
if(H.wear_suit) //get rid of job labcoats so they don't stop us from equipping the Shroud
qdel(H.wear_suit) //if you know how to gently set it in like, their backpack or whatever, be my guest
if(H.wear_mask)
qdel(H.wear_mask)
if(H.head)
qdel(H.head)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/zaddat/(H), slot_wear_mask) // mask has to come first or Shroud helmet will get in the way
H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/void/zaddat/(H), slot_wear_suit)
/datum/species/zaddat/handle_environment_special(var/mob/living/carbon/human/H)
if(H.inStasisNow())
return
var/damageable = H.get_damageable_organs()
var/covered = H.get_coverage()
var/light_amount = 0 //how much light there is in the place, affects damage
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = T.get_lumcount() * 5
for(var/K in damageable)
if(!(K in covered))
H.apply_damage(light_amount/4, BURN, K, 0, 0)
/datum/species/diona
name = SPECIES_DIONA
name_plural = "Dionaea"
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
language = LANGUAGE_ROOTLOCAL
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona)
//primitive_form = "Nymph"
slowdown = 5
snow_movement = -2 //Ignore light snow
water_movement = -4 //Ignore shallow water
rarity_value = 3
hud_type = /datum/hud_data/diona
siemens_coefficient = 0.3
show_ssd = "completely quiescent"
health_hud_intensity = 2.5
item_slowdown_mod = 0.1
chem_strength_alcohol = 10000 //a little hacky, maybe? but whatever. nobody plays diona anyway.
throwforce_absorb_threshold = 5
num_alternate_languages = 3
name_language = LANGUAGE_ROOTLOCAL
species_language = LANGUAGE_ROOTLOCAL
secondary_langs = list(LANGUAGE_ROOTGLOBAL)
assisted_langs = list(LANGUAGE_VOX) // Diona are weird, let's just assume they can use basically any language.
min_age = 18
max_age = 300
economic_modifier = 10
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
Minoris primary being ringed with a cloud of singing space-station-sized entities.<br/><br/>The Dionaea coexist peacefully with \
all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
water and other radiation."
wikilink="https://wiki.vore-station.net/Diona"
catalogue_data = list(/datum/category_item/catalogue/fauna/dionaea)
has_organ = list(
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STRATA = /obj/item/organ/internal/diona/strata,
O_BRAIN = /obj/item/organ/internal/brain/cephalon,
O_RESPONSE = /obj/item/organ/internal/diona/node,
O_GBLADDER = /obj/item/organ/internal/diona/bladder,
O_POLYP = /obj/item/organ/internal/diona/polyp,
O_ANCHOR = /obj/item/organ/internal/diona/ligament
)
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/diona/chest),
BP_GROIN = list("path" = /obj/item/organ/external/diona/groin),
BP_HEAD = list("path" = /obj/item/organ/external/head/no_eyes/diona),
BP_L_ARM = list("path" = /obj/item/organ/external/diona/arm),
BP_R_ARM = list("path" = /obj/item/organ/external/diona/arm/right),
BP_L_LEG = list("path" = /obj/item/organ/external/diona/leg),
BP_R_LEG = list("path" = /obj/item/organ/external/diona/leg/right),
BP_L_HAND = list("path" = /obj/item/organ/external/diona/hand),
BP_R_HAND = list("path" = /obj/item/organ/external/diona/hand/right),
BP_L_FOOT = list("path" = /obj/item/organ/external/diona/foot),
BP_R_FOOT = list("path" = /obj/item/organ/external/diona/foot/right)
)
inherent_verbs = list(
/mob/living/carbon/human/proc/diona_split_nymph,
/mob/living/carbon/human/proc/regenerate,
/mob/proc/adjust_hive_range //VOREStation Add
)
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 2000
heat_level_2 = 3000
heat_level_3 = 4000
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
flags = NO_DNA | NO_SLEEVE | IS_PLANT | NO_PAIN | NO_SLIP | NO_MINOR_CUT | NO_DEFIB
spawn_flags = SPECIES_CAN_JOIN
blood_color = "#004400"
flesh_color = "#907E4A"
reagent_tag = IS_DIONA
genders = list(MALE, FEMALE, PLURAL, NEUTER)
default_emotes = list(
/decl/emote/audible/chirp,
/decl/emote/audible/multichirp
)
/datum/species/diona/can_understand(var/mob/other)
if(istype(other, /mob/living/carbon/alien/diona))
return TRUE
return FALSE
/datum/species/diona/equip_survival_gear(var/mob/living/carbon/human/H)
if(H.backbag == 1)
H.equip_to_slot_or_del(new /obj/item/flashlight/flare(H), slot_r_hand)
else
H.equip_to_slot_or_del(new /obj/item/flashlight/flare(H.back), slot_in_backpack)
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
var/mob/living/carbon/alien/diona/S = new(get_turf(H))
if(H.mind)
H.mind.transfer_to(S)
if(H.isSynthetic())
H.visible_message(span_danger("\The [H] collapses into parts, revealing a solitary diona nymph at the core."))
H.species = GLOB.all_species[SPECIES_HUMAN] // This is hard-set to default the body to a normal FBP, without changing anything.
for(var/obj/item/organ/internal/diona/Org in H.internal_organs) // Remove Nymph organs.
qdel(Org)
// Purge the diona verbs.
remove_verb(H, /mob/living/carbon/human/proc/diona_split_nymph)
remove_verb(H, /mob/living/carbon/human/proc/regenerate)
return
for(var/mob/living/carbon/alien/diona/D in H.contents)
if(D.client)
D.forceMove(get_turf(H))
else
qdel(D)
H.visible_message(span_danger("\The [H] splits apart with a wet slithering noise!"))
/datum/species/diona/handle_environment_special(var/mob/living/carbon/human/H)
if(H.inStasisNow())
return
var/obj/item/organ/internal/diona/node/light_organ = locate() in H.internal_organs
if(light_organ && !light_organ.is_broken())
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = T.get_lumcount() * 10
// Don't overfeed, just make them full without going over.
if((H.nutrition + light_amount) < initial(H.nutrition))
H.adjust_nutrition(light_amount)
H.shock_stage -= light_amount
if(light_amount >= 3) //if there's enough light, heal
H.adjustBruteLoss(-(round(light_amount/2)))
H.adjustFireLoss(-(round(light_amount/2)))
H.adjustToxLoss(-(light_amount))
H.adjustOxyLoss(-(light_amount))
//TODO: heal wounds, heal broken limbs.
else if(H.nutrition < 200)
H.take_overall_damage(2,0)
//traumatic_shock is updated every tick, incrementing that is pointless - shock_stage is the counter.
//Not that it matters much for diona, who have NO_PAIN.
H.shock_stage++
/datum/species/sergal
name = SPECIES_SERGAL
name_plural = "Sergals"
icobase = 'icons/mob/human_races/r_sergal.dmi'
deform = 'icons/mob/human_races/r_def_sergal.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
//darksight = 8
//slowdown = -0.5
//brute_mod = 1.15
//burn_mod = 1.15
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SAGARU)
name_language = LANGUAGE_SAGARU
species_language = LANGUAGE_SAGARU
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 110
species_sounds = "Canine"
blurb = "There are two subspecies of Sergal; Southern and Northern. Northern sergals are a highly aggressive race \
that lives in the plains and tundra of their homeworld. They are characterized by long, fluffy fur bodies with cold colors; \
usually with white abdomens, somewhat short ears, and thick faces. Southern sergals are much more docile and live in the \
Gold Ring City and are scattered around the outskirts in rural areas and small towns. They usually have short, brown or yellow \
(or other 'earthy' colors) fur, long ears, and a long, thin face. They are smaller than their Northern relatives. Both have strong \
racial tensions which has resulted in more than a number of wars and outright attempts at genocide. Sergals have an incredibly long \
lifespan, but due to their lust for violence, only a handful have ever survived beyond the age of 80, such as the infamous and \
legendary General Rain Silves who is claimed to have lived to 5000."
wikilink="https://wiki.vore-station.net/Backstory#Sergal"
catalogue_data = list(/datum/category_item/catalogue/fauna/sergal)
primitive_form = SPECIES_MONKEY_SERGAL
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#777777"
genders = list(MALE, FEMALE, PLURAL, NEUTER)
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
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/sergal),
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)
)
/datum/species/akula
name = SPECIES_AKULA
name_plural = "Akula"
icobase = 'icons/mob/human_races/r_akula.dmi'
deform = 'icons/mob/human_races/r_def_akula.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
//darksight = 8
//slowdown = -0.5
//brute_mod = 1.15
//burn_mod = 1.15
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SPACER)
name_language = LANGUAGE_SPACER
species_language = LANGUAGE_SPACER
color_mult = 1
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
min_age = 18
max_age = 80
digi_allowed = TRUE
blurb = "The Akula are a species of amphibious humanoids like the Skrell, but have an appearance very similar to that of a shark. \
They were first discovered as a primitive race of underwater dwelling tribal creatures by the Skrell. At first they were not believed \
to be noteworthy, but the Akula proved to be such swift and clever learners that the Skrell reclassified them as sentients. Allegedly, \
the Akula were also the first sentient life that the Skrell had ever encountered beside themselves, and thus the two species became swift \
allies over the next few hundred years. With the help of Skrellean technology, the Akula had their genome modified to be capable of \
surviving in open air for long periods of time. However, Akula even today still require a high humidity environment to avoid drying out \
after a few days, which would make life on an arid world like Virgo-Prime nearly impossible if it were not for Skrellean technology to aid them."
wikilink="https://wiki.vore-station.net/Backstory#Akula"
catalogue_data = list(/datum/category_item/catalogue/fauna/akula)
primitive_form = SPECIES_MONKEY_AKULA
genders = list(MALE, FEMALE, PLURAL, NEUTER)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
water_breather = TRUE
water_movement = -4 //Negates shallow. Halves deep.
swim_mult = 0.5
flesh_color = "#AFA59E"
base_color = "#777777"
blood_color = "#1D2CBF"
/datum/species/nevrean
name = SPECIES_NEVREAN
name_plural = "Nevreans"
icobase = 'icons/mob/human_races/r_nevrean.dmi'
deform = 'icons/mob/human_races/r_def_nevrean.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
//darksight = 8
//slowdown = -0.5
//brute_mod = 1.15
//burn_mod = 1.15
soft_landing = TRUE
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_BIRDSONG)
name_language = LANGUAGE_BIRDSONG
species_language = LANGUAGE_BIRDSONG
color_mult = 1
inherent_verbs = list(/mob/living/proc/flying_toggle,
/mob/living/proc/flying_vore_toggle,
/mob/living/proc/start_wings_hovering,
/mob/living/carbon/human/proc/tie_hair)
min_age = 18
max_age = 80
digi_allowed = TRUE
blurb = "Nevreans are a race of avian and dinosaur-like creatures living on Tal. They belong to a group of races that hails from Eltus, \
in the Vilous system. Unlike sergals whom they share a star system with, their species is a very peaceful one. They possess remarkable \
intelligence and very skillful hands that are put use for constructing precision instruments, but tire-out fast when repeatedly working \
over and over again. Consequently, they struggle to make copies of same things. Both genders have a voice that echoes a lot. Their natural \
tone oscillates between tenor and soprano. They are excessively noisy when they quarrel in their native language."
wikilink="https://wiki.vore-station.net/Backstory#Nevrean"
catalogue_data = list(/datum/category_item/catalogue/fauna/nevrean)
primitive_form = SPECIES_MONKEY_NEVREAN
genders = list(MALE, FEMALE, PLURAL, NEUTER)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#333333"
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
/datum/species/hi_zoxxen
name = SPECIES_ZORREN_HIGH
name_plural = "Zorren"
icobase = 'icons/mob/human_races/r_fox_vr.dmi'
deform = 'icons/mob/human_races/r_def_fox.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_TERMINUS)
name_language = LANGUAGE_TERMINUS
species_language = LANGUAGE_TERMINUS
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,
/mob/living/proc/shred_limb,
/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
blurb = "The fennec-like, blue-blooded Zorren are native to Virgo 4/Menhir and are descendants of a precursor species \
that is thought to be responsible for the near-collapse of the biosphere of the planet. \
With societies organised around hierarchal caste systems (such as the Royal Zorren) or freedom and strength (such as the Free Tribe Zorren), \
they now slowly recover from their previous hubris and aim to revitalize their planet. While many Zorren live in pre-industrial conditions by necessity, \
they are an interstellar species known for their pride and stubbornness and doggedly hold out on a Deathworld of their own creation. \
As local species, they hold moderate sway on local corporations and are hired by NT and other companies, although they find \"Outlander\" culture deeply weird."
wikilink="https://wiki.vore-station.net/Zorren"
catalogue_data = list(/datum/category_item/catalogue/fauna/zorren)
//primitive_form = "" //We don't have fox-monkey sprites.
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#333333"
blood_color = "#240bc4"
blood_reagents = REAGENT_ID_COPPER
reagent_tag = IS_ZORREN
color_mult = 1
genders = list(MALE, FEMALE, PLURAL, NEUTER)
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
/datum/species/vulpkanin
name = SPECIES_VULPKANIN
name_plural = "Vulpkanin"
blurb = "Vulpkanin are a species of sapient canine bipeds, who are the descendants of a lost colony during the waning days of a Precursor species, \
from which their distant cousins, the Zorren, also originate from. Independent and iconoclast, they have abandoned the ideals of their forefathers \
largely and prefer to look outwards as explorers and scientists to forge their own identity. They speak a guttural language known as 'Canilunzt' \
which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
deform = 'icons/mob/human_races/r_vulpkanin.dmi'
secondary_langs = list(LANGUAGE_CANILUNZT)
name_language = LANGUAGE_CANILUNZT
species_language = LANGUAGE_CANILUNZT
primitive_form = SPECIES_MONKEY_VULPKANIN
tail = "vulptail"
tail_animation = 'icons/mob/species/vulpkanin/tail.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
darksight = 5
num_alternate_languages = 3
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,
/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
wikilink="https://wiki.vore-station.net/Backstory#Vulpkanin"
catalogue_data = list(/datum/category_item/catalogue/fauna/vulpkanin)
//Furry fox-like animals shouldn't start freezing at 5 degrees celsius.
//Minor cold is resisted, but not severe frost.
cold_discomfort_level = 263 //Not as good at surviving the frost as tajara, but still better than humans.
cold_level_1 = 243 //Default 260, other values remain at default. Starts taking damage at -30 celsius. Default tier 2 is -70 and tier 3 is -150
breath_cold_level_1 = 220 // Default 240, lower is better.
//While foxes can survive in deserts, that's handled by zorren. It's a good contrast that our vulp find heat a little uncomfortable.
heat_discomfort_level = 295 //Just above standard 20 C to avoid heat message spam, same as Taj
heat_level_1 = 345 //Default 360
heat_level_2 = 390 //Default 400
heat_level_3 = 900 //Default 1000
breath_heat_level_1 = 370 //Default 380 - Higher is better
breath_heat_level_2 = 445 //Default 450
breath_heat_level_3 = 1125 //Default 1250
primitive_form = SPECIES_MONKEY_VULPKANIN
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
flesh_color = "#966464"
base_color = "#B43214"
min_age = 18
max_age = 80
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
/datum/species/skrell
spawn_flags = SPECIES_CAN_JOIN
icobase = 'icons/mob/human_races/r_skrell_vr.dmi'
deform = 'icons/mob/human_races/r_def_skrell_vr.dmi'
color_mult = 1
min_age = 18
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/carbon/human/proc/water_stealth, /mob/living/carbon/human/proc/underwater_devour)
reagent_tag = null
allergens = null
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
genders = list(MALE, FEMALE, PLURAL, NEUTER)
wikilink="https://wiki.vore-station.net/Skrell"
water_breather = TRUE
water_movement = -4 //Negates shallow. Halves deep.
/datum/species/zaddat/equip_survival_gear(var/mob/living/carbon/human/H)
.=..()
var/obj/item/storage/toolbox/lunchbox/survival/zaddat/L = new(get_turf(H))
if(H.backbag == 1)
H.equip_to_slot_or_del(L, slot_r_hand)
else
H.equip_to_slot_or_del(L, slot_in_backpack)
/datum/species/human/vatgrown
spawn_flags = SPECIES_IS_RESTRICTED
/datum/species/harpy
name = SPECIES_RAPALA
name_plural = "Rapalans"
icobase = 'icons/mob/human_races/r_harpy_vr.dmi'
deform = 'icons/mob/human_races/r_def_harpy_vr.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_BIRDSONG, LANGUAGE_UNATHI)
species_language = LANGUAGE_UNATHI
name_language = null
color_mult = 1
genders = list(MALE, FEMALE, PLURAL, NEUTER)
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/flying_vore_toggle,/mob/living/proc/start_wings_hovering,/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
soft_landing = TRUE
base_color = "#EECEB3"
blurb = "An Avian species, coming from a distant planet, the Rapalas are the very proud race.\
Sol researchers have commented on them having a very close resemblance to the mythical race called 'Harpies',\
who are known for having massive winged arms and talons as feet. They've been clocked at speeds of over 35 miler per hour chasing the planet's many fish-like fauna.\
The Rapalan's home-world 'Verita' is a strangely habitable gas giant, while no physical earth exists, there are fertile floating islands orbiting around the planet from past asteroid activity."
wikilink="https://wiki.vore-station.net/Backstory#Rapala"
catalogue_data = list(/datum/category_item/catalogue/fauna/rapala)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
heat_discomfort_strings = list(
"Your feathers prickle in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
/datum/species/teshari
name = SPECIES_TESHARI
name_plural = "Tesharii"
blurb = "A race of feathered raptors who developed alongside the Skrell, inhabiting \
the polar tundral regions outside of Skrell territory. Extremely fragile, they developed \
hunting skills that emphasized taking out their prey without themselves getting hit. They \
are only recently becoming known on human stations after reaching space with Skrell assistance."
wikilink="https://wiki.chompstation13.net/index.php?title=Teshari" //CHOMPedit: link to our wiki
catalogue_data = list(/datum/category_item/catalogue/fauna/teshari)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_SCHECHI, LANGUAGE_SKRELLIAN)
name_language = LANGUAGE_SCHECHI
species_language = LANGUAGE_SCHECHI
min_age = 18
max_age = 45
economic_modifier = 6
health_hud_intensity = 3
species_sounds = "Teshari"
center_offset = 0
blood_color = "#D514F7"
flesh_color = "#5F7BB0"
base_color = "#001144"
color_mult = 1
tail = "seromitail"
icobase_tail = 1
reagent_tag = IS_TESHARI
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
icobase = 'icons/mob/human_races/r_teshari_vr.dmi'
deform = 'icons/mob/human_races/r_teshari_vr.dmi'
damage_overlays = 'icons/mob/human_races/masks/dam_teshari.dmi'
damage_mask = 'icons/mob/human_races/masks/dam_mask_teshari.dmi'
blood_mask = 'icons/mob/human_races/masks/blood_teshari.dmi'
suit_storage_icon = 'icons/inventory/suit_store/mob_teshari.dmi'
vore_belly_default_variant = "T" //Teshari belly sprite
fire_icon_state = "generic" // Humanoid is too big for them and spriting a new one is really annoying.
slowdown = -1
snow_movement = -2 // Ignores light snow
item_slowdown_mod = 2 // Tiny birds don't like heavy things
total_health = 50
brute_mod = 1.35
burn_mod = 1.35
mob_size = MOB_MEDIUM
pass_flags = PASSTABLE
holder_type = /obj/item/holder/human
// short_sighted = 1
has_vibration_sense = TRUE
blood_volume = 400
hunger_factor = 0.2
soft_landing = TRUE
agility = 90
ambiguous_genders = TRUE
genders = list(MALE, FEMALE, PLURAL, NEUTER)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
body_temperature = 270
cold_level_1 = 180 //Default 260
cold_level_2 = 130 //Default 200
cold_level_3 = 70 //Default 120
breath_cold_level_1 = 180 //Default 240 - Lower is better
breath_cold_level_2 = 100 //Default 180
breath_cold_level_3 = 60 //Default 100
heat_level_1 = 330 //Default 360
heat_level_2 = 370 //Default 400
heat_level_3 = 600 //Default 1000
breath_heat_level_1 = 350 //Default 380 - Higher is better
breath_heat_level_2 = 400 //Default 450
breath_heat_level_3 = 800 //Default 1250
heat_discomfort_level = 295
heat_discomfort_strings = list(
"Your feathers prickle in the heat.",
"You feel uncomfortably warm.",
"Your hands and feet feel hot as your body tries to regulate heat",
)
cold_discomfort_level = 180
cold_discomfort_strings = list(
"You feel a bit chilly.",
"You fluff up your feathers against the cold.",
"You move your arms closer to your body to shield yourself from the cold.",
"You press your ears against your head to conserve heat",
"You start to feel the cold on your skin",
)
minimum_breath_pressure = 12 //Smaller, so needs less air
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/teshari),
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/teshari),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/teshari),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/teshari),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/teshari)
)
has_organ = list(
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
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,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
unarmed_types = list(
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp,
/datum/unarmed_attack/stomp/weak
)
inherent_verbs = list(
///mob/living/carbon/human/proc/sonar_ping,
/mob/living/proc/hide,
/mob/living/proc/toggle_pass_table
)
default_emotes = list(
/decl/emote/audible/teshsqueak,
/decl/emote/audible/teshchirp,
/decl/emote/audible/teshtrill
)
footstep = FOOTSTEP_MOB_TESHARI
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
..()
//if(!(H.client?.prefs?.shoe_hater)) //CHOMPStation Edit. Disables shoe_hater. Un-indents below line by 1.
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
/*
/datum/species/teshari/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary)
// Tesh can glide to save themselves from some falls. Basejumping bird
// without parachute, or falling bird without free wings, goes splat.
// Are we landing from orbit, or handcuffed/unconscious/tied to something?
if(planetary || !istype(H) || H.incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_DISABLED))
return ..()
// Are we landing on a turf? Not sure how this could not be the case, but let's be safe.
var/turf/landing = get_turf(hit_atom)
if(!istype(landing))
return ..()
if(H.buckled)
if(!silent)
to_chat(H, span_warning("You try to spread your wings to slow your fall, but \the [H.buckled] weighs you down!"))
return ..()
// Is there enough air to flap against?
var/datum/gas_mixture/environment = landing.return_air()
if(!environment || environment.return_pressure() < (ONE_ATMOSPHERE * 0.75))
if(!silent)
to_chat(H, span_warning("You spread your wings to slow your fall, but the air is too thin!"))
return ..()
// Are we wearing a space suit?
if(H.wear_suit)
for(var/blacklisted_type in flight_suit_blacklisted_types)
if(istype(H.wear_suit, blacklisted_type))
if(!silent)
to_chat(H, span_warning("You try to spread your wings to slow your fall, but \the [H.wear_suit] is in the way!"))
return ..()
// Do we have working wings?
for(var/bp in flight_bodyparts)
var/obj/item/organ/external/E = H.organs_by_name[bp]
if(!istype(E) || !E.is_usable() || E.is_broken() || E.is_stump())
if(!silent)
to_chat(H, span_warning("You try to spread your wings to slow your fall, but they won't hold your weight!"))
return ..()
// Handled!
if(!silent)
to_chat(H, span_notice("You catch the air in your wings and greatly slow your fall."))
landing.visible_message(span_infoplain(span_bold("\The [H]") + " glides down from above, landing safely."))
H.Stun(1)
playsound(H, "rustle", 25, 1)
return TRUE
*/
/datum/species/crew_shadekin
name = SPECIES_SHADEKIN_CREW
name_plural = "Black-Eyed 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 = "Very little is known about these creatures. They appear to be largely mammalian in appearance. \
Seemingly very rare to encounter, there have been widespread myths of these creatures the galaxy over, \
but next to no verifiable evidence to their existence. However, they have recently been more verifiably \
documented in the Virgo system, following a mining bombardment of Virgo 3. The crew of NSB Adephagia have \
taken to calling these creatures 'Shadekin', and the name has generally stuck and spread. " //TODO: Something more fitting for black-eyes
wikilink = "https://wiki.vore-station.net/Shadekin"
catalogue_data = list(/datum/category_item/catalogue/fauna/shadekin)
digi_allowed = TRUE
language = LANGUAGE_SHADEKIN
name_language = LANGUAGE_SHADEKIN
species_language = LANGUAGE_SHADEKIN
secondary_langs = list(LANGUAGE_SHADEKIN)
num_alternate_languages = 3
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
rarity_value = 5 //INTERDIMENSIONAL FLUFFERS
inherent_verbs = list(/mob/proc/adjust_hive_range)
siemens_coefficient = 0
darksight = 10
slowdown = 0.5
item_slowdown_mod = 1.5
total_health = 75
brute_mod = 1.25 // Frail
burn_mod = 1.25 // Furry
blood_volume = 500
hunger_factor = 0.2
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_DNA | NO_SLEEVE
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
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 // Applicable through traits.
speech_bubble_appearance = "ghost"
genders = list(MALE, FEMALE, PLURAL, NEUTER)
breath_type = null
poison_type = null
water_breather = TRUE //They do not quite breathe...
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_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,
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/crewkin),
BP_GROIN = list("path" = /obj/item/organ/external/groin/crewkin),
BP_HEAD = list("path" = /obj/item/organ/external/head/crewkin),
BP_L_ARM = list("path" = /obj/item/organ/external/arm/crewkin),
BP_R_ARM = list("path" = /obj/item/organ/external/arm/right/crewkin),
BP_L_LEG = list("path" = /obj/item/organ/external/leg/crewkin),
BP_R_LEG = list("path" = /obj/item/organ/external/leg/right/crewkin),
BP_L_HAND = list("path" = /obj/item/organ/external/hand/crewkin),
BP_R_HAND = list("path" = /obj/item/organ/external/hand/right/crewkin),
BP_L_FOOT = list("path" = /obj/item/organ/external/foot/crewkin),
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/crewkin)
)
/datum/species/crew_shadekin/get_bodytype()
return SPECIES_SHADEKIN
//These species are not really species but are just there for custom species selection
/datum/species/fl_zorren
name = SPECIES_FENNEC
name_plural = "Fennec"
icobase = 'icons/mob/human_races/r_fennec_vr.dmi'
deform = 'icons/mob/human_races/r_def_fennec.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_TERMINUS)
name_language = LANGUAGE_TERMINUS
species_language = LANGUAGE_TERMINUS
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,/mob/living/proc/shred_limb,/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
//primitive_form = "" //We don't have fennec-monkey sprites.
spawn_flags = SPECIES_IS_RESTRICTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
flesh_color = "#AFA59E"
base_color = "#333333"
blood_color = "#240bc4"
color_mult = 1
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
/datum/species/xenohybrid
name = SPECIES_XENOHYBRID
name_plural = "Xenomorphs"
icobase = 'icons/mob/human_races/r_xenomorph.dmi'
deform = 'icons/mob/human_races/r_def_xenomorph.dmi'
tail = "tail"
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
darksight = 4 //Better hunters in the dark.
hunger_factor = 0.1 //In exchange, they get hungry a tad faster.
num_alternate_languages = 3
digi_allowed = TRUE
min_age = 18
max_age = 80
blurb = "Xenomorphs hybrids are a mixture of xenomorph DNA and some other humanoid species. \
Xenomorph hyrids mostly have had had their natural aggression removed due to the gene modification process \
although there are some exceptions, such as when they are harmed. Most xenomorph hybrids are female, due to their natural xenomorph genes, \
but there are multiple exceptions. All xenomorph hybrids have had their ability to lay eggs containing facehuggers \
removed if they had the ability to, although hybrids that previously contained this ability is extremely rare."
// No wiki page for xenohybrids at present
//primitive_form = "" //None for these guys
spawn_flags = SPECIES_IS_RESTRICTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
blood_color = "#12ff12"
flesh_color = "#201730"
base_color = "#201730"
heat_discomfort_strings = list(
"Your chitin feels extremely warm.",
"You feel uncomfortably warm.",
"Your chitin feels hot."
)
/datum/species/altevian
name = SPECIES_ALTEVIAN
name_plural = "Altevians"
icobase = 'icons/mob/human_races/r_altevian.dmi'
deform = 'icons/mob/human_races/r_def_altevian.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_TAVAN)
species_language = LANGUAGE_TAVAN
name_language = null
color_mult = 1
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
digi_allowed = TRUE
min_age = 18
max_age = 80
blurb = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \
The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \
for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \
with a flagship as their place they would call home."
wikilink="https://wiki.vore-station.net/Altevian"
catalogue_data = list(/datum/category_item/catalogue/fauna/altevian)
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#777777"
genders = list(MALE, FEMALE, PLURAL, NEUTER)
burn_mod = 1.15
hunger_factor = 0.04
can_zero_g_move = TRUE
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
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),
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)
)
/////////////////////
/////SPIDER RACE/////
/////////////////////
/datum/species/spider //These actually look pretty damn spooky!
name = SPECIES_VASILISSAN
name_plural = "Vasilissans"
icobase = 'icons/mob/human_races/r_spider.dmi'
deform = 'icons/mob/human_races/r_def_spider.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
darksight = 8 //Can see completely in the dark. They are spiders, after all. Not that any of this matters because people will be using custom race.
slowdown = -0.15 //Small speedboost, as they've got a bunch of legs. Or something. I dunno.
brute_mod = 0.8 //20% brute damage reduction
burn_mod = 1.15 //15% burn damage increase. They're spiders. Aerosol can+lighter = dead spiders.
throwforce_absorb_threshold = 10
digi_allowed = TRUE
num_alternate_languages = 3
species_language = LANGUAGE_VESPINAE
secondary_langs = list(LANGUAGE_VESPINAE)
color_mult = 1
tail = "tail" //Spider tail.
icobase_tail = 1
inherent_verbs = list(
/mob/living/carbon/human/proc/check_silk_amount,
/mob/living/carbon/human/proc/toggle_silk_production,
/mob/living/carbon/human/proc/weave_structure,
/mob/living/carbon/human/proc/weave_item,
/mob/living/carbon/human/proc/set_silk_color,
/mob/living/carbon/human/proc/tie_hair)
min_age = 18
max_age = 80
blurb = "Vasilissans are a tall, lanky, spider like people. \
Each having four eyes, an extra four, large legs sprouting from their back, and a chitinous plating on their body, and the ability to spit webs \
from their mandible lined mouths. They are a recent discovery by Nanotrasen, only being discovered roughly seven years ago. \
Before they were found they built great cities out of their silk, being united and subjugated in warring factions under great “Star Queens” \
Who forced the working class to build huge, towering cities to attempt to reach the stars, which they worship as gems of great spiritual and magical significance."
wikilink = "https://wiki.vore-station.net/Vasilissans"
catalogue_data = list(/datum/category_item/catalogue/fauna/vasilissan)
hazard_low_pressure = 20 //Prevents them from dying normally in space. Special code handled below.
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
cold_level_2 = -1
cold_level_3 = -1
//primitive_form = SPECIES_MONKEY //I dunno. Replace this in the future.
flags = NO_MINOR_CUT
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
flesh_color = "#AFA59E" //Gray-ish. Not sure if this is really needed, but eh.
base_color = "#333333" //Blackish-gray
blood_color = "#0952EF" //Spiders have blue blood.
is_weaver = TRUE
silk_reserve = 500
silk_max_reserve = 1000
climb_mult = 0.75
/datum/species/spider/handle_environment_special(var/mob/living/carbon/human/H)
if(H.stat == DEAD) // If they're dead they won't need anything.
return
if(H.bodytemperature <= 260) //If they're really cold, they go into stasis.
var/coldshock = 0
if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly.
coldshock = 4 //This will begin to knock them out until they run out of oxygen and suffocate or until someone finds them.
H.eye_blurry = 5 //Blurry vision in the cold.
if(H.bodytemperature <= 199 && H.bodytemperature >= 100) //Extremely cold. Even in somewhere like the server room it takes a while for bodytemp to drop this low.
coldshock = 8
H.eye_blurry = 5
if(H.bodytemperature <= 99) //Insanely cold.
coldshock = 16
H.eye_blurry = 5
H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage.
return
/datum/species/werebeast
name = SPECIES_WEREBEAST
name_plural = "Werebeasts"
icobase = 'icons/mob/human_races/r_werebeast.dmi'
deform = 'icons/mob/human_races/r_def_werebeast.dmi'
icon_template = 'icons/mob/human_races/r_werebeast.dmi'
tail = "tail"
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
total_health = 200
brute_mod = 0.85
burn_mod = 0.85
metabolic_rate = 2
item_slowdown_mod = 0.25
hunger_factor = 0.4
darksight = 8
mob_size = MOB_LARGE
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_CANILUNZT)
name_language = LANGUAGE_CANILUNZT
species_language = LANGUAGE_CANILUNZT
primitive_form = SPECIES_MONKEY_VULPKANIN
color_mult = 1
icon_height = 64
can_climb = TRUE
climbing_delay = 1
min_age = 18
max_age = 200
species_sounds = "Canine"
blurb = "Big buff werewolves. These are a limited functionality event species that are not balanced for regular gameplay. Adminspawn only."
wikilink="N/A"
catalogue_data = list(/datum/category_item/catalogue/fauna/vulpkanin)
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#777777"
genders = list(MALE, FEMALE, PLURAL, NEUTER)
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
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/werebeast),
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)
)
/// XENOCHIMERA
/datum/species/xenochimera //Scree's race.
name = SPECIES_XENOCHIMERA
name_plural = "Xenochimeras"
icobase = 'icons/mob/human_races/r_xenochimera.dmi'
deform = 'icons/mob/human_races/r_def_xenochimera.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp)
darksight = 8 //critters with instincts to hide in the dark need to see in the dark - about as good as tajara.
slowdown = -0.2 //scuttly, but not as scuttly as a tajara or a teshari.
brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though.
burn_mod = 1.15 //As vulnerable to burn as a Tajara.
base_species = "Xenochimera"
selects_bodytype = SELECTS_BODYTYPE_CUSTOM
digi_allowed = TRUE
has_vibration_sense = TRUE
num_alternate_languages = 3
species_language = null
secondary_langs = list("Sol Common")
//color_mult = 1 //It seemed to work fine in testing, but I've been informed it's unneeded.
tail = "tail"
icobase_tail = 1
inherent_verbs = list(
/mob/living/carbon/human/proc/reconstitute_form,
///mob/living/carbon/human/proc/sonar_ping,
/mob/living/carbon/human/proc/tie_hair,
/mob/living/carbon/human/proc/lick_wounds,
/mob/living/carbon/human/proc/shapeshifter_reassemble) //Xenochimera get all the special verbs since they can't select traits.
// CHOMPEdit: Lick Wounds Verb, reform verb
virus_immune = 1 // They practically ARE one.
min_age = 18
max_age = 80
species_sounds = "Unset" // Chimera get a default/safety of unset, going off their icon base if there's none overriding.
blurb = "Some amalgamation of different species from across the universe,with extremely unstable DNA, making them unfit for regular cloners. \
Widely known for their voracious nature and violent tendencies when stressed or left unfed for long periods of time. \
Most, if not all chimeras possess the ability to undergo some type of regeneration process, at the cost of energy."
wikilink = "https://wiki.vore-station.net/Xenochimera"
catalogue_data = list(/datum/category_item/catalogue/fauna/xenochimera)
hazard_low_pressure = -1 //Prevents them from dying normally in space. Special code handled below.
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
cold_level_2 = -1
cold_level_3 = -1
//primitive_form = SPECIES_MONKEY_TAJ
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken.
flags = NO_SLEEVE | NO_DNA | NO_INFECT // | NO_DEFIB // Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is. Leaving NO_DEFIB there for the future/in case reversion to old 'chimera no-defib.
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
genders = list(MALE, FEMALE, PLURAL, NEUTER)
has_organ = list( //Same organ list as tajarans, except for their SPECIAL BRAIN.
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
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,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
flesh_color = "#AFA59E"
base_color = "#333333"
blood_color = "#14AD8B"
reagent_tag = IS_CHIMERA
/datum/species/xenochimera/handle_environment_special(var/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.stunned = 5
H.canmove = 0
H.does_not_breathe = TRUE
var/regen_sounds = H.regen_sounds
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_danger("<p>" + span_huge("[H.name]'s motionless form shudders grotesquely, rippling unnaturally.") + "</p>"))
if(!H.lying)
H.lay_down()
//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(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
//they handle areas where they can't breathe better than most, but it still lowers their effective health as well as all the other bad stuff that comes with unbreathable environments
if(H.getOxyLoss() >= 50)
H.does_not_breathe = TRUE
//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/temp_diff = body_temperature - H.bodytemperature
if(temp_diff >= 50)
H.shock_stage = min(H.shock_stage + (temp_diff/20), 160) // Divided by 20 is the same as previous numbers, but a full scale
H.eye_blurry = max(5,H.eye_blurry)
/datum/species/xenochimera/proc/handle_feralness(var/mob/living/carbon/human/H)
//first, calculate how stressed the chimera is
var/laststress = 0
var/obj/item/organ/internal/brain/B = H.internal_organs_by_name[O_BRAIN]
if(B) //if you don't have a chimera brain in a chimera body somehow, you don't get the feraless protection
laststress = B.laststress
//Low-ish nutrition has messages and can eventually cause feralness
var/hunger = max(0, 150 - H.nutrition)
//pain makes feralness a thing
var/shock = 0.75*H.traumatic_shock
//Caffeinated or otherwise overexcited xenochimera can become feral and have special messages
var/jittery = max(0, H.jitteriness - 100)
//To reduce distant object references
var/feral = H.feral
//Are we in danger of ferality?
var/danger = FALSE
var/feral_state = FALSE
//finally, calculate the current stress total the chimera is operating under, and the cause
var/currentstress = (hunger + shock + jittery)
var/cause = "stress"
if(hunger > shock && hunger > jittery)
cause = "hunger"
else if (shock > hunger && shock > jittery)
cause = "shock"
else if (jittery > shock && jittery > hunger)
cause = "jittery"
//check to see if they go feral if they weren't before
if(!feral && !isbelly(H.loc))
// if stress is below 15, no chance of snapping. Also if they weren't feral before, they won't suddenly become feral unless they get MORE stressed
if((currentstress > laststress) && prob(clamp(currentstress-15, 0, 100)) )
go_feral(H, currentstress, cause)
feral = currentstress //update the local var
//they didn't go feral, give 'em a chance of hunger messages
else if(H.nutrition <= 200 && prob(0.5))
switch(H.nutrition)
if(150 to 200)
to_chat(H,span_info("You feel rather hungry. It might be a good idea to find some some food..."))
if(100 to 150)
to_chat(H,span_warning("You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat..."))
danger = TRUE
//now the check's done, update their brain so it remembers how stressed they were
if(B && !isbelly(H.loc)) //another sanity check for brain implant shenanigans, also no you don't get to hide in a belly and get your laststress set to a huge amount to skip rolls
B.laststress = currentstress
// Handle being feral
if(feral)
//We're feral
feral_state = TRUE
//If they're still stressed, they stay feral
if(currentstress >= 15)
danger = TRUE
feral = max(feral, currentstress)
else
feral = max(0,--feral)
// Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9
var/turf/T = get_turf(H)
if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1))
feral = max(0,--feral)
//Set our real mob's var to our temp var
H.feral = feral
//Did we just finish being feral?
if(!feral)
feral_state = FALSE
to_chat(H,span_info("Your thoughts start clearing, your feral urges having passed - for the time being, at least."))
log_and_message_admins("is no longer feral.", H)
update_xenochimera_hud(H, danger, feral_state)
return
//If they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it.
H.shock_stage = max(H.shock_stage-(feral/20), 0)
//Handle light/dark areas
var/turf/T = get_turf(H)
if(!T)
update_xenochimera_hud(H, danger, feral_state)
return //Nullspace
var/darkish = T.get_lumcount() <= 0.1
//Don't bother doing heavy lifting if we weren't going to give emotes anyway.
if(!prob(1))
//This is basically the 'lite' version of the below block.
var/list/nearby = H.living_mobs(world.view)
//Not in the dark, or a belly, and out in the open.
if(!darkish && isturf(H.loc) && !isbelly(H.loc)) // Added specific check for if in belly
//Always handle feral if nobody's around and not in the dark.
if(!nearby.len)
H.handle_feral()
//Rarely handle feral if someone is around
else if(prob(1))
H.handle_feral()
//And bail
update_xenochimera_hud(H, danger, feral_state)
return
// In the darkness, or "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage.
if(darkish || !isturf(H.loc) || isbelly(H.loc)) // Specific check for if in belly. !isturf should do this, but JUST in case.
// If hurt, tell 'em to heal up
if (cause == "shock")
to_chat(H,span_info("This place seems safe, secure, hidden, a place to lick your wounds and recover..."))
//If hungry, nag them to go and find someone or something to eat.
else if(cause == "hunger")
to_chat(H,span_info("Secure in your hiding place, your hunger still gnaws at you. You need to catch some food..."))
//If jittery, etc
else if(cause == "jittery")
to_chat(H,span_info("sneakysneakyyesyesyescleverhidingfindthingsyessssss"))
//Otherwise, just tell them to keep hiding.
else
to_chat(H,span_info("...safe..."))
// NOT in the darkness
else
//Twitch twitch
if(!H.stat)
H.emote("twitch")
var/list/nearby = H.living_mobs(world.view)
// Someone/something nearby
if(nearby.len)
var/M = pick(nearby)
if(cause == "shock")
to_chat(H,span_danger("You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort..."))
else
to_chat(H,span_danger("Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing..."))
// Nobody around
else
if(cause == "hunger")
to_chat(H,span_danger("Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you."))
else if(cause == "jittery")
to_chat(H,span_danger("yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes"))
else
to_chat(H,span_danger("Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground..."))
// HUD update time
update_xenochimera_hud(H, danger, feral_state)
/datum/species/xenochimera/proc/go_feral(var/mob/living/carbon/human/H, var/stress, var/cause)
// Going feral due to hunger
if(cause == "hunger")
to_chat(H,span_danger(span_large("Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.")))
log_and_message_admins("has gone feral due to hunger.", H)
// If they're hurt, chance of snapping.
else if(cause == "shock")
//If the majority of their shock is due to halloss, give them a different message (3x multiplier on check as halloss is 2x - meaning t_s must be at least 3x for other damage sources to be the greater part)
if(3*H.halloss >= H.traumatic_shock)
to_chat(H,span_danger(span_large("The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...")))
log_and_message_admins("has gone feral due to halloss.", H)
//Majority due to other damage sources
else
to_chat(H,span_danger(span_large("Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.")))
log_and_message_admins("has gone feral due to injury.", H)
//No hungry or shock, but jittery
else if(cause == "jittery")
to_chat(H,span_warning(span_large("Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!")))
log_and_message_admins("has gone feral due to jitteriness.", H)
else // catch-all just in case something weird happens
to_chat(H,span_warning(span_large("The stress of your situation is too much for you, and your survival instincts kick in!")))
log_and_message_admins("has gone feral for unknown reasons.", H)
//finally, set their feral var
H.feral = stress
if(!H.stat)
H.emote("twitch")
/datum/species/xenochimera/get_race_key()
var/datum/species/real = GLOB.all_species[base_species]
return real.race_key
/datum/species/xenochimera/proc/update_xenochimera_hud(var/mob/living/carbon/human/H, var/danger, var/feral)
if(H.xenochimera_danger_display)
H.xenochimera_danger_display.invisibility = 0
if(danger && feral)
H.xenochimera_danger_display.icon_state = "danger11"
else if(danger && !feral)
H.xenochimera_danger_display.icon_state = "danger10"
else if(!danger && feral)
H.xenochimera_danger_display.icon_state = "danger01"
else
H.xenochimera_danger_display.icon_state = "danger00"
return
/obj/screen/xenochimera
icon = 'icons/mob/chimerahud.dmi'
invisibility = 101
/obj/screen/xenochimera/danger_level
name = "danger level"
icon_state = "danger00" //first number is bool of whether or not we're in danger, second is whether or not we're feral
alpha = 200
/datum/species/sparkledog //Exists primarily as an april fools joke, along with everything tied to it!
name = SPECIES_SPARKLE
name_plural = "Sparklies"
icobase = 'icons/mob/human_races/r_sparkle.dmi'
icobase_tail = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
slowdown = -0.5
brute_mod = 1.5
burn_mod = 1.5
bloodloss_rate = 1.5
toxins_mod = 0.5
radiation_mod = 0
flash_mod = 2
siemens_coefficient = 10
darksight = 2
num_alternate_languages = 3
language = LANGUAGE_SPARKLE
species_language = LANGUAGE_SPARKLE
secondary_langs = list(LANGUAGE_SPARKLE, LANGUAGE_SOL_COMMON)
color_mult = 1
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN)
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair, /mob/living/proc/toggle_sparkles, /mob/living/proc/healing_rainbows, /mob/living/carbon/human/proc/play_dead)
min_age = 18
max_age = 21
digi_allowed = FALSE //No time for making rainbow legs for the meme, sorry!
pass_flags = PASSTABLE
blurb = "Th3 ultimate lifeform, th3 l@st of th3 sp@rkl3 d0gg0s. M0r3 p0w3rful th@nn @ny 0th3r sp3ci3s in th3 3ntir3 un1v3rs3!!! When 3v3ryth1ng is crashing d0wn, y0u c@nn always r3ly 0n th3m to s@v3 th3 d@y. N0 0n3 3ls3 h@s th@t k1nd of str3ngth. R@wr XD #sp@rkl3d0gg0 #s@v1ngth3d@y #n0b0dyc@r3s"
wikilink="https://wiki.vore-station.net/"
primitive_form = SPECIES_MONKEY_VULPKANIN
genders = list(MALE, FEMALE, PLURAL, NEUTER)
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
flesh_color = "#ffffff"
base_color = "#ffffff"
blood_color = "#ff00d9"