diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 00c7ab061d5..399c7e879b8 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 57b7f4033a5..5f44ad8a8eb 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 4feb1658ac1..925abca388d 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 f7dc6e0f336..c9a43077b50 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 24a09572ea3..c4cd4992c14 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 e24403e03e2..1feb6fe92e2 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 033cc6180d5..d92658f99d4 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 53b2d835643..edd061654fe 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 1211aa6fbac..40e7b319ad9 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 c6eddffe83a..1117a0f8cc0 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 ea92ed27f19..c9731a0568c 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 650a4570309..a2138023eee 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -245,6 +245,22 @@ display_name = "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" path = /obj/item/clothing/accessory/asymmetric @@ -260,4 +276,4 @@ /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 diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index e053f3b8ef2..8f179dcb58b 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 f3dd1010581..0014e52a906 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 0fa9f83f52a..7d9f2593f36 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 78f49677798..f1f67925e21 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 00000000000..4fd1fde4be0 --- /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 97c2d3aa90c..3e01478371a 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 b1aab6de8c6..2f9db8203bb 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 47cb3b8de09..38afeb30618 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 24a63bf1a46..ec10dc90f8e 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 69fbb201c28..0eadc9b27c9 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 f3d86e9f764..5dd3c10f195 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 d3a50f3755b..c1c1cd7d82a 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 1434f9c1974..e74e8166cf9 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/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index 2a6c9878f16..b2c369884ff 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -330,6 +330,11 @@ reagent_tag = null assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) +/datum/species/zaddat + spawn_flags = SPECIES_CAN_JOIN + min_age = 18 + gluttonous = 0 + /datum/species/diona spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED min_age = 18 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7e4d921ca3a..fd55bb5fd09 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 fdaa9928164..dad52893cfe 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 eb288f90462..78b4ed005b2 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 72caaa2d734..662e2e1d890 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 0119dfb052d..945ffd53be2 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 eb3d3e19756..2fc228e5afa 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -242,6 +242,11 @@ 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) +/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" desc = "A refined version of the standard autoinjector, allowing greater capacity. \ @@ -346,4 +351,4 @@ . = ..() 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].") diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 3260ef2f1b3..abdfa2cb9d2 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -623,7 +623,7 @@ /obj/item/weapon/storage/backpack/saddlebag/tempest/ui_action_click() ambulance = !(ambulance) if(ambulance) - processing_objects.Add(src) + START_PROCESSING(SSobj, src) item_state = "tempestsaddlebag-amb" icon_state = "tempestbag-amb" if (ismob(loc)) @@ -644,7 +644,7 @@ /obj/item/weapon/storage/backpack/saddlebag/tempest/process() if(!ambulance) - processing_objects.Remove(src) + STOP_PROCESSING(SSobj, src) return if(world.time - ambulance_last_switch > 15) ambulance_state = !(ambulance_state) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 1a09a30f400..4fc84eeee6c 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 00000000000..667854662e5 --- /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 00000000000..71a38fb843c 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 00000000000..8b48b764205 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 e99e3a5d364..fd1af6e950b 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 2f875885a5f..ce472a456f2 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 164a90c0c16..03a5e7fb09e 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 50af23f601a..39421bd0d62 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 563611e0a42..f03de7c8ad7 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"