diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 00c7ab061d..399c7e879b 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -25,6 +25,7 @@ #define IS_XENOS 6 #define IS_TESHARI 7 #define IS_SLIME 8 +#define IS_ZADDAT 9 #define CE_STABLE "stable" // Inaprovaline #define CE_ANTIBIOTIC "antibiotic" // Antibiotics diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 57b7f4033a..5f44ad8a8e 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -264,6 +264,7 @@ #define SPECIES_PROMETHEAN "Promethean" #define SPECIES_DIONA "Diona" #define SPECIES_VOX "Vox" +#define SPECIES_ZADDAT "Zaddat" // Monkey and alien monkeys. #define SPECIES_MONKEY "Monkey" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 4feb1658ac..925abca388 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -51,6 +51,7 @@ #define LANGUAGE_EVENT1 "Occursus" #define LANGUAGE_AKHANI "Akhani" #define LANGUAGE_ALAI "Alai" +#define LANGUAGE_ZADDAT "Vedahq" #define LANGUAGE_GIBBERISH "Babel" // Language flags. diff --git a/code/datums/outfits/misc.dm b/code/datums/outfits/misc.dm index f7dc6e0f33..c9a43077b5 100644 --- a/code/datums/outfits/misc.dm +++ b/code/datums/outfits/misc.dm @@ -52,4 +52,9 @@ name = "Merchant - Vox" shoes = /obj/item/clothing/shoes/boots/jackboots/toeless uniform = /obj/item/clothing/under/vox/vox_robes - suit = /obj/item/clothing/suit/armor/vox_scrap \ No newline at end of file + suit = /obj/item/clothing/suit/armor/vox_scrap + +/decl/hierarchy/outfit/zaddat + name = "Zaddat Suit" + suit = /obj/item/clothing/suit/space/void/zaddat/ + mask = /obj/item/clothing/mask/gas/zaddat \ No newline at end of file diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 24a09572ea..c4cd4992c1 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -135,3 +135,12 @@ cost = 15 containertype = /obj/structure/closet/crate containername = "Holoplant crate" + +/datum/supply_pack/misc/glucose_hypos + name = "Glucose Hypoinjectors" + contains = list( + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5 + ) + cost = 25 + containertype = "obj/structure/closet/crate" + containername = "Glucose Hypo Crate" \ No newline at end of file diff --git a/code/datums/supplypacks/voidsuits.dm b/code/datums/supplypacks/voidsuits.dm index e24403e03e..1feb6fe92e 100644 --- a/code/datums/supplypacks/voidsuits.dm +++ b/code/datums/supplypacks/voidsuits.dm @@ -212,4 +212,15 @@ cost = 50 containertype = "/obj/structure/closet/crate/secure" containername = "Frontier Mining voidsuit crate" - access = access_mining \ No newline at end of file + access = access_mining + +/datum/supply_pack/voidsuits/zaddat + name = "Zaddat Shroud" + contains = list( + /obj/item/clothing/suit/space/void/zaddat = 1, + /obj/item/clothing/mask/gas/zaddat = 1 + ) + cost = 30 + containertype = "/obj/structure/closet/crate" + containername = "Zaddat Shroud crate" + access = null \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 033cc6180d..d92658f99d 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -803,6 +803,7 @@ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 5, /obj/item/weapon/reagent_containers/food/snacks/liquidfood = 5, /obj/item/weapon/reagent_containers/pill/diet = 25, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, /obj/item/weapon/towel/random = 40) contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 53b2d83564..edd061654f 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -101,6 +101,7 @@ H.eye_blurry = max(H.eye_blurry, flash_strength + 5) H.flash_eyes() H.adjustHalLoss(halloss_per_flash * (flash_strength / 5)) // Should take four flashes to stun. + H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns") else flashfail = 1 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 1211aa6fba..40e7b319ad 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -218,5 +218,6 @@ R.add_language(LANGUAGE_SCHECHI, 1) R.add_language(LANGUAGE_ROOTLOCAL, 1) R.add_language(LANGUAGE_TERMINUS, 1) + R.add_language(LANGUAGE_ZADDAT, 1) return 1 diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index c6eddffe83..1117a0f8cc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -49,7 +49,8 @@ starts_with = list( /obj/item/weapon/reagent_containers/food/drinks/milk = 6, /obj/item/weapon/reagent_containers/food/drinks/soymilk = 4, - /obj/item/weapon/storage/fancy/egg_box = 4) + /obj/item/weapon/storage/fancy/egg_box = 4, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 2) /obj/structure/closet/secure_closet/freezer/money diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index ea92ed27f1..c9731a0568 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -194,7 +194,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/device/camera, /obj/item/device/pda, /obj/item/device/radio/headset, - /obj/item/device/paicard + /obj/item/device/paicard, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose ) uncommon_loot = list( diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 650a457030..31821a2ac1 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -243,7 +243,26 @@ /datum/gear/accessory/locket display_name = "locket" +<<<<<<< HEAD path = /obj/item/clothing/accessory/locket +======= + path = /obj/item/clothing/accessory/locket + +/datum/gear/accessory/halfcape + display_name = "half cape" + path = /obj/item/clothing/accessory/halfcape + +/datum/gear/accessory/fullcape + display_name = "full cape" + path = /obj/item/clothing/accessory/fullcape + +/datum/gear/accessory/sash + display_name = "sash (colorable)" + path = /obj/item/clothing/accessory/sash + +/datum/gear/accessory/sash/New() + ..() + gear_tweaks = list(gear_tweak_free_color_choice) /datum/gear/accessory/asym display_name = "asymmetric jacket selection" @@ -260,4 +279,5 @@ /datum/gear/accessory/cowledvest display_name = "cowled vest" - path = /obj/item/clothing/accessory/cowledvest \ No newline at end of file + path = /obj/item/clothing/accessory/cowledvest +>>>>>>> 3e9624c... Adds the Zaddat Race + Modifies pressure damage calculations (#5869) diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index e053f3b8ef..8f179dcb58 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -1,4 +1,5 @@ // Alien clothing. + /datum/gear/suit/zhan_furs display_name = "Zhan-Khazan furs (Tajaran)" path = /obj/item/clothing/suit/tajaran/furs diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index f3dd101058..0014e52a90 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -85,6 +85,16 @@ feeding_port(user) ..() +/obj/item/clothing/mask/gas/zaddat + name = "Zaddat Veil" + desc = "A clear survival mask used by the Zaddat to filter out harmful nitrogen. Can be connected to an air supply and reconfigured to allow for safe eating." + icon_state = "zaddat_mask" + item_state = "zaddat_mask" + //body_parts_covered = 0 + species_restricted = list(SPECIES_ZADDAT) + flags_inv = HIDEEARS //semi-transparent + filtered_gases = list("phoron", "nitrogen", "sleeping_agent") + /obj/item/clothing/mask/gas/syndicate name = "tactical mask" desc = "A close-fitting tactical mask that can be connected to an air supply." diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index 0fa9f83f52..7d9f2593f3 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -17,7 +17,7 @@ SPECIES_VOX = 'icons/mob/species/vox/head.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi' ) - species_restricted = null + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_TESHARI) //vox, diona, and zaddat can't use hardsuits not designed for them /obj/item/clothing/gloves/gauntlets/rig name = "gauntlets" @@ -25,7 +25,7 @@ body_parts_covered = HANDS heat_protection = HANDS cold_protection = HANDS - species_restricted = null + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_TESHARI) gender = PLURAL /obj/item/clothing/shoes/magboots/rig @@ -33,7 +33,7 @@ body_parts_covered = FEET cold_protection = FEET heat_protection = FEET - species_restricted = null + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_TESHARI) gender = PLURAL icon_base = null @@ -57,6 +57,7 @@ SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi' ) supporting_limbs = list() + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_PROMETHEAN, SPECIES_TESHARI) //vox, diona, and zaddat can't use hardsuits not designed for them var/obj/item/weapon/material/knife/tacknife /obj/item/clothing/suit/space/rig/attack_hand(var/mob/living/M) @@ -114,6 +115,7 @@ heat_protection = HEAD|FACE|EYES cold_protection = HEAD|FACE|EYES flags = THICKMATERIAL|AIRTIGHT + species_restricted = null /obj/item/clothing/suit/lightrig name = "suit" @@ -123,6 +125,7 @@ cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS flags_inv = HIDEJUMPSUIT flags = THICKMATERIAL + species_restricted = null /obj/item/clothing/shoes/lightrig name = "boots" diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 78f4967779..f1f67925e2 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -71,7 +71,7 @@ siemens_coefficient = 0.9 species_restricted = list("exclude",SPECIES_DIONA) preserve_item = 1 - + valid_accessory_slots = (ACCESSORY_SLOT_OVER | ACCESSORY_SLOT_ARMBAND | ACCESSORY_SLOT_DECOR) var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit. /obj/item/clothing/suit/space/equipped(mob/M) diff --git a/code/modules/clothing/spacesuits/void/zaddat.dm b/code/modules/clothing/spacesuits/void/zaddat.dm new file mode 100644 index 0000000000..4fd1fde4be --- /dev/null +++ b/code/modules/clothing/spacesuits/void/zaddat.dm @@ -0,0 +1,97 @@ +/obj/item/clothing/head/helmet/space/void/zaddat + name = "\improper Hegemony Shroud helmet" + desc = "A Hegemony-designed utilitarian environment suit helmet, still common among the Spacer Zaddat." + icon_state = "zaddat_hegemony" + item_state_slots = list(slot_r_hand_str = "syndicate", slot_l_hand_str = "syndicate") + heat_protection = HEAD + body_parts_covered = HEAD|FACE|EYES + slowdown = 0.5 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 70) //realistically would have some armor but balance. + siemens_coefficient = 1 + + species_restricted = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN) //on request from maintainer + +/obj/item/clothing/suit/space/void/zaddat + name = "\improper Hegemony Shroud" + desc = "A Hegemony environment suit, still favored by the Spacer Zaddat because of its durability and ease of manufacture." + slowdown = 1 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 70) + siemens_coefficient = 1 + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank) + icon_state = "zaddat_hegemony" + helmet = new/obj/item/clothing/head/helmet/space/void/zaddat //shrouds come with helmets built-in + var/has_been_customized = FALSE + + species_restricted = list(SPECIES_ZADDAT, SPECIES_PROMETHEAN) + + breach_threshold = 12 + +/obj/item/clothing/suit/space/void/zaddat/verb/custom_suit() + set name = "Customize Shroud" + set category = "Object" + set desc = "Pick an appearence for your Shroud." + + var/mob/M = usr + var/suit_style = null + + if(has_been_customized) + to_chat(M, "This Shroud has already been customized!") + return 0 + + suit_style = input(M, "Which suit style would you like?") in list("Engineer", "Spacer", "Knight", "Fashion", "Bishop", "Hegemony") + switch(suit_style) + if("Engineer") + name = "\improper Engineer's Guild Shroud" + desc = "This rugged Shroud was created by the Xozi Engineering Guild." + icon_state = "zaddat_engie" + item_state = "zaddat_engie" + if(helmet) + helmet.name = "\improper Engineer's Guild Shroud helmet" + helmet.desc = "A Shroud helmet designed for good visibility in low-light environments." + helmet.icon_state = "zaddat_engie" + helmet.item_state = "zaddat_engie" + if("Spacer") + name = "\improper Spacer's Guild Shroud" + desc = "The blue plastic Shroud worn by members of the Zaddat Spacer's Guild." + icon_state = "zaddat_spacer" + item_state = "zaddat_spacer" + if(helmet) + helmet.name = "\improper Spacer's Guild Shroud helmet" + helmet.desc = "A cool plastic-and-glass helmet designed after popular adventure fiction." + helmet.icon_state = "zaddat_spacer" + helmet.item_state = "zaddat_spacer" + if("Knight") + name = "\improper Knight's Shroud" + desc = "This distinctive steel-plated Shroud was popularized by the Noble Guild." + icon_state = "zaddat_knight" + item_state = "zaddat_knight" + if(helmet) + helmet.name = "\improper Knight's Shroud helm" + helmet.desc = "This spaceworthy helmet was patterned after the knight's helmets used by Zaddat before their discovery by the Unathi." + helmet.icon_state = "zaddat_knight" + helmet.item_state = "zaddat_knight" + if("Fashion") + name = "\improper Avazi House Shroud" + desc = "The designers of the Avazi Fashion House are among the most renowned in Zaddat society, and their Shroud designs second to none." + icon_state = "zaddat_fashion" + item_state = "zaddat_fashion" + if(helmet) + helmet.name = "\improper Avazi House Shroud helmet" + helmet.desc = "The Avazi Fashion House recently designed this popular Shroud helmet, designed to pleasingly frame a Zaddat's face." + helmet.icon_state = "zaddat_fashion" + helmet.item_state = "zaddat_fashion" + if("Bishop") + name = "\improper Bishop-patterned Shroud" + desc = "The bold designers of the Dzaz Fashion House chose to make this Bishop-themed Shroud design as a commentary on the symbiotic nature of Vanax and human culture. Allegedly." + icon_state = "zaddat_bishop" + item_state = "zaddat_bishop" + if(helmet) + helmet.name = "\improper Bishop-patterned Shroud helmet" + helmet.desc = "The Shroud helmet that inspired a dozen lawsuits." + helmet.icon_state = "zaddat_bishop" + helmet.item_state = "zaddat_bishop" + + to_chat(M, "You finish customizing your Shroud. Looking good!") + has_been_customized = TRUE + M.regenerate_icons() + return 1 \ No newline at end of file diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 97c2d3aa90..3e01478371 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -395,3 +395,21 @@ ..(newloc, "glass") ..() + +/obj/item/clothing/accessory/halfcape + name = "half cape" + desc = "A tasteful half-cape, suitible for European nobles and retro anime protagonists." + icon_state = "halfcape" + slot = ACCESSORY_SLOT_DECOR + +/obj/item/clothing/accessory/fullcape + name = "full cape" + desc = "A gaudy full cape. You're thinking about wearing it, aren't you?" + icon_state = "fullcape" + slot = ACCESSORY_SLOT_DECOR + +/obj/item/clothing/accessory/sash + name = "sash" + desc = "A plain, unadorned sash." + icon_state = "sash" + slot = ACCESSORY_SLOT_OVER \ No newline at end of file diff --git a/code/modules/food/food/lunch.dm b/code/modules/food/food/lunch.dm index b1aab6de8c..2f9db8203b 100644 --- a/code/modules/food/food/lunch.dm +++ b/code/modules/food/food/lunch.dm @@ -9,7 +9,8 @@ var/list/lunchables_lunches_ = list(/obj/item/weapon/reagent_containers/food/sna /obj/item/weapon/reagent_containers/food/snacks/tastybread, /obj/item/weapon/reagent_containers/food/snacks/liquidfood, /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry, - /obj/item/weapon/reagent_containers/food/snacks/tossedsalad) + /obj/item/weapon/reagent_containers/food/snacks/tossedsalad, + /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose) var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snacks/donut/jelly, /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 47cb3b8de0..38afeb3061 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -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, diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 24a63bf1a4..ec10dc90f8 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index 69fbb201c2..0eadc9b27c 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f3d86e9f76..5dd3c10f19 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -159,11 +159,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 @@ -176,10 +176,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() ..() diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index d3a50f3755..c1c1cd7d82 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 1434f9c197..e74e8166cf 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -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" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7e4d921ca3..fd55bb5fd0 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -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. diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index fdaa992816..dad52893cf 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -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) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index eb288f9046..78b4ed005b 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -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 @@ -588,7 +588,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 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index 72caaa2d73..662e2e1d89 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -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", diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 0119dfb052..945ffd53be 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -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) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index eb3d3e1975..9eafe5733f 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -241,6 +241,13 @@ name = "bone repair injector" desc = "A refined version of the standard autoinjector, allowing greater capacity. This one excels at treating damage to bones." filled_reagents = list("inaprovaline" = 5, "osteodaxon" = 10) +<<<<<<< HEAD +======= + +/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose + name = "glucose hypo" + desc = "A hypoinjector filled with glucose, used for critically malnourished patients and voidsuited workers." + filled_reagents = list("glucose" = 15) /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/stimm name = "stimm injector" @@ -346,4 +353,5 @@ . = ..() if(.) // Will occur if successfully injected. infect_mob_random_lesser(H) - add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].") \ No newline at end of file + add_attack_logs(user, H, "Infected \the [H] with \the [src], by \the [user].") +>>>>>>> 3e9624c... Adds the Zaddat Race + Modifies pressure damage calculations (#5869) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 1a09a30f40..4fc84eeee6 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -104,6 +104,7 @@ h1.alert, h2.alert {color: #000000;} .daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;} .bug {color: #9e9e39;} .vox {color: #AA00AA;} +.zaddat {color: #941C1C;} .rough {font-family: "Trebuchet MS", cursive, sans-serif;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .terminus {font-family: "Times New Roman", Times, serif, sans-serif} diff --git a/html/changelogs/zaddat.yml b/html/changelogs/zaddat.yml new file mode 100644 index 0000000000..667854662e --- /dev/null +++ b/html/changelogs/zaddat.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Elgeonmb + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added the Zaddat species, voidsuit-clad fragile bug people. Whitelist applications will be available at a later date." + - rscadd: "Added glucose hypos to the SWEATMAX vendors and a few other places thoughout the station." + - rscadd: "Zaddat equipment is now available through cargo." + - rscadd: "Some new, very very chuuni accessories to play with; the half cape, the full cape, and the sash" + - tweak: "Most accessories can now fit on suits." + - rscdel: "Dionaea and vox can no longer use station rigs." diff --git a/icons/mob/human_races/r_def_zaddat.dmi b/icons/mob/human_races/r_def_zaddat.dmi new file mode 100644 index 0000000000..71a38fb843 Binary files /dev/null and b/icons/mob/human_races/r_def_zaddat.dmi differ diff --git a/icons/mob/human_races/r_zaddat.dmi b/icons/mob/human_races/r_zaddat.dmi new file mode 100644 index 0000000000..8b48b76420 Binary files /dev/null and b/icons/mob/human_races/r_zaddat.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index e99e3a5d36..fd1af6e950 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/spacesuit.dmi b/icons/mob/spacesuit.dmi index 2f875885a5..ce472a456f 100644 Binary files a/icons/mob/spacesuit.dmi and b/icons/mob/spacesuit.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 164a90c0c1..03a5e7fb09 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/spacesuits.dmi b/icons/obj/clothing/spacesuits.dmi index 50af23f601..39421bd0d6 100644 Binary files a/icons/obj/clothing/spacesuits.dmi and b/icons/obj/clothing/spacesuits.dmi differ diff --git a/vorestation.dme b/vorestation.dme index d05be5ff27..9e1214b4d6 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1660,6 +1660,7 @@ #include "code\modules\clothing\spacesuits\void\void.dm" #include "code\modules\clothing\spacesuits\void\void_vr.dm" #include "code\modules\clothing\spacesuits\void\wizard.dm" +#include "code\modules\clothing\spacesuits\void\zaddat.dm" #include "code\modules\clothing\suits\armor.dm" #include "code\modules\clothing\suits\armor_vr.dm" #include "code\modules\clothing\suits\bio.dm"