Adds the Zaddat Race + Modifies pressure damage calculations (#5869)

* Redoes the suit-wearing bugs, renaming them to the Zaddat.

(If this shows up on the main Polaris repo, I fucked it again, please yell at me until I unfuck it)

* finishes the zaddat species pending someone yelling at me and or me getting more/better sprites

adds three new accessories of dubious stylistic value for the gaudy-ass suit people

* i lied
engineers and other Zaddat who start with a hat will no longer burn in the harsh light of the station.
scarves and other decor items can now be equipped to space suits. cape, half-cape, and sash items now have valid slot flags

* gives zad a larynx

* gives Zaddat assisted languages

* zad sprites now have weird growths

* activate starvation mode

* mask is now red-faced so as not to give the zaddat skin cancer

* adds shrouds and zaddat hypos to cargo. renames zaddat hypos to glucose hypos since like, technically anyone can use them

* aand adds zad hypos to the fitness machines. thanks for letting us not starve, spacer guild

* adds zad hypos to the fitness vendor

* new purple zaddat icons (untested, probably fine)

* appeases anewbe

* something bad has happened

* Updates Zaddat per forum discussion
Flashes now deal significant burn to zaddat, enough to put them in crit with two flashes
Zaddat (and diona and vox) can no longer wear rigs
Shrouds no longer protect against shock damage, but do protect against radiation damage
Prometheans can now wear shrouds
Sprites are much prettier

* adds changelog

* Update zaddat.yml

* appeases anewbe
This commit is contained in:
elgeonmb
2019-02-06 21:34:21 -08:00
committed by Anewbe
parent abd71d0dba
commit 3e9624caa9
44 changed files with 398 additions and 20 deletions

View File

@@ -202,6 +202,19 @@
/datum/language/seromi/get_random_name(gender)
return ..(gender, 1, 4, 1.5)
/datum/language/zaddat
name = LANGUAGE_ZADDAT
desc = "A harsh buzzing language created by the Zaddat following their exodus from their homeworld."
speech_verb = "buzzes"
ask_verb = "buzzes"
exclaim_verb = "croaks"
colour = "zaddat"
key = "z"
space_chance = 20
syllables = list("z", "dz", "i", "iv", "ti", "az", "hix", "xo", "av", "xo", "x", "za", "at", "vi")
//Syllable Lists
/*
This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed,

View File

@@ -32,6 +32,28 @@
return list(HUMAN_EATING_BLOCKED_MOUTH, blocked)
return list(HUMAN_EATING_NO_ISSUE)
/mob/living/carbon/human/proc/get_coverage()
var/list/coverage = list()
for(var/obj/item/clothing/C in src)
if(item_is_in_hands(C))
continue
if(C.body_parts_covered & HEAD)
coverage += list(organs_by_name[BP_HEAD])
if(C.body_parts_covered & UPPER_TORSO)
coverage += list(organs_by_name[BP_TORSO])
if(C.body_parts_covered & LOWER_TORSO)
coverage += list(organs_by_name[BP_GROIN])
if(C.body_parts_covered & LEGS)
coverage += list(organs_by_name[BP_L_LEG], organs_by_name[BP_R_LEG])
if(C.body_parts_covered & ARMS)
coverage += list(organs_by_name[BP_R_ARM], organs_by_name[BP_L_ARM])
if(C.body_parts_covered & FEET)
coverage += list(organs_by_name[BP_L_FOOT], organs_by_name[BP_R_FOOT])
if(C.body_parts_covered & HANDS)
coverage += list(organs_by_name[BP_L_HAND], organs_by_name[BP_R_HAND])
return coverage
//This is called when we want different types of 'cloaks' to stop working, e.g. when attacking.
/mob/living/carbon/human/break_cloak()
if(mind && mind.changeling) //Changeling visible camo

View File

@@ -36,6 +36,9 @@
/mob/living/carbon/human/promethean/Initialize(var/new_loc)
return ..(new_loc, SPECIES_PROMETHEAN)
/mob/living/carbon/human/zaddat/New(var/new_loc)
return ..(new_loc, SPECIES_ZADDAT)
/mob/living/carbon/human/monkey/Initialize(var/new_loc)
return ..(new_loc, SPECIES_MONKEY)

View File

@@ -158,11 +158,11 @@
var/pressure_difference
// First get the absolute pressure difference.
if(pressure < ONE_ATMOSPHERE) // We are in an underpressure.
pressure_difference = ONE_ATMOSPHERE - pressure
if(pressure < species.safe_pressure) // We are in an underpressure.
pressure_difference = species.safe_pressure - pressure
else //We are in an overpressure or standard atmosphere.
pressure_difference = pressure - ONE_ATMOSPHERE
pressure_difference = pressure - species.safe_pressure
if(pressure_difference < 5) // If the difference is small, don't bother calculating the fraction.
pressure_difference = 0
@@ -175,10 +175,10 @@
// The difference is always positive to avoid extra calculations.
// Apply the relative difference on a standard atmosphere to get the final result.
// The return value will be the adjusted_pressure of the human that is the basis of pressure warnings and damage.
if(pressure < ONE_ATMOSPHERE)
return ONE_ATMOSPHERE - pressure_difference
if(pressure < species.safe_pressure)
return species.safe_pressure - pressure_difference
else
return ONE_ATMOSPHERE + pressure_difference
return species.safe_pressure + pressure_difference
/mob/living/carbon/human/handle_disabilities()
..()

View File

@@ -85,6 +85,7 @@
var/toxins_mod = 1 // Toxloss modifier
var/radiation_mod = 1 // Radiation modifier
var/flash_mod = 1 // Stun from blindness modifier.
var/flash_burn = 0 // how much damage to take from being flashed if light hypersensitive
var/sound_mod = 1 // Stun from sounds, I.E. flashbangs.
var/chemOD_mod = 1 // Damage modifier for overdose
var/vision_flags = SEE_SELF // Same flags as glasses.
@@ -145,6 +146,7 @@
var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
var/safe_pressure = ONE_ATMOSPHERE
var/light_dam // If set, mob will be damaged in light over this value and heal in light below its negative.
var/minimum_breath_pressure = 16 // Minimum required pressure for breath, in kPa

View File

@@ -308,6 +308,111 @@
/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?
gluttonous = 1
taste_sensitivity = TASTE_SENSITIVE
num_alternate_languages = 3
secondary_langs = list(LANGUAGE_ZADDAT, LANGUAGE_UNATHI)
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_SOL_COMMON, LANGUAGE_AKHANI, LANGUAGE_SIIK, LANGUAGE_GUTTER) //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
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 = 16
max_age = 90
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."
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 = "nitrogen" // technically it's a partial pressure thing but IDK if we can emulate that
genders = list(FEMALE, PLURAL) //females are polyp-producing, infertile females and males are nigh-identical
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
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
)
descriptors = list(
/datum/mob_descriptor/height = 0,
/datum/mob_descriptor/build = -1
)
/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, "Abnormal growths")
/datum/species/diona
name = SPECIES_DIONA
name_plural = "Dionaea"

View File

@@ -161,6 +161,7 @@ var/list/ai_verbs_default = list(
add_language(LANGUAGE_SIGN, 1)
add_language(LANGUAGE_ROOTLOCAL, 1)
add_language(LANGUAGE_TERMINUS, 1)
add_language(LANGUAGE_ZADDAT, 1)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.

View File

@@ -480,12 +480,14 @@
user.add_language(LANGUAGE_SIIK)
user.add_language(LANGUAGE_AKHANI)
user.add_language(LANGUAGE_SKRELLIAN)
user.add_language(LANGUAGE_ZADDAT)
user.add_language(LANGUAGE_SCHECHI)
else
user.remove_language(LANGUAGE_UNATHI)
user.remove_language(LANGUAGE_SIIK)
user.remove_language(LANGUAGE_AKHANI)
user.remove_language(LANGUAGE_SKRELLIAN)
user.remove_language(LANGUAGE_ZADDAT)
user.remove_language(LANGUAGE_SCHECHI)
is_active(mob/living/silicon/pai/user)

View File

@@ -23,7 +23,7 @@ var/global/list/robot_modules = list(
var/hide_on_manifest = 0
var/channels = list()
var/networks = list()
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_AKHANI = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0, LANGUAGE_TERMINUS = 1)
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_AKHANI = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0, LANGUAGE_TERMINUS = 1, LANGUAGE_ZADDAT = 0)
var/sprites = list()
var/can_be_pushed = 1
var/no_slip = 0
@@ -585,7 +585,8 @@ var/global/list/robot_modules = list(
LANGUAGE_SCHECHI = 1,
LANGUAGE_EAL = 1,
LANGUAGE_TERMINUS = 1,
LANGUAGE_SIGN = 0
LANGUAGE_SIGN = 0,
LANGUAGE_ZADDAT = 1,
)
/obj/item/weapon/robot_module/robot/clerical/butler

View File

@@ -16,7 +16,8 @@
LANGUAGE_SCHECHI = 0,
LANGUAGE_EAL = 1,
LANGUAGE_SIGN = 0,
LANGUAGE_TERMINUS = 1
LANGUAGE_TERMINUS = 1,
LANGUAGE_ZADDAT = 0
)
sprites = list(
"Cerberus" = "syndie_bloodhound",

View File

@@ -91,6 +91,7 @@
add_language(LANGUAGE_SCHECHI, 1)
add_language(LANGUAGE_SIGN, 1)
add_language(LANGUAGE_TERMINUS, 1)
add_language(LANGUAGE_ZADDAT = 0)
// Lorefolks say it may be so.
if(O.client && O.client.prefs)