Sandstorm Tweaks (#19370)

Sandstorm damage now respects armor, and will not damage Vaurca and IPCs
as much.
Ponchos, mantles, straw hats, Unathi robes, and hoods now protect
against weather.
Sandstorms can now cause pain and impair vision if a mob's eyes are
unprotected.
Adds protective gear to Wasteland ghostroles who didn't already have it.

---------

Signed-off-by: RustingWithYou <63625389+RustingWithYou@users.noreply.github.com>
Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
This commit is contained in:
RustingWithYou
2024-07-01 13:12:32 +00:00
committed by GitHub
co-authored by Matt Atlas
parent 1926b6b612
commit 81f77e6e43
28 changed files with 222 additions and 30 deletions
@@ -49,6 +49,7 @@
icon_override = null
contained_sprite = TRUE
var/cape_backing_state = "cape_backing"
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/dominia_cape/white
name = "white dominian cape"
@@ -498,6 +499,9 @@
name = "black zhao noble dress"
house = "zhao"
/obj/item/clothing/accessory/poncho/dominia
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/dominia/red/surcoat
name = "tribunalist surcoat"
desc = "A simple red surcoat commonly worn by Dominian clergy members."
@@ -130,6 +130,7 @@
icon = 'icons/clothing/suits/capes/golden_cape.dmi'
contained_sprite = TRUE
icon_override = null
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/goldendeep/flowingcloak
name = "flowing cloak"
@@ -5,6 +5,7 @@
icon_state = "ronin_hat"
item_state = "ronin_hat"
contained_sprite = TRUE
protects_against_weather = TRUE
/obj/item/clothing/head/unathi/deco
name = "decorated straw hat"
+1
View File
@@ -158,6 +158,7 @@
item_state = "nature_scarf"
icon_override = null
contained_sprite = TRUE
protects_against_weather = FALSE
// Techno Outfit
/obj/item/clothing/head/wizard/techno
@@ -8,6 +8,7 @@
desc = "A traditional Unathi garment."
icon_state = "roughspun_robe"
item_state = "roughspun_robe"
protects_against_weather = TRUE
/obj/item/clothing/suit/unathi/robe/beige
color = "#DBC684"
@@ -57,6 +58,7 @@
flags_inv = HIDEJUMPSUIT|HIDETAIL
species_restricted = list(BODYTYPE_UNATHI)
contained_sprite = TRUE
protects_against_weather = TRUE
/obj/item/clothing/suit/armor/unathi/ancient
name = "ancient bronze armor"
@@ -22,6 +22,7 @@
sprite_sheets = list(
BODYTYPE_VAURCA_BULWARK = 'icons/mob/species/bulwark/accessories.dmi'
)
var/protects_against_weather = FALSE
/obj/item/clothing/accessory/Destroy()
on_removed()
@@ -400,6 +401,7 @@
slot = ACCESSORY_SLOT_CAPE
contained_sprite = TRUE
var/allow_tail_hiding = TRUE //in case if you want to allow someone to switch the HIDETAIL var or not
protects_against_weather = TRUE
/obj/item/clothing/accessory/poncho/verb/toggle_hide_tail()
set name = "Toggle Tail Coverage"
@@ -666,6 +668,7 @@
item_state = "starcape"
flippable = TRUE
contained_sprite = FALSE
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/shouldercape/star
name = "star cape"
@@ -744,6 +747,7 @@
item_state = "trinary_cape"
overlay_state = "trinary_cape"
contained_sprite = FALSE
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/trinary/pellegrina
name = "trinary perfection pellegrina"
@@ -10,6 +10,7 @@
contained_sprite = TRUE
action_button_name = "Adjust Hood"
var/up = TRUE
protects_against_weather = TRUE
/obj/item/clothing/accessory/sinta_hood/get_ear_examine_text(var/mob/user, var/ear_text = "left")
return "on [user.get_pronoun("his")] head"
@@ -64,6 +65,7 @@
item_state = "maxtlatl"
icon_override = null
contained_sprite = TRUE
protects_against_weather = FALSE
/obj/item/clothing/accessory/poncho/unathimantle
name = "desert hide mantle"
@@ -205,3 +207,4 @@
build_from_parts = TRUE
worn_overlay = "chain"
has_accents = TRUE
protects_against_weather = FALSE
@@ -66,6 +66,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
/mob/living/carbon/human/stok/moghes
faction = "Moghes"
resists_weather = TRUE
/mob/living/carbon/human/bug/Initialize(mapload)
. = ..(mapload, SPECIES_MONKEY_VAURCA)
@@ -77,3 +77,6 @@
///what icon the mob uses for speechbubbles
var/bubble_icon = "default"
///If true, ignores weather effects
var/resists_weather = FALSE
@@ -35,6 +35,7 @@
bullet = ARMOR_BALLISTIC_MINOR,
bomb = ARMOR_BOMB_MINOR
)
resists_weather = TRUE
sample_data = list("Cellular biochemistry shows high metabolic capacity", "Tissue sample contains high muscle content", "Genetic biomarkers identified linked with passiveness and domestication")
/mob/living/simple_animal/threshbeast/saddle
@@ -85,6 +86,7 @@
laser = ARMOR_LASER_MINOR,
bomb = ARMOR_BOMB_MINOR
)
resists_weather = TRUE
sample_data = list("Cellular biochemistry shows high metabolic capacity", "Tissue sample contains high muscle content", "Genetic biomarkers identified linked with domestication", "Intracellular keratin synthesis present")
/mob/living/simple_animal/hostile/retaliate/hegeranzi/saddle
@@ -98,6 +100,7 @@
name = "orszi fish"
desc = "A small fish native to the rivers and seas of the planet Moghes, the orzsi or 'swarm fish' is a common food source for noble and common Unathi alike."
faction = "Moghes"
resists_weather = TRUE
/mob/living/simple_animal/otzek
name = "otzek"
@@ -127,6 +130,7 @@
butchering_products = list(/obj/item/stack/material/animalhide/lizard = 4)
meat_type = /obj/item/reagent_containers/food/snacks/meat/moghes
meat_amount = 16
resists_weather = TRUE
sample_data = list("Cellular biochemistry geared towards the use of plant-based nutrition", "Genetic biomarkers identified linked with high reproductive rates", "Intracellular keratin synthesis present")
/mob/living/simple_animal/miervesh
@@ -155,6 +159,7 @@
butchering_products = list(/obj/item/stack/material/animalhide = 1)
meat_type = /obj/item/reagent_containers/food/snacks/meat/moghes
meat_amount = 1
resists_weather = TRUE
sample_data = list("Cellular biochemistry shows signs of rapid respiration", "Genetic biomarkers identified linked with passiveness and domestication", "Extracellular gas detection present")
var/chosen_icon
@@ -35,6 +35,7 @@
faction = "Moghes"
butchering_products = list(/obj/item/stack/material/animalhide/lizard = 20)
resists_weather = TRUE
sample_data = list("Cellular biochemistry shows high metabolic capacity", "Tissue sample contains high muscle content", "Genetic biomarkers identified linked with aggressiveness", "Intracellular keratin synthesis present")
var/is_devouring = FALSE
@@ -164,6 +165,7 @@
meat_type = /obj/item/reagent_containers/food/snacks/meat/moghes
meat_amount = 10
faction = "Moghes"
resists_weather = TRUE
sample_data = list("Cellular structures adapted to provide strong resonance protection", "Genetic biomarkers identified linked with agressiveness")
var/shriek_time = 0
+5
View File
@@ -1459,6 +1459,11 @@
var/obj/item/clothing/suit/check_body = get_equipped_item(slot_wear_suit_str)
if(!istype(check_body) || !check_body.protects_against_weather)
return
for(var/obj/item/clothing/clothing in list(w_uniform, wear_suit, head))
for(var/obj/item/clothing/accessory/check_accessory in clothing)
if(!istype(check_accessory) || !check_accessory.protects_against_weather)
continue
LAZYADD(., check_accessory)
LAZYADD(., check_head)
LAZYADD(., check_body)
@@ -30,6 +30,10 @@
target = /singleton/state/weather/rain/hail
likelihood_weighting = 20
/singleton/state_transition/weather/sandstorm
target = /singleton/state/weather/sandstorm
likelihood_weighting = 20
//weather for planets
//snow planets
@@ -68,7 +72,7 @@
//arctic planets
/singleton/state_transition/weather/calm/arctic_planet
target = /singleton/state/weather/calm/lava_planet
target = /singleton/state/weather/calm/arctic_planet
/singleton/state_transition/weather/hail/arctic_planet
target = /singleton/state/weather/rain/hail/arctic_planet
@@ -78,6 +82,8 @@
/singleton/state_transition/weather/calm/desert_planet
target = /singleton/state/weather/calm/desert_planet
/singleton/state_transition/weather/sandfall/desert_planet
target = /singleton/state/weather/sandfall/desert_planet
/singleton/state_transition/weather/sandstorm/desert_planet
target = /singleton/state/weather/sandstorm/desert_planet
likelihood_weighting = 20
+49 -7
View File
@@ -181,7 +181,7 @@
/singleton/state/weather/rain/hail/handle_exposure_effects(var/mob/living/M, var/obj/abstract/weather_system/weather)
to_chat(M, SPAN_DANGER("You are pelted by a shower of hail!"))
M.adjustBruteLoss(rand(1,3))
M.apply_damage(rand(1,3), DAMAGE_BRUTE)
/singleton/state/weather/ash
name = "Ash"
@@ -190,6 +190,14 @@
cosmetic_span_class = "warning"
cosmetic_messages = list("Drifts of ash fall from the sky.")
/singleton/state/weather/sandfall
name = "Sand"
icon_state = "sand_light"
descriptor = "The wind rises, stirring up gusts of sand."
cosmetic_span_class = "warning"
cosmetic_messages = list("Scattered gusts of sand fall from the sky.")
transitions = list(/singleton/state_transition/weather/sandstorm)
/singleton/state/weather/sandstorm
name = "Sandstorm"
icon_state = "sandstorm"
@@ -199,12 +207,37 @@
"The wind howls around you.",
"Swirling sand obscures your vision."
)
protected_messages = list("Stinging sand blows against $ITEM$.")
protected_messages = list("$ITEM$ shields you from the howling sandstorm.")
ambient_sounds = list('sound/effects/weather/sandstorm.ogg')
/singleton/state/weather/sandstorm/handle_exposure_effects(mob/living/M, obj/abstract/weather_system/weather)
to_chat(M, SPAN_DANGER("You are blasted by a gust of stinging sand!"))
M.adjustBruteLoss(rand(1,5))
if(M.resists_weather) //Not realistic that they're just immune, but we don't have AI for simplemobs seeking shelter from storms.
return
else if(isvaurca(M)) //Bugs have sealed carapaces
to_chat(M, SPAN_WARNING("Your carapace protects you from the stinging sand!"))
else if(isipc(M) || issilicon(M)) //Metal is more durable than meat
to_chat(M, SPAN_DANGER("Your chassis is scratched by a gust of stinging sand!"))
M.apply_damage(1, DAMAGE_BRUTE)
else
to_chat(M, SPAN_DANGER("You are blasted by a gust of stinging sand!"))
M.apply_damage(rand(1,3), DAMAGE_BRUTE)
if(ishuman(M) && prob(50)) //only a 50% chance of getting in the eyes to avoid being too punishing
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.get_eyes()
if(!E) //No eyes, no problem
return
if (istype(E) && (E.status & (ORGAN_ROBOT|ORGAN_ADV_ROBOT)))
to_chat(H, SPAN_WARNING("Your mechanical eyes are immune to the sandstorm!"))
return
for(var/obj/item/clothing/C in list(H.wear_mask, H.head, H.glasses))
if(C.body_parts_covered & EYES)
to_chat(H, SPAN_WARNING("\The [C] shields your eyes from the sand."))
return
to_chat(H, SPAN_DANGER("The stinging sand gets in your eyes!"))
H.eye_blurry = max(H.eye_blurry, 15)
H.eye_blind = max(H.eye_blind, 5)
H.apply_effect(rand(5,10), DAMAGE_PAIN)
//planet weathers
@@ -258,10 +291,19 @@
/singleton/state/weather/rain/hail/arctic_planet
transitions = list(/singleton/state_transition/weather/calm/arctic_planet)
//desert planet - only calm or sandstorm
//desert planet - only calm, sandfall, or sandstorm
/singleton/state/weather/calm/desert_planet
transitions = list(/singleton/state_transition/weather/sandstorm/desert_planet)
transitions = list(/singleton/state_transition/weather/sandfall/desert_planet)
/singleton/state/weather/sandfall/desert_planet
transitions = list(
/singleton/state_transition/weather/calm/desert_planet,
/singleton/state_transition/weather/sandstorm/desert_planet
)
/singleton/state/weather/sandstorm/desert_planet
transitions = list(/singleton/state_transition/weather/calm/desert_planet)
transitions = list(
/singleton/state_transition/weather/calm/desert_planet,
/singleton/state_transition/weather/sandfall/desert_planet
)