Organizes species datums and icons better (#6440)

This commit is contained in:
Alberyk
2019-05-19 15:49:29 +02:00
committed by Werner
parent f659fa096c
commit 4014355de8
56 changed files with 860 additions and 846 deletions
@@ -16,8 +16,9 @@
var/economic_modifier = 0
// Icon/appearance vars.
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
var/icobase = 'icons/mob/human_races/human/r_human.dmi' // Normal icon set.
var/deform = 'icons/mob/human_races/human/r_def_human.dmi' // Mutated icon set.
var/preview_icon = 'icons/mob/human_races/human/human_preview.dmi'
// Damage overlay and masks.
var/damage_overlays = 'icons/mob/human_races/masks/dam_human.dmi'
@@ -0,0 +1,158 @@
/datum/species/diona
name = "Diona"
short_name = "dio"
name_plural = "Dionaea"
bodytype = "Diona"
age_max = 1000
economic_modifier = 3
icobase = 'icons/mob/human_races/diona/r_diona.dmi'
deform = 'icons/mob/human_races/diona/r_def_plant.dmi'
language = LANGUAGE_ROOTSONG
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/diona
)
inherent_verbs = list(
/mob/living/carbon/human/proc/consume_nutrition_from_air
)
//primitive_form = "Nymph"
slowdown = 7
rarity_value = 4
hud_type = /datum/hud_data/diona
siemens_coefficient = 0.3
eyes = "blank_eyes"
show_ssd = "completely quiescent"
num_alternate_languages = 1
name_language = LANGUAGE_ROOTSONG
ethanol_resistance = -1 //Can't get drunk
taste_sensitivity = TASTE_DULL
mob_size = 12 //Worker gestalts are 150kg
remains_type = /obj/effect/decal/cleanable/ash //no bones, so, they just turn into dust
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."
grab_mod = 1.1
has_organ = list(
"nutrient channel" = /obj/item/organ/diona/nutrients,
"neural strata" = /obj/item/organ/diona/strata,
"response node" = /obj/item/organ/diona/node,
"gas bladder" = /obj/item/organ/diona/bladder,
"polyp segment" = /obj/item/organ/diona/polyp,
"anchoring ligament" = /obj/item/organ/diona/ligament
)
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/diona),
"groin" = list("path" = /obj/item/organ/external/groin/diona),
"head" = list("path" = /obj/item/organ/external/head/diona),
"l_arm" = list("path" = /obj/item/organ/external/arm/diona),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/diona),
"l_leg" = list("path" = /obj/item/organ/external/leg/diona),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/diona),
"l_hand" = list("path" = /obj/item/organ/external/hand/diona),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
)
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 273
cold_level_2 = 223
cold_level_3 = 173
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_CHUBBY
appearance_flags = 0
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#97dd7c"
flesh_color = "#907E4A"
reagent_tag = IS_DIONA
stamina = -1 // Diona sprinting uses energy instead of stamina
sprint_speed_factor = 0.5 //Speed gained is minor
sprint_cost_factor = 0.8
climb_coeff = 1.3
vision_organ = "head"
max_hydration_factor = -1
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
var/datum/dionastats/DS = H.get_dionastats()
if (!DS)
return 0 //Something is very wrong
var/remainder = cost * H.sprint_cost_factor
if (H.total_radiation)
if (H.total_radiation > (cost*0.5))//Radiation counts as double energy
H.apply_radiation(cost*(-0.5))
return 1
else
remainder = cost - (H.total_radiation*2)
H.total_radiation = 0
if (DS.stored_energy > remainder)
DS.stored_energy -= remainder
return 1
else
remainder -= DS.stored_energy
DS.stored_energy = 0
H.adjustHalLoss(remainder*5, 1)
H.updatehealth()
H.m_intent = "walk"
H.hud_used.move_intent.update_move_icon(H)
to_chat(H, span("danger", "We have expended our energy reserves, and cannot continue to move at such a pace. We must find light!"))
return 0
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/carbon/alien/diona/D = other
if(istype(D))
return 1
return 0
/datum/species/diona/equip_later_gear(var/mob/living/carbon/human/H)
if(istype(H.get_equipped_item(slot_back), /obj/item/weapon/storage/backpack))
H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H.back), slot_in_backpack)
else
H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H), slot_r_hand)
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
if (ishuman(H))
return ..()
else//Most of the stuff in the parent function doesnt apply to nymphs
add_inherent_verbs(H)
/datum/species/diona/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0)
if (!gibbed)
// This proc sleeps. Async it.
INVOKE_ASYNC(H, /mob/living/carbon/human/proc/diona_split_into_nymphs)
/datum/species/diona/handle_speech_problems(mob/living/carbon/human/H, list/current_flags, message, message_verb, message_mode)
// Diona without head can live, but they cannot talk as loud anymore.
var/obj/item/organ/external/O = H.organs_by_name["head"]
current_flags[4] = O.is_stump() ? 3 : world.view
return current_flags
/datum/species/diona/handle_speech_sound(mob/living/carbon/human/H, list/current_flags)
current_flags = ..()
var/obj/item/organ/external/O = H.organs_by_name["head"]
current_flags[3] = O.is_stump()
return current_flags
@@ -0,0 +1,36 @@
/datum/species/human
name = "Human"
hide_name = TRUE
short_name = "hum"
name_plural = "Humans"
bodytype = "Human"
age_max = 125
economic_modifier = 12
primitive_form = "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 four centuries has spread colonies across a wide swathe of space. \
They hold a wide range of forms and creeds.<br><br>\
The Sol Alliance is still massively influential, but independent human nations have managed to shake off its dominance and forge their \
own path. Driven by an unending hunger for wealth, powerful corporate interests are bringing untold wealth to humanity. Unchecked \
megacorporations have sparked secretive factions to fight their influence, while there is always the risk of someone digging too \
deep into the secrets of the galaxy..."
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_SIIK_TAU)
name_language = null // Use the first-name last-name generator rather than a language scrambler
mob_size = 9
spawn_flags = CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS
remains_type = /obj/effect/decal/remains/human
stamina = 130 // Humans can sprint for longer than any other species
stamina_recovery = 5
sprint_speed_factor = 0.9
sprint_cost_factor = 0.5
climb_coeff = 1
@@ -3,7 +3,10 @@
name_plural = "off-worlders Humans"
blurb = "The Offworlders are humans that have adapted to zero-G conditions through a lifetime of conditioning, exposure, and physical modification. \
They thrive in thinner atmosphere and weightlessness, more often than not utilizing advanced life support and body-bracing equipment to sustain themselves in normal Human environments."
icobase = 'icons/mob/human_races/subspecies/r_offworlder.dmi'
icobase = 'icons/mob/human_races/human/r_offworlder.dmi'
deform = 'icons/mob/human_races/human/r_offworlder.dmi'
preview_icon = 'icons/mob/human_races/human/offworlder_preview.dmi'
flash_mod = 1.2
oxy_mod = 0.8
@@ -0,0 +1,239 @@
/datum/species/machine
name = "Baseline Frame"
short_name = "ipc"
name_plural = "Baselines"
bodytype = "Machine"
age_min = 1
age_max = 30
economic_modifier = 3
var/neuter_ipc = TRUE
blurb = "IPCs are, quite simply, \"Integrated Positronic Chassis.\" In this scenario, 'positronic' implies that the chassis possesses a positronic processing core (or positronic brain), meaning that an IPC must be positronic to be considered an IPC. The Baseline model is more of a category - the long of the short is that they represent all unbound synthetic units. Baseline models cover anything that is not an Industrial chassis or a Shell chassis. They can be custom made or assembly made. The most common feature of the Baseline model is a simple design, skeletal or semi-humanoid, and ordinary atmospheric diffusion cooling systems."
icobase = 'icons/mob/human_races/ipc/r_machine.dmi'
deform = 'icons/mob/human_races/ipc/r_machine.dmi'
preview_icon = 'icons/mob/human_races/ipc/machine_preview.dmi'
eyes = "blank_eyes"
light_range = 2
light_power = 0.5
meat_type = /obj/item/stack/material/steel
unarmed_types = list(/datum/unarmed_attack/punch)
rarity_value = 2
inherent_eye_protection = FLASH_PROTECTION_MAJOR
eyes_are_impermeable = TRUE
name_language = "Encoded Audio Language"
num_alternate_languages = 2
secondary_langs = list("Encoded Audio Language")
ethanol_resistance = -1//Can't get drunk
radiation_mod = 0 // not affected by radiation
remains_type = /obj/effect/decal/remains/robot
hud_type = /datum/hud_data/ipc
brute_mod = 1.0
burn_mod = 1.2
show_ssd = "flashing a 'system offline' glyph on their monitor"
death_message = "gives one shrill beep before falling lifeless."
knockout_message = "encounters a hardware fault and suddenly reboots!"
halloss_message = "encounters a hardware fault and suddenly reboots."
halloss_message_self = "ERROR: Unrecoverable machine check exception.<BR>System halted, rebooting..."
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 500 // Gives them about 25 seconds in space before taking damage
heat_level_2 = 1000
heat_level_3 = 2000
body_temperature = null
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
inherent_verbs = list(
/mob/living/carbon/human/proc/self_diagnostics
)
flags = IS_IPC
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#1F181F"
flesh_color = "#575757"
virus_immune = 1
reagent_tag = IS_MACHINE
has_organ = list(
"brain" = /obj/item/organ/mmi_holder/posibrain,
"cell" = /obj/item/organ/cell,
"optics" = /obj/item/organ/eyes/optical_sensor,
"ipc tag" = /obj/item/organ/ipc_tag
)
vision_organ = "optics"
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/ipc),
"groin" = list("path" = /obj/item/organ/external/groin/ipc),
"head" = list("path" = /obj/item/organ/external/head/ipc),
"l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
"l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
"l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
)
heat_discomfort_level = 373.15
heat_discomfort_strings = list(
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
)
stamina = -1 // Machines use power and generate heat, stamina is not a thing
sprint_speed_factor = 1 // About as capable of speed as a human
max_hydration_factor = -1
// Special snowflake machine vars.
var/sprint_temperature_factor = 1.15
var/sprint_charge_factor = 0.65
datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
if (neuter_ipc)
H.gender = NEUTER
. = ..()
check_tag(H, H.client)
/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost)
if (H.stat == CONSCIOUS)
H.bodytemperature += cost * sprint_temperature_factor
H.adjustNutritionLoss(cost * sprint_charge_factor)
if(H.nutrition <= 0 && H.max_nutrition > 0)
H.Weaken(15)
H.m_intent = "walk"
H.hud_used.move_intent.update_move_icon(H)
to_chat(H, span("danger", "ERROR: Power reserves depleted, emergency shutdown engaged. Backup power will come online in approximately 30 seconds, initiate charging as primary directive."))
playsound(H.loc, 'sound/machines/buzz-two.ogg', 100, 0)
else
return 1
return 0
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
..()
H.f_style = ""
addtimer(CALLBACK(H, /mob/living/carbon/human/.proc/update_hair), 100)
/datum/species/machine/sanitize_name(var/new_name)
return sanitizeName(new_name, allow_numbers = 1)
/datum/species/machine/proc/check_tag(var/mob/living/carbon/human/new_machine, var/client/player)
if (!new_machine || !player)
return
if (establish_db_connection(dbcon))
var/obj/item/organ/ipc_tag/tag = new_machine.internal_organs_by_name["ipc tag"]
var/status = TRUE
var/list/query_details = list("ckey" = player.ckey, "character_name" = player.prefs.real_name)
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
query.Execute(query_details)
if (query.NextRow())
status = text2num(query.item[1])
else
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO ss13_ipc_tracking (player_ckey, character_name, tag_status) VALUES (:ckey:, :character_name:, 1)")
log_query.Execute(query_details)
if (!status)
new_machine.internal_organs_by_name -= "ipc tag"
new_machine.internal_organs -= tag
qdel(tag)
/datum/species/machine/proc/update_tag(var/mob/living/carbon/human/target, var/client/player)
if (!target || !player)
return
if (establish_db_connection(dbcon))
var/status = FALSE
var/sql_status = FALSE
if (target.internal_organs_by_name["ipc tag"])
status = TRUE
var/list/query_details = list("ckey" = player.ckey, "character_name" = target.real_name)
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
query.Execute(query_details)
if (query.NextRow())
sql_status = text2num(query.item[1])
if (sql_status == status)
return
query_details["status"] = status
var/DBQuery/update_query = dbcon.NewQuery("UPDATE ss13_ipc_tracking SET tag_status = :status: WHERE player_ckey = :ckey: AND character_name = :character_name:")
update_query.Execute(query_details)
/datum/species/machine/get_light_color(mob/living/carbon/human/H)
if (!istype(H))
return null
// I hate this, but I can't think of a better way that doesn't involve
// rewriting hair.
switch (H.f_style)
if ("pink IPC screen")
return LIGHT_COLOR_PINK
if ("red IPC screen")
return LIGHT_COLOR_RED
if ("green IPC screen")
return LIGHT_COLOR_GREEN
if ("blue IPC screen")
return LIGHT_COLOR_BLUE
if ("breakout IPC screen")
return LIGHT_COLOR_CYAN
if ("eight IPC screen")
return LIGHT_COLOR_CYAN
if ("goggles IPC screen")
return LIGHT_COLOR_RED
if ("heart IPC screen")
return LIGHT_COLOR_PINK
if ("monoeye IPC screen")
return LIGHT_COLOR_ORANGE
if ("nature IPC screen")
return LIGHT_COLOR_CYAN
if ("orange IPC screen")
return LIGHT_COLOR_ORANGE
if ("purple IPC screen")
return LIGHT_COLOR_PURPLE
if ("shower IPC screen")
return "#FFFFFF"
if ("static IPC screen")
return "#FFFFFF"
if ("yellow IPC screen")
return LIGHT_COLOR_YELLOW
/datum/species/machine/before_equip(var/mob/living/carbon/human/H)
. = ..()
check_tag(H, H.client)
H.gender = NEUTER
@@ -16,8 +16,8 @@
num_alternate_languages = 3
icobase = 'icons/mob/human_races/r_human.dmi'
deform = 'icons/mob/human_races/robotic.dmi'
icobase = 'icons/mob/human_races/human/r_human.dmi'
deform = 'icons/mob/human_races/ipc/robotic.dmi'
light_range = 0
light_power = 0
@@ -83,8 +83,9 @@
blurb = "The first commercialized attempt Hephaestus Industries made at an industrial-type IPC. Designed for extra durability and increased weight loads, the first generation Industrial was considered a success, though it possessed some issues. A limited power cell and actuators designed for heavy lifting and not locomotion resulted in a slow and frequently charging machine. A special addition to the chassis makes up for these drawbacks - the ability to simply slot a suit cooling unit onto the model's back and make use of its built-in heat transferal conduits, allowing the Industrial to perform EVA without any extra peripherals such as a voidsuit."
icobase = 'icons/mob/human_races/r_industrial.dmi'
deform = 'icons/mob/human_races/r_industrial.dmi'
icobase = 'icons/mob/human_races/ipc/r_industrial.dmi'
deform = 'icons/mob/human_races/ipc/r_industrial.dmi'
preview_icon = 'icons/mob/human_races/ipc/industrial_preview.dmi'
eyes = "eyes_industry"
show_ssd = "completely quiescent"
@@ -134,8 +135,8 @@
blurb = "\[REDACTED\]"
icobase = 'icons/mob/human_races/r_terminator.dmi'
deform = 'icons/mob/human_races/r_terminator.dmi'
icobase = 'icons/mob/human_races/ipc/r_terminator.dmi'
deform = 'icons/mob/human_races/ipc/r_terminator.dmi'
light_range = 0
light_power = 0
@@ -234,8 +235,9 @@
short_name = "hif"
bodytype = "Heavy Machine"
icobase = 'icons/mob/human_races/r_ind_hephaestus.dmi'
deform = 'icons/mob/human_races/r_ind_hephaestus.dmi'
icobase = 'icons/mob/human_races/ipc/r_ind_hephaestus.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_hephaestus.dmi'
preview_icon = 'icons/mob/human_races/ipc/ind_hephaestus_preview.dmi'
eyes = "heph_eyes"
slowdown = 6
@@ -268,8 +270,9 @@
short_name = "xmf"
bodytype = "Heavy Machine"
icobase = 'icons/mob/human_races/r_ind_xion.dmi'
deform = 'icons/mob/human_races/r_ind_xion.dmi'
icobase = 'icons/mob/human_races/ipc/r_ind_xion.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_xion.dmi'
preview_icon = 'icons/mob/human_races/ipc/ind_xion_preview.dmi'
eyes = "xion_eyes"
flags = IS_IPC
@@ -302,8 +305,9 @@
short_name = "zhf"
bodytype = null
icobase = 'icons/mob/human_races/r_ind_zenghu.dmi'
deform = 'icons/mob/human_races/r_ind_zenghu.dmi'
icobase = 'icons/mob/human_races/ipc/r_ind_zenghu.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_zenghu.dmi'
preview_icon = 'icons/mob/human_races/ipc/ind_zenghu_preview.dmi'
eyes = "zenghu_eyes"
brute_mod = 1.5
@@ -338,8 +342,9 @@
short_name = "bcf"
bodytype = null
icobase = 'icons/mob/human_races/r_ind_bishop.dmi'
deform = 'icons/mob/human_races/r_ind_bishop.dmi'
icobase = 'icons/mob/human_races/ipc/r_ind_bishop.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_bishop.dmi'
preview_icon = 'icons/mob/human_races/ipc/ind_bishop_preview.dmi'
eyes = "bishop_eyes"
eyes_icon_blend = ICON_MULTIPLY
@@ -379,8 +384,8 @@
blurb = "A simple and archaic robotic frame, used mostly as a temporary body before posibrains are transferred to any specialized chassis."
icobase = 'icons/mob/human_races/robotic.dmi'
deform = 'icons/mob/human_races/robotic.dmi'
icobase = 'icons/mob/human_races/ipc/robotic.dmi'
deform = 'icons/mob/human_races/ipc/robotic.dmi'
eyes = "eyes_s"
bald = 1
@@ -0,0 +1,60 @@
/datum/species/skrell
name = "Skrell"
short_name = "skr"
name_plural = "Skrell"
bodytype = "Skrell"
age_max = 500
economic_modifier = 12
icobase = 'icons/mob/human_races/skrell/r_skrell.dmi'
deform = 'icons/mob/human_races/skrell/r_def_skrell.dmi'
preview_icon = 'icons/mob/human_races/skrell/skrell_preview.dmi'
eyes = "skrell_eyes_s"
primitive_form = "Neaera"
unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/stomp, /datum/unarmed_attack/kick)
blurb = "An amphibious species, Skrell come from the star system known as Nralakk, coined 'Jargon' by \
humanity.<br><br>Skrell are a highly advanced, ancient race who place knowledge as the highest ideal. \
A dedicated meritocracy, the Skrell strive for ever-expanding knowledge of the galaxy and their place \
in it. However, a cataclysmic AI rebellion by Glorsh and its associated atrocities in the far past has \
forever scarred the species and left them with a deep rooted suspicion of artificial intelligence. As \
such an ancient and venerable species, they often hold patronizing attitudes towards the younger races."
num_alternate_languages = 3
language = LANGUAGE_SKRELLIAN
secondary_langs = list(LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SKRELLIAN
rarity_value = 3
grab_mod = 1.25
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_SOCKS
flags = NO_SLIP
has_organ = list(
"heart" = /obj/item/organ/heart/skrell,
"lungs" = /obj/item/organ/lungs/skrell,
"liver" = /obj/item/organ/liver/skrell,
"kidneys" = /obj/item/organ/kidneys/skrell,
"brain" = /obj/item/organ/brain/skrell,
"appendix" = /obj/item/organ/appendix,
"eyes" = /obj/item/organ/eyes/skrell
)
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
base_color = "#006666"
reagent_tag = IS_SKRELL
ethanol_resistance = 0.5//gets drunk faster
taste_sensitivity = TASTE_SENSITIVE
stamina = 90
sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators
inherent_verbs = list(/mob/living/carbon/human/proc/commune)
default_h_style = "Skrell Short Tentacles"
/datum/species/skrell/can_breathe_water()
return TRUE
@@ -1,795 +0,0 @@
/datum/species/human
name = "Human"
hide_name = TRUE
short_name = "hum"
name_plural = "Humans"
bodytype = "Human"
age_max = 125
economic_modifier = 12
primitive_form = "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 four centuries has spread colonies across a wide swathe of space. \
They hold a wide range of forms and creeds.<br><br>\
The Sol Alliance is still massively influential, but independent human nations have managed to shake off its dominance and forge their \
own path. Driven by an unending hunger for wealth, powerful corporate interests are bringing untold wealth to humanity. Unchecked \
megacorporations have sparked secretive factions to fight their influence, while there is always the risk of someone digging too \
deep into the secrets of the galaxy..."
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_SIIK_TAU)
name_language = null // Use the first-name last-name generator rather than a language scrambler
mob_size = 9
spawn_flags = CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS
remains_type = /obj/effect/decal/remains/human
stamina = 130 // Humans can sprint for longer than any other species
stamina_recovery = 5
sprint_speed_factor = 0.9
sprint_cost_factor = 0.5
climb_coeff = 1
/datum/species/unathi
name = "Unathi"
short_name = "una"
name_plural = "Unathi"
bodytype = "Unathi"
icobase = 'icons/mob/human_races/r_lizard.dmi'
deform = 'icons/mob/human_races/r_def_lizard.dmi'
tail = "sogtail"
tail_animation = 'icons/mob/species/unathi/tail.dmi'
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
primitive_form = "Stok"
darksight = 3
gluttonous = 1
slowdown = 0.5
brute_mod = 0.8
grab_mod = 0.75
fall_mod = 1.2
ethanol_resistance = 0.4
taste_sensitivity = TASTE_SENSITIVE
economic_modifier = 7
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA)
name_language = LANGUAGE_UNATHI
stamina = 120 // Unathi have the shortest but fastest sprint of all
sprint_speed_factor = 3.2
stamina_recovery = 5
sprint_cost_factor = 1.45
exhaust_threshold = 65
rarity_value = 3
breakcuffs = list(MALE)
mob_size = 10
climb_coeff = 1.35
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the Uuosa-Eso \
system, which roughly translates to 'burning mother'. A relatively recent addition to the galactic stage, they \
suffered immense turmoil after the cultural and economic disruption following first contact with humanity.<br><br>\
With their homeworld of Moghes suffering catastrophic climate change from a nuclear war in the recent past, the \
Hegemony that rules the majority of the species struggles to find itself in a galaxy filled with dangers far \
greater than themselves. They mostly hold ideals of honesty, virtue, martial combat and spirituality above all \
else.They prefer warmer temperatures than most species."
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
cold_level_3 = 130 //Default 120
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
inherent_verbs = list(
/mob/living/proc/devour,
/mob/living/carbon/human/proc/regurgitate
)
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#34AF10"
reagent_tag = IS_UNATHI
base_color = "#066000"
heat_discomfort_level = 295
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 = 292
cold_discomfort_strings = list(
"You feel chilly.",
"You feel sluggish and cold.",
"Your scales bristle against the cold."
)
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
/datum/species/unathi/before_equip(var/mob/living/carbon/human/H)
. = ..()
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
/datum/species/tajaran
name = "Tajara"
short_name = "taj"
name_plural = "Tajara"
bodytype = "Tajara"
icobase = 'icons/mob/human_races/r_tajaran.dmi'
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
tail = "tajtail"
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
darksight = 8
slowdown = -1
brute_mod = 1.2
fall_mod = 0.5
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA, LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SIIK_MAAS
ethanol_resistance = 0.8//Gets drunk a little faster
rarity_value = 2
economic_modifier = 7
stamina = 90 // Tajara evolved to maintain a steady pace in the snow, sprinting wastes energy
stamina_recovery = 4
sprint_speed_factor = 0.65
sprint_cost_factor = 0.75
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Adhomai in the S'rendarr \
system. They have been brought up into the space age by the Humans and Skrell, who alledgedly influenced their \
eventual revolution that overthrew their ancient monarchies to become totalitarian - and NanoTrasen friendly - \
republics. Adhomai is still enduring a global war in the aftermath of the new world order, and many Tajara are \
fleeing their homeworld to seek safety and employment in human space. They prefer colder environments, and speak \
a variety of languages, mostly Siik'Maas, using unique inflections their mouths form."
cold_level_1 = 200 //Default 260
cold_level_2 = 140 //Default 200
cold_level_3 = 80 //Default 120
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 800 //Default 1000
primitive_form = "Farwa"
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#333333"
reagent_tag = IS_TAJARA
heat_discomfort_level = 292
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
cold_discomfort_level = 275
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
default_h_style = "Tajaran Ears"
/datum/species/tajaran/before_equip(var/mob/living/carbon/human/H)
. = ..()
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
/datum/species/skrell
name = "Skrell"
short_name = "skr"
name_plural = "Skrell"
bodytype = "Skrell"
age_max = 500
economic_modifier = 12
icobase = 'icons/mob/human_races/r_skrell.dmi'
deform = 'icons/mob/human_races/r_def_skrell.dmi'
eyes = "skrell_eyes_s"
primitive_form = "Neaera"
unarmed_types = list(/datum/unarmed_attack/punch, /datum/unarmed_attack/stomp, /datum/unarmed_attack/kick)
blurb = "An amphibious species, Skrell come from the star system known as Nralakk, coined 'Jargon' by \
humanity.<br><br>Skrell are a highly advanced, ancient race who place knowledge as the highest ideal. \
A dedicated meritocracy, the Skrell strive for ever-expanding knowledge of the galaxy and their place \
in it. However, a cataclysmic AI rebellion by Glorsh and its associated atrocities in the far past has \
forever scarred the species and left them with a deep rooted suspicion of artificial intelligence. As \
such an ancient and venerable species, they often hold patronizing attitudes towards the younger races."
num_alternate_languages = 3
language = LANGUAGE_SKRELLIAN
secondary_langs = list(LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SKRELLIAN
rarity_value = 3
grab_mod = 1.25
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_SOCKS
flags = NO_SLIP
has_organ = list(
"heart" = /obj/item/organ/heart/skrell,
"lungs" = /obj/item/organ/lungs/skrell,
"liver" = /obj/item/organ/liver/skrell,
"kidneys" = /obj/item/organ/kidneys/skrell,
"brain" = /obj/item/organ/brain/skrell,
"appendix" = /obj/item/organ/appendix,
"eyes" = /obj/item/organ/eyes/skrell
)
flesh_color = "#8CD7A3"
blood_color = "#1D2CBF"
base_color = "#006666"
reagent_tag = IS_SKRELL
ethanol_resistance = 0.5//gets drunk faster
taste_sensitivity = TASTE_SENSITIVE
stamina = 90
sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators
inherent_verbs = list(/mob/living/carbon/human/proc/commune)
default_h_style = "Skrell Short Tentacles"
/datum/species/skrell/can_breathe_water()
return TRUE
/datum/species/diona
name = "Diona"
short_name = "dio"
name_plural = "Dionaea"
bodytype = "Diona"
age_max = 1000
economic_modifier = 3
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
language = LANGUAGE_ROOTSONG
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/diona
)
inherent_verbs = list(
/mob/living/carbon/human/proc/consume_nutrition_from_air
)
//primitive_form = "Nymph"
slowdown = 7
rarity_value = 4
hud_type = /datum/hud_data/diona
siemens_coefficient = 0.3
eyes = "blank_eyes"
show_ssd = "completely quiescent"
num_alternate_languages = 1
name_language = LANGUAGE_ROOTSONG
ethanol_resistance = -1 //Can't get drunk
taste_sensitivity = TASTE_DULL
mob_size = 12 //Worker gestalts are 150kg
remains_type = /obj/effect/decal/cleanable/ash //no bones, so, they just turn into dust
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."
grab_mod = 1.1
has_organ = list(
"nutrient channel" = /obj/item/organ/diona/nutrients,
"neural strata" = /obj/item/organ/diona/strata,
"response node" = /obj/item/organ/diona/node,
"gas bladder" = /obj/item/organ/diona/bladder,
"polyp segment" = /obj/item/organ/diona/polyp,
"anchoring ligament" = /obj/item/organ/diona/ligament
)
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/diona),
"groin" = list("path" = /obj/item/organ/external/groin/diona),
"head" = list("path" = /obj/item/organ/external/head/diona),
"l_arm" = list("path" = /obj/item/organ/external/arm/diona),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/diona),
"l_leg" = list("path" = /obj/item/organ/external/leg/diona),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/diona),
"l_hand" = list("path" = /obj/item/organ/external/hand/diona),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
)
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 273
cold_level_2 = 223
cold_level_3 = 173
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_CHUBBY
appearance_flags = 0
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#97dd7c"
flesh_color = "#907E4A"
reagent_tag = IS_DIONA
stamina = -1 // Diona sprinting uses energy instead of stamina
sprint_speed_factor = 0.5 //Speed gained is minor
sprint_cost_factor = 0.8
climb_coeff = 1.3
vision_organ = "head"
max_hydration_factor = -1
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
var/datum/dionastats/DS = H.get_dionastats()
if (!DS)
return 0 //Something is very wrong
var/remainder = cost * H.sprint_cost_factor
if (H.total_radiation)
if (H.total_radiation > (cost*0.5))//Radiation counts as double energy
H.apply_radiation(cost*(-0.5))
return 1
else
remainder = cost - (H.total_radiation*2)
H.total_radiation = 0
if (DS.stored_energy > remainder)
DS.stored_energy -= remainder
return 1
else
remainder -= DS.stored_energy
DS.stored_energy = 0
H.adjustHalLoss(remainder*5, 1)
H.updatehealth()
H.m_intent = "walk"
H.hud_used.move_intent.update_move_icon(H)
to_chat(H, span("danger", "We have expended our energy reserves, and cannot continue to move at such a pace. We must find light!"))
return 0
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/carbon/alien/diona/D = other
if(istype(D))
return 1
return 0
/datum/species/diona/equip_later_gear(var/mob/living/carbon/human/H)
if(istype(H.get_equipped_item(slot_back), /obj/item/weapon/storage/backpack))
H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H.back), slot_in_backpack)
else
H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H), slot_r_hand)
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
if (ishuman(H))
return ..()
else//Most of the stuff in the parent function doesnt apply to nymphs
add_inherent_verbs(H)
/datum/species/diona/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0)
if (!gibbed)
// This proc sleeps. Async it.
INVOKE_ASYNC(H, /mob/living/carbon/human/proc/diona_split_into_nymphs)
/datum/species/diona/handle_speech_problems(mob/living/carbon/human/H, list/current_flags, message, message_verb, message_mode)
// Diona without head can live, but they cannot talk as loud anymore.
var/obj/item/organ/external/O = H.organs_by_name["head"]
current_flags[4] = O.is_stump() ? 3 : world.view
return current_flags
/datum/species/diona/handle_speech_sound(mob/living/carbon/human/H, list/current_flags)
current_flags = ..()
var/obj/item/organ/external/O = H.organs_by_name["head"]
current_flags[3] = O.is_stump()
return current_flags
/datum/species/machine
name = "Baseline Frame"
short_name = "ipc"
name_plural = "Baselines"
bodytype = "Machine"
age_min = 1
age_max = 30
economic_modifier = 3
var/neuter_ipc = TRUE
blurb = "IPCs are, quite simply, \"Integrated Positronic Chassis.\" In this scenario, 'positronic' implies that the chassis possesses a positronic processing core (or positronic brain), meaning that an IPC must be positronic to be considered an IPC. The Baseline model is more of a category - the long of the short is that they represent all unbound synthetic units. Baseline models cover anything that is not an Industrial chassis or a Shell chassis. They can be custom made or assembly made. The most common feature of the Baseline model is a simple design, skeletal or semi-humanoid, and ordinary atmospheric diffusion cooling systems."
icobase = 'icons/mob/human_races/r_machine.dmi'
deform = 'icons/mob/human_races/r_machine.dmi'
eyes = "blank_eyes"
light_range = 2
light_power = 0.5
meat_type = /obj/item/stack/material/steel
unarmed_types = list(/datum/unarmed_attack/punch)
rarity_value = 2
inherent_eye_protection = FLASH_PROTECTION_MAJOR
eyes_are_impermeable = TRUE
name_language = "Encoded Audio Language"
num_alternate_languages = 2
secondary_langs = list("Encoded Audio Language")
ethanol_resistance = -1//Can't get drunk
radiation_mod = 0 // not affected by radiation
remains_type = /obj/effect/decal/remains/robot
hud_type = /datum/hud_data/ipc
brute_mod = 1.0
burn_mod = 1.2
show_ssd = "flashing a 'system offline' glyph on their monitor"
death_message = "gives one shrill beep before falling lifeless."
knockout_message = "encounters a hardware fault and suddenly reboots!"
halloss_message = "encounters a hardware fault and suddenly reboots."
halloss_message_self = "ERROR: Unrecoverable machine check exception.<BR>System halted, rebooting..."
warning_low_pressure = 50
hazard_low_pressure = -1
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 500 // Gives them about 25 seconds in space before taking damage
heat_level_2 = 1000
heat_level_3 = 2000
body_temperature = null
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
inherent_verbs = list(
/mob/living/carbon/human/proc/self_diagnostics
)
flags = IS_IPC
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#1F181F"
flesh_color = "#575757"
virus_immune = 1
reagent_tag = IS_MACHINE
has_organ = list(
"brain" = /obj/item/organ/mmi_holder/posibrain,
"cell" = /obj/item/organ/cell,
"optics" = /obj/item/organ/eyes/optical_sensor,
"ipc tag" = /obj/item/organ/ipc_tag
)
vision_organ = "optics"
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/ipc),
"groin" = list("path" = /obj/item/organ/external/groin/ipc),
"head" = list("path" = /obj/item/organ/external/head/ipc),
"l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
"l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
"l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
)
heat_discomfort_level = 373.15
heat_discomfort_strings = list(
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
)
stamina = -1 // Machines use power and generate heat, stamina is not a thing
sprint_speed_factor = 1 // About as capable of speed as a human
max_hydration_factor = -1
// Special snowflake machine vars.
var/sprint_temperature_factor = 1.15
var/sprint_charge_factor = 0.65
datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
if (neuter_ipc)
H.gender = NEUTER
. = ..()
check_tag(H, H.client)
/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost)
if (H.stat == CONSCIOUS)
H.bodytemperature += cost * sprint_temperature_factor
H.adjustNutritionLoss(cost * sprint_charge_factor)
if(H.nutrition <= 0 && H.max_nutrition > 0)
H.Weaken(15)
H.m_intent = "walk"
H.hud_used.move_intent.update_move_icon(H)
to_chat(H, span("danger", "ERROR: Power reserves depleted, emergency shutdown engaged. Backup power will come online in approximately 30 seconds, initiate charging as primary directive."))
playsound(H.loc, 'sound/machines/buzz-two.ogg', 100, 0)
else
return 1
return 0
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
..()
H.f_style = ""
addtimer(CALLBACK(H, /mob/living/carbon/human/.proc/update_hair), 100)
/datum/species/machine/sanitize_name(var/new_name)
return sanitizeName(new_name, allow_numbers = 1)
/datum/species/machine/proc/check_tag(var/mob/living/carbon/human/new_machine, var/client/player)
if (!new_machine || !player)
return
if (establish_db_connection(dbcon))
var/obj/item/organ/ipc_tag/tag = new_machine.internal_organs_by_name["ipc tag"]
var/status = TRUE
var/list/query_details = list("ckey" = player.ckey, "character_name" = player.prefs.real_name)
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
query.Execute(query_details)
if (query.NextRow())
status = text2num(query.item[1])
else
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO ss13_ipc_tracking (player_ckey, character_name, tag_status) VALUES (:ckey:, :character_name:, 1)")
log_query.Execute(query_details)
if (!status)
new_machine.internal_organs_by_name -= "ipc tag"
new_machine.internal_organs -= tag
qdel(tag)
/datum/species/machine/proc/update_tag(var/mob/living/carbon/human/target, var/client/player)
if (!target || !player)
return
if (establish_db_connection(dbcon))
var/status = FALSE
var/sql_status = FALSE
if (target.internal_organs_by_name["ipc tag"])
status = TRUE
var/list/query_details = list("ckey" = player.ckey, "character_name" = target.real_name)
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
query.Execute(query_details)
if (query.NextRow())
sql_status = text2num(query.item[1])
if (sql_status == status)
return
query_details["status"] = status
var/DBQuery/update_query = dbcon.NewQuery("UPDATE ss13_ipc_tracking SET tag_status = :status: WHERE player_ckey = :ckey: AND character_name = :character_name:")
update_query.Execute(query_details)
/datum/species/machine/get_light_color(mob/living/carbon/human/H)
if (!istype(H))
return null
// I hate this, but I can't think of a better way that doesn't involve
// rewriting hair.
switch (H.f_style)
if ("pink IPC screen")
return LIGHT_COLOR_PINK
if ("red IPC screen")
return LIGHT_COLOR_RED
if ("green IPC screen")
return LIGHT_COLOR_GREEN
if ("blue IPC screen")
return LIGHT_COLOR_BLUE
if ("breakout IPC screen")
return LIGHT_COLOR_CYAN
if ("eight IPC screen")
return LIGHT_COLOR_CYAN
if ("goggles IPC screen")
return LIGHT_COLOR_RED
if ("heart IPC screen")
return LIGHT_COLOR_PINK
if ("monoeye IPC screen")
return LIGHT_COLOR_ORANGE
if ("nature IPC screen")
return LIGHT_COLOR_CYAN
if ("orange IPC screen")
return LIGHT_COLOR_ORANGE
if ("purple IPC screen")
return LIGHT_COLOR_PURPLE
if ("shower IPC screen")
return "#FFFFFF"
if ("static IPC screen")
return "#FFFFFF"
if ("yellow IPC screen")
return LIGHT_COLOR_YELLOW
/datum/species/machine/before_equip(var/mob/living/carbon/human/H)
. = ..()
check_tag(H, H.client)
H.gender = NEUTER
/datum/species/bug
name = "Vaurca Worker"
short_name = "vau"
name_plural = "Type A"
bodytype = "Vaurca"
age_min = 1
age_max = 20
economic_modifier = 2
language = LANGUAGE_VAURCA
primitive_form = "V'krexi"
greater_form = "Vaurca Warrior"
icobase = 'icons/mob/human_races/r_vaurca.dmi'
deform = 'icons/mob/human_races/r_vaurca.dmi'
name_language = LANGUAGE_VAURCA
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/bug
rarity_value = 4
slowdown = 1
darksight = 8 //USELESS
eyes = "vaurca_eyes" //makes it so that eye colour is not changed when skin colour is.
eyes_are_impermeable = TRUE
brute_mod = 0.5
burn_mod = 1.5 //2x was a bit too much. we'll see how this goes.
toxins_mod = 2 //they're not used to all our weird human bacteria.
oxy_mod = 0.6
radiation_mod = 0.2 //almost total radiation protection
bleed_mod = 2.2
warning_low_pressure = 50
hazard_low_pressure = 0
ethanol_resistance = 2
taste_sensitivity = TASTE_SENSITIVE
reagent_tag = IS_VAURCA
siemens_coefficient = 1 //setting it to 0 would be redundant due to LordLag's snowflake checks, plus batons/tasers use siemens now too.
breath_type = "phoron"
poison_type = "nitrogen" //a species that breathes plasma shouldn't be poisoned by it.
mob_size = 13 //their half an inch thick exoskeleton and impressive height, plus all of their mechanical organs.
natural_climbing = TRUE
climb_coeff = 0.75
blurb = "Type A are the most common type of Vaurca and can be seen as the 'backbone' of Vaurcae societies. Their most prevalent feature is their hardened exoskeleton, varying in colors \
in accordance to their hive. It is approximately half an inch thick among all Type A Vaurca. The carapace provides protection against harsh radiation, solar \
and otherwise, and acts as a pressure-suit to seal their soft inner core from the outside world. This allows most Type A Vaurca to have extended EVA \
expeditions, assuming they have internals. They are bipedal, and compared to warriors they are better suited for EVA and environments, and more resistant to brute force thanks to their \
thicker carapace, but also a fair bit slower and less agile. \
<b>Type A are comfortable in any department except security. There will almost never be a Worker in a security position, as they are as a type disposed against combat.</b>"
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 600 //Default 1000
flags = NO_SLIP | NO_CHUBBY
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
blood_color = "#E6E600" // dark yellow
flesh_color = "#E6E600"
base_color = "#575757"
death_message = "chitters faintly before crumbling to the ground, their eyes dead and lifeless..."
halloss_message = "crumbles to the ground, too weak to continue fighting."
heat_discomfort_strings = list(
"Your blood feels like its boiling in the heat.",
"You feel uncomfortably warm.",
"Your carapace feels hot as the sun."
)
cold_discomfort_strings = list(
"You chitter in the cold.",
"You shiver suddenly.",
"Your carapace is ice to the touch."
)
stamina = 100 // Long period of sprinting, but relatively low speed gain
sprint_speed_factor = 0.7
sprint_cost_factor = 0.30
stamina_recovery = 2 //slow recovery
has_organ = list(
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
"lungs" = /obj/item/organ/lungs/vaurca,
"filtration bit" = /obj/item/organ/vaurca/filtrationbit,
"right heart" = /obj/item/organ/heart/right,
"left heart" = /obj/item/organ/heart/left,
"phoron reserve tank" = /obj/item/organ/vaurca/preserve,
"liver" = /obj/item/organ/liver/vaurca,
"kidneys" = /obj/item/organ/kidneys/vaurca,
"brain" = /obj/item/organ/brain/vaurca,
"eyes" = /obj/item/organ/eyes/vaurca
)
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/vaurca),
"groin" = list("path" = /obj/item/organ/external/groin/vaurca),
"head" = list("path" = /obj/item/organ/external/head/vaurca),
"l_arm" = list("path" = /obj/item/organ/external/arm/vaurca),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/vaurca),
"l_leg" = list("path" = /obj/item/organ/external/leg/vaurca),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/vaurca),
"l_hand" = list("path" = /obj/item/organ/external/hand/vaurca),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/vaurca),
"l_foot" = list("path" = /obj/item/organ/external/foot/vaurca),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/vaurca)
)
default_h_style = "Classic Antennae"
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
/datum/species/bug/before_equip(var/mob/living/carbon/human/H)
. = ..()
H.gender = NEUTER
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
var/obj/item/clothing/mask/breath/M = new /obj/item/clothing/mask/breath(H)
if(H.equip_to_slot_or_del(M, slot_wear_mask))
M.autodrobe_no_remove = 1
/datum/species/bug/equip_later_gear(var/mob/living/carbon/human/H)
if(istype(H.get_equipped_item(slot_back), /obj/item/weapon/storage/backpack))
H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/inhaler/phoron_special(H.back), slot_in_backpack)
else
H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/inhaler/phoron_special(H), slot_r_hand)
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()
@@ -0,0 +1,74 @@
/datum/species/tajaran
name = "Tajara"
short_name = "taj"
name_plural = "Tajara"
bodytype = "Tajara"
icobase = 'icons/mob/human_races/tajara/r_tajaran.dmi'
deform = 'icons/mob/human_races/tajara/r_def_tajaran.dmi'
preview_icon = 'icons/mob/human_races/tajara/tajaran_preview.dmi'
tail = "tajtail"
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
darksight = 8
slowdown = -1
brute_mod = 1.2
fall_mod = 0.5
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA, LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SIIK_MAAS
ethanol_resistance = 0.8//Gets drunk a little faster
rarity_value = 2
economic_modifier = 7
stamina = 90 // Tajara evolved to maintain a steady pace in the snow, sprinting wastes energy
stamina_recovery = 4
sprint_speed_factor = 0.65
sprint_cost_factor = 0.75
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Adhomai in the S'rendarr \
system. They have been brought up into the space age by the Humans and Skrell, who alledgedly influenced their \
eventual revolution that overthrew their ancient monarchies to become totalitarian - and NanoTrasen friendly - \
republics. Adhomai is still enduring a global war in the aftermath of the new world order, and many Tajara are \
fleeing their homeworld to seek safety and employment in human space. They prefer colder environments, and speak \
a variety of languages, mostly Siik'Maas, using unique inflections their mouths form."
cold_level_1 = 200 //Default 260
cold_level_2 = 140 //Default 200
cold_level_3 = 80 //Default 120
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 800 //Default 1000
primitive_form = "Farwa"
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
base_color = "#333333"
reagent_tag = IS_TAJARA
heat_discomfort_level = 292
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
"Your overheated skin itches."
)
cold_discomfort_level = 275
move_trail = /obj/effect/decal/cleanable/blood/tracks/paw
default_h_style = "Tajaran Ears"
/datum/species/tajaran/before_equip(var/mob/living/carbon/human/H)
. = ..()
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
@@ -0,0 +1,91 @@
/datum/species/unathi
name = "Unathi"
short_name = "una"
name_plural = "Unathi"
bodytype = "Unathi"
icobase = 'icons/mob/human_races/unathi/r_lizard.dmi'
deform = 'icons/mob/human_races/unathi/r_def_lizard.dmi'
preview_icon = 'icons/mob/human_races/unathi/unathi_preview.dmi'
tail = "sogtail"
tail_animation = 'icons/mob/species/unathi/tail.dmi'
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
primitive_form = "Stok"
darksight = 3
gluttonous = 1
slowdown = 0.5
brute_mod = 0.8
grab_mod = 0.75
fall_mod = 1.2
ethanol_resistance = 0.4
taste_sensitivity = TASTE_SENSITIVE
economic_modifier = 7
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA)
name_language = LANGUAGE_UNATHI
stamina = 120 // Unathi have the shortest but fastest sprint of all
sprint_speed_factor = 3.2
stamina_recovery = 5
sprint_cost_factor = 1.45
exhaust_threshold = 65
rarity_value = 3
breakcuffs = list(MALE)
mob_size = 10
climb_coeff = 1.35
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the Uuosa-Eso \
system, which roughly translates to 'burning mother'. A relatively recent addition to the galactic stage, they \
suffered immense turmoil after the cultural and economic disruption following first contact with humanity.<br><br>\
With their homeworld of Moghes suffering catastrophic climate change from a nuclear war in the recent past, the \
Hegemony that rules the majority of the species struggles to find itself in a galaxy filled with dangers far \
greater than themselves. They mostly hold ideals of honesty, virtue, martial combat and spirituality above all \
else.They prefer warmer temperatures than most species."
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
cold_level_3 = 130 //Default 120
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
inherent_verbs = list(
/mob/living/proc/devour,
/mob/living/carbon/human/proc/regurgitate
)
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#34AF10"
reagent_tag = IS_UNATHI
base_color = "#066000"
heat_discomfort_level = 295
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 = 292
cold_discomfort_strings = list(
"You feel chilly.",
"You feel sluggish and cold.",
"Your scales bristle against the cold."
)
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
/datum/species/unathi/before_equip(var/mob/living/carbon/human/H)
. = ..()
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
@@ -3,8 +3,9 @@
short_name = "aut"
name_plural = "Aut'akh Unathi"
icobase = 'icons/mob/human_races/r_autakh.dmi'
deform = 'icons/mob/human_races/r_def_lizard.dmi'
icobase = 'icons/mob/human_races/unathi/r_autakh.dmi'
deform = 'icons/mob/human_races/unathi/r_autakh.dmi'
preview_icon = 'icons/mob/human_races/unathi/autakh_preview.dmi'
tail = "autakh"
tail_animation = null
@@ -0,0 +1,136 @@
/datum/species/bug
name = "Vaurca Worker"
short_name = "vau"
name_plural = "Type A"
bodytype = "Vaurca"
age_min = 1
age_max = 20
economic_modifier = 2
language = LANGUAGE_VAURCA
primitive_form = "V'krexi"
greater_form = "Vaurca Warrior"
icobase = 'icons/mob/human_races/vaurca/r_vaurca.dmi'
deform = 'icons/mob/human_races/vaurca/r_vaurca.dmi'
preview_icon = 'icons/mob/human_races/vaurca/vaurca_preview.dmi'
name_language = LANGUAGE_VAURCA
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/claws,
/datum/unarmed_attack/bite/sharp
)
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/bug
rarity_value = 4
slowdown = 1
darksight = 8 //USELESS
eyes = "vaurca_eyes" //makes it so that eye colour is not changed when skin colour is.
eyes_are_impermeable = TRUE
brute_mod = 0.5
burn_mod = 1.5 //2x was a bit too much. we'll see how this goes.
toxins_mod = 2 //they're not used to all our weird human bacteria.
oxy_mod = 0.6
radiation_mod = 0.2 //almost total radiation protection
bleed_mod = 2.2
warning_low_pressure = 50
hazard_low_pressure = 0
ethanol_resistance = 2
taste_sensitivity = TASTE_SENSITIVE
reagent_tag = IS_VAURCA
siemens_coefficient = 1 //setting it to 0 would be redundant due to LordLag's snowflake checks, plus batons/tasers use siemens now too.
breath_type = "phoron"
poison_type = "nitrogen" //a species that breathes plasma shouldn't be poisoned by it.
mob_size = 13 //their half an inch thick exoskeleton and impressive height, plus all of their mechanical organs.
natural_climbing = TRUE
climb_coeff = 0.75
blurb = "Type A are the most common type of Vaurca and can be seen as the 'backbone' of Vaurcae societies. Their most prevalent feature is their hardened exoskeleton, varying in colors \
in accordance to their hive. It is approximately half an inch thick among all Type A Vaurca. The carapace provides protection against harsh radiation, solar \
and otherwise, and acts as a pressure-suit to seal their soft inner core from the outside world. This allows most Type A Vaurca to have extended EVA \
expeditions, assuming they have internals. They are bipedal, and compared to warriors they are better suited for EVA and environments, and more resistant to brute force thanks to their \
thicker carapace, but also a fair bit slower and less agile. \
<b>Type A are comfortable in any department except security. There will almost never be a Worker in a security position, as they are as a type disposed against combat.</b>"
cold_level_1 = 50
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 600 //Default 1000
flags = NO_SLIP | NO_CHUBBY
spawn_flags = CAN_JOIN | IS_WHITELISTED
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
blood_color = "#E6E600" // dark yellow
flesh_color = "#E6E600"
base_color = "#575757"
death_message = "chitters faintly before crumbling to the ground, their eyes dead and lifeless..."
halloss_message = "crumbles to the ground, too weak to continue fighting."
heat_discomfort_strings = list(
"Your blood feels like its boiling in the heat.",
"You feel uncomfortably warm.",
"Your carapace feels hot as the sun."
)
cold_discomfort_strings = list(
"You chitter in the cold.",
"You shiver suddenly.",
"Your carapace is ice to the touch."
)
stamina = 100 // Long period of sprinting, but relatively low speed gain
sprint_speed_factor = 0.7
sprint_cost_factor = 0.30
stamina_recovery = 2 //slow recovery
has_organ = list(
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
"lungs" = /obj/item/organ/lungs/vaurca,
"filtration bit" = /obj/item/organ/vaurca/filtrationbit,
"right heart" = /obj/item/organ/heart/right,
"left heart" = /obj/item/organ/heart/left,
"phoron reserve tank" = /obj/item/organ/vaurca/preserve,
"liver" = /obj/item/organ/liver/vaurca,
"kidneys" = /obj/item/organ/kidneys/vaurca,
"brain" = /obj/item/organ/brain/vaurca,
"eyes" = /obj/item/organ/eyes/vaurca
)
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/vaurca),
"groin" = list("path" = /obj/item/organ/external/groin/vaurca),
"head" = list("path" = /obj/item/organ/external/head/vaurca),
"l_arm" = list("path" = /obj/item/organ/external/arm/vaurca),
"r_arm" = list("path" = /obj/item/organ/external/arm/right/vaurca),
"l_leg" = list("path" = /obj/item/organ/external/leg/vaurca),
"r_leg" = list("path" = /obj/item/organ/external/leg/right/vaurca),
"l_hand" = list("path" = /obj/item/organ/external/hand/vaurca),
"r_hand" = list("path" = /obj/item/organ/external/hand/right/vaurca),
"l_foot" = list("path" = /obj/item/organ/external/foot/vaurca),
"r_foot" = list("path" = /obj/item/organ/external/foot/right/vaurca)
)
default_h_style = "Classic Antennae"
move_trail = /obj/effect/decal/cleanable/blood/tracks/claw
/datum/species/bug/before_equip(var/mob/living/carbon/human/H)
. = ..()
H.gender = NEUTER
var/obj/item/clothing/shoes/sandal/S = new /obj/item/clothing/shoes/sandal(H)
if(H.equip_to_slot_or_del(S,slot_shoes))
S.autodrobe_no_remove = 1
var/obj/item/clothing/mask/breath/M = new /obj/item/clothing/mask/breath(H)
if(H.equip_to_slot_or_del(M, slot_wear_mask))
M.autodrobe_no_remove = 1
/datum/species/bug/equip_later_gear(var/mob/living/carbon/human/H)
if(istype(H.get_equipped_item(slot_back), /obj/item/weapon/storage/backpack))
H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/inhaler/phoron_special(H.back), slot_in_backpack)
else
H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/inhaler/phoron_special(H), slot_r_hand)
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()
@@ -5,7 +5,7 @@
language = LANGUAGE_VAURCA
primitive_form = "Vaurca Worker"
greater_form = "Vaurca Breeder"
icobase = 'icons/mob/human_races/subspecies/r_vaurcab.dmi'
icobase = 'icons/mob/human_races/vaurca/r_vaurcab.dmi'
slowdown = 0
brute_mod = 0.7
burn_mod = 1.2
@@ -41,9 +41,9 @@
name_plural = "Type CB"
bodytype = "Vaurca Breeder"
primitive_form = "Vaurca Warrior"
icon_template = 'icons/mob/human_races/subspecies/r_vaurcac.dmi'
icobase = 'icons/mob/human_races/subspecies/r_vaurcac.dmi'
deform = 'icons/mob/human_races/subspecies/r_vaurcac.dmi'
icon_template = 'icons/mob/human_races/vaurca/r_vaurcac.dmi'
icobase = 'icons/mob/human_races/vaurca/r_vaurcac.dmi'
deform = 'icons/mob/human_races/vaurca/r_vaurcac.dmi'
icon_x_offset = -8
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong)
rarity_value = 10
@@ -91,9 +91,9 @@
name_plural = "Type BA"
bodytype = "Vaurca Warform"
primitive_form = "Vaurca Warrior"
icon_template = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
icobase = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
deform = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
icon_template = 'icons/mob/human_races/vaurca/r_vaurcamecha.dmi'
icobase = 'icons/mob/human_races/vaurca/r_vaurcamecha.dmi'
deform = 'icons/mob/human_races/vaurca/r_vaurcamecha.dmi'
default_language = LANGUAGE_GIBBERING
language = LANGUAGE_VAURCA
icon_x_offset = -8