Skip to content

Commit

Permalink
Merge upstream 12.10.24 (#552)
Browse files Browse the repository at this point in the history
## About The Pull Request
мергаем апстрим
  • Loading branch information
larentoun authored Oct 12, 2024
2 parents 1f9bbd6 + 3d3b7ec commit 4108422
Show file tree
Hide file tree
Showing 157 changed files with 2,360 additions and 860 deletions.
7 changes: 1 addition & 6 deletions _maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,7 @@
/obj/item/cult_shift,
/obj/effect/decal/remains/human,
/obj/item/melee/cultblade/dagger,
/obj/effect/step_trigger/sound_effect{
happens_once = 1;
name = "\proper a grave mistake";
sound = 'sound/effects/hallucinations/i_see_you1.ogg';
triggerer_only = 1
},
/obj/effect/step_trigger/sound_effect/lavaland_cult_altar,
/obj/effect/step_trigger/message{
message = "<span class='cult italic'><b><span class='big'>You've made a grave mistake, haven't you?</span></b></span>";
name = "ohfuck"
Expand Down
4 changes: 1 addition & 3 deletions _maps/RandomRuins/SpaceRuins/hauntedtradingpost.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -5468,11 +5468,9 @@
/area/ruin/space/has_grav/hauntedtradingpost/employees/breakroom)
"Vl" = (
/obj/structure/table/wood,
/obj/item/toy/figure/wizard{
/obj/item/toy/figure/wizard/special{
pixel_y = 9;
pixel_x = -4;
toysay = "CLANG!";
toysound = 'sound/effects/clang.ogg'
},
/obj/item/toy/figure/warden{
name = "\improper Knight action figure";
Expand Down
6 changes: 4 additions & 2 deletions _maps/map_files/wawastation/wawastation.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -4937,9 +4937,9 @@
/turf/open/floor/iron/dark,
/area/station/security/courtroom)
"bLI" = (
/obj/machinery/processor/slime,
/obj/effect/turf_decal/bot_red,
/obj/effect/turf_decal/stripes/line,
/obj/machinery/processor/slime,
/turf/open/floor/iron/white/textured_large,
/area/station/science/xenobiology)
"bLS" = (
Expand Down Expand Up @@ -46862,6 +46862,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/item/stack/sheet/mineral/plasma,
/turf/open/floor/iron/white/textured_large,
/area/station/science/xenobiology)
"qGN" = (
Expand Down Expand Up @@ -47527,11 +47528,11 @@
/turf/open/floor/plating,
/area/station/maintenance/department/engine)
"qUi" = (
/obj/machinery/processor/slime,
/obj/effect/turf_decal/bot_red,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
/obj/machinery/processor/slime,
/turf/open/floor/iron/white/textured_large,
/area/station/science/xenobiology)
"qUl" = (
Expand Down Expand Up @@ -48756,6 +48757,7 @@
pixel_y = 8
},
/obj/effect/turf_decal/stripes/line,
/obj/item/stack/sheet/mineral/plasma,
/turf/open/floor/iron/white/textured_large,
/area/station/science/xenobiology)
"rms" = (
Expand Down
3 changes: 2 additions & 1 deletion code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
#define DNA_MOTH_MARKINGS_BLOCK 13
#define DNA_MUSHROOM_CAPS_BLOCK 14
#define DNA_POD_HAIR_BLOCK 15
#define DNA_FISH_TAIL_BLOCK 16

// Hey! Listen up if you're here because you're adding a species feature!
//
Expand All @@ -68,7 +69,7 @@
// (Which means having a DNA block for a feature tied to a mob without DNA is entirely pointless.)

/// Total amount of DNA blocks, must be equal to the highest DNA block number
#define DNA_FEATURE_BLOCKS 15
#define DNA_FEATURE_BLOCKS 16

#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/alerts.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#define ALERT_TOO_MUCH_NITRO "too_much_nitro"
#define ALERT_NOT_ENOUGH_NITRO "not_enough_nitro"

#define ALERT_NOT_ENOUGH_WATER "not_enough_water"

/** Mob related */
#define ALERT_SUCCUMB "succumb"
#define ALERT_BUCKLED "buckled"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals/signals_datum.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,6 @@

///from /datum/component/on_hit_effect/send_signal(): (user, target, hit_zone)
#define COMSIG_ON_HIT_EFFECT "comsig_on_hit_effect"

///from /datum/component/bubble_icon_override/get_bubble_icon(): (list/holder)
#define COMSIG_GET_BUBBLE_ICON "get_bubble_icon"
2 changes: 0 additions & 2 deletions code/__DEFINES/dcs/signals/signals_fish.dm
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
#define COMSIG_FISH_EATEN_BY_OTHER_FISH "fish_eaten_by_other_fish"
///From /obj/item/fish/generate_reagents_to_add, which returns a holder when the fish is eaten or composted for example: (list/reagents)
#define COMSIG_GENERATE_REAGENTS_TO_ADD "generate_reagents_to_add"
///From /obj/item/fish/feed: (fed_reagents, fed_reagent_type)
#define COMSIG_FISH_FED "fish_on_fed"
///From /obj/item/fish/update_size_and_weight: (new_size, new_weight)
#define COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT "fish_update_size_and_weight"
///From /obj/item/fish/update_fish_force: (weight_rank, bonus_malus)
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,9 @@
#define COMSIG_LIVING_GRAB "living_grab"
// Return COMPONENT_CANCEL_ATTACK_CHAIN / COMPONENT_SKIP_ATTACK_CHAIN to stop the grab

/// From /datum/component/edible/get_perceived_food_quality(): (datum/component/edible/edible, list/extra_quality)
#define COMSIG_LIVING_GET_PERCEIVED_FOOD_QUALITY "get_perceived_food_quality"

///Called when living finish eat (/datum/component/edible/proc/On_Consume)
#define COMSIG_LIVING_FINISH_EAT "living_finish_eat"

Expand Down
2 changes: 1 addition & 1 deletion code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list(

#define ismecha(A) (istype(A, /obj/vehicle/sealed/mecha))

#define ismopable(A) (A && ((A.plane == FLOOR_PLANE) ? (A.layer <= FLOOR_CLEAN_LAYER) : (A.layer <= GAME_CLEAN_LAYER))) //If something can be cleaned by floor-cleaning devices such as mops or clean bots
#define ismopable(A) (A && ((PLANE_TO_TRUE(A.plane) == FLOOR_PLANE) ? (A.layer <= FLOOR_CLEAN_LAYER) : (A.layer <= GAME_CLEAN_LAYER))) //If something can be cleaned by floor-cleaning devices such as mops or clean bots

#define isorgan(A) (istype(A, /obj/item/organ))

Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,8 @@
#define SLIP_WHEN_CRAWLING (1<<4)
/// the mob won't slip if the turf has the TRAIT_TURF_IGNORE_SLIPPERY trait.
#define SLIPPERY_TURF (1<<5)
/// For mobs who are slippery, this requires the mob holding it to be lying down.
#define SLIPPERY_WHEN_LYING_DOWN (1<<6)

#define MAX_CHICKENS 50

Expand Down
4 changes: 4 additions & 0 deletions code/__DEFINES/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,7 @@
/// Meaning that if the message is visual, and sourced from a blind mob, they will not see it.
/// This flag skips that behavior, and will always show the self message to the mob.
#define ALWAYS_SHOW_SELF_MESSAGE (1<<1)

///Defines for priorities for the bubble_icon_override comp
#define BUBBLE_ICON_PRIORITY_ACCESSORY 2
#define BUBBLE_ICON_PRIORITY_ORGAN 1
4 changes: 4 additions & 0 deletions code/__DEFINES/sound.dm
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@

#define INTERACTION_SOUND_RANGE_MODIFIER -3
#define EQUIP_SOUND_VOLUME 30
#define LIQUID_SLOSHING_SOUND_VOLUME 10
#define PICKUP_SOUND_VOLUME 15
#define DROP_SOUND_VOLUME 20
#define YEET_SOUND_VOLUME 90
Expand Down Expand Up @@ -193,3 +194,6 @@ GLOBAL_LIST_INIT(announcer_keys, list(
#define SFX_LIQUID_POUR "liquid_pour"
#define SFX_SNORE_FEMALE "snore_female"
#define SFX_SNORE_MALE "snore_male"
#define SFX_PLASTIC_BOTTLE_LIQUID_SLOSH "plastic_bottle_liquid_slosh"
#define SFX_DEFAULT_LIQUID_SLOSH "default_liquid_slosh"
#define SFX_PLATE_ARMOR_RUSTLE "plate_armor_rustle"
28 changes: 28 additions & 0 deletions code/__DEFINES/traits/declarations.dm
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_DISGUISED "disguised"
/// Use when you want a mob to be able to metabolize plasma temporarily (e.g. plasma fixation disease symptom)
#define TRAIT_PLASMA_LOVER_METABOLISM "plasma_lover_metabolism"
/// The mob is not harmed by tetrodotoxin. Instead, it heals them like omnizine
#define TRAIT_TETRODOTOXIN_HEALING "tetrodotoxin_healing"
#define TRAIT_EASYDISMEMBER "easy_dismember"
#define TRAIT_LIMBATTACHMENT "limb_attach"
#define TRAIT_NOLIMBDISABLE "no_limb_disable"
Expand Down Expand Up @@ -247,6 +249,16 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_MESSAGE_IN_A_BOTTLE_LOCATION "message_in_a_bottle_location"
/// Stops other objects of the same type from being inserted inside the same aquarium it's in.
#define TRAIT_UNIQUE_AQUARIUM_CONTENT "unique_aquarium_content"
/// Mobs that hate showers, being sprayed with water etc.
#define TRAIT_WATER_HATER "water_hater"
/// Improved boons from showers and some features centered around water, should also suppress TRAIT_WATER_HATER
#define TRAIT_WATER_ADAPTATION "water_adaptation"
/// Tells us that the mob urrently has the fire_handler/wet_stacks status effect
#define TRAIT_IS_WET "is_wet"
/// Mobs with this trait stay wet for longer and resist fire decaying wetness
#define TRAIT_WET_FOR_LONGER "wet_for_longer"
/// Mobs with this trait will be immune to slipping while also being slippery themselves when lying on the floor
#define TRAIT_SLIPPERY_WHEN_WET "slippery_when_wet"
/// This trait lets you evaluate someone's fitness level against your own
#define TRAIT_EXAMINE_FITNESS "reveal_power_level"
/// These mobs have particularly hygienic tongues
Expand Down Expand Up @@ -724,6 +736,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_HONKSPAMMING "trait_honkspamming"
/// Required by the waddling element since there are multiple sources of it.
#define TRAIT_WADDLING "trait_waddling"
/// Mobs with trait will still waddle even when lying on the floor and make a different footstep sound when doing so.
#define TRAIT_FLOPPING "trait_flopping"
/// Required by the on_hit_effect element, which is in turn added by other elements.
#define TRAIT_ON_HIT_EFFECT "trait_on_hit_effect"

Expand Down Expand Up @@ -839,6 +853,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_EVIL "evil"
#define TRAIT_FRIENDLY "friendly"
#define TRAIT_GRABWEAKNESS "grab_weakness"
#define TRAIT_GRABRESISTANCE "grab_resistance"
#define TRAIT_SNOB "snob"
#define TRAIT_BALD "bald"
#define TRAIT_SHAVED "shaved"
Expand Down Expand Up @@ -995,6 +1010,15 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_FISH_SHOULD_TWOHANDED "fish_should_twohanded"
///This fish won't be killed when cooked.
#define TRAIT_FISH_SURVIVE_COOKING "fish_survive_cooking"
/**
* This fish has been fed teslium without the electrogenesis having trait.
* Gives the electrogenesis, but at halved output, and it hurts the fish over time.
*/
#define TRAIT_FISH_ON_TESLIUM "fish_on_teslium"
/// This fish has been fed growth serum or something and will grow 5 times faster, up to 50% weight and size gain when fed.
#define TRAIT_FISH_QUICK_GROWTH "fish_quick_growth"
/// This fish has been fed mutagen or something. Evolutions will have more than twice the probability
#define TRAIT_FISH_MUTAGENIC "fish_mutagenic"

/// Trait given to angelic constructs to let them purge cult runes
#define TRAIT_ANGELIC "angelic"
Expand Down Expand Up @@ -1071,6 +1095,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define STATION_TRAIT_UNIQUE_AI "station_trait_unique_ai"
#define STATION_TRAIT_UNNATURAL_ATMOSPHERE "station_trait_unnatural_atmosphere"
#define STATION_TRAIT_VENDING_SHORTAGE "station_trait_vending_shortage"
#define STATION_TRAIT_SPIKED_DRINKS "station_trait_spiked_drinks"

///Deathmatch traits
#define TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS "deathmath_explosive_implants"
Expand Down Expand Up @@ -1296,6 +1321,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
///Trait which allows mobs to parry mining mob projectiles
#define TRAIT_MINING_PARRYING "mining_parrying"

///Trait which silences all chemical reactions in its container
#define TRAIT_SILENT_REACTIONS "silent_reactions"

/**
*
* This trait is used in some interactions very high in the interaction chain to allow
Expand Down
4 changes: 2 additions & 2 deletions code/__HELPERS/game.dm
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,7 @@
* Tips that starts with the @ character won't be html encoded. That's necessary for any tip containing markup tags,
* just make sure they don't also have html characters like <, > and ' which will be garbled.
*/
/proc/send_tip_of_the_round(target, selected_tip)
/proc/send_tip_of_the_round(target, selected_tip, source = "Tip of the round")
var/message
if(selected_tip)
message = selected_tip
Expand All @@ -320,4 +320,4 @@
message = html_encode(message)
else
message = copytext(message, 2)
to_chat(target, span_purple(examine_block("<span class='oocplain'><b>Tip of the round: </b>[message]</span>")))
to_chat(target, span_purple(examine_block("<span class='oocplain'><b>[source]: </b>[message]</span>")))
13 changes: 13 additions & 0 deletions code/_globalvars/traits/_traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_WADDLING" = TRAIT_WADDLING,
"TRAIT_WAS_RENAMED" = TRAIT_WAS_RENAMED,
"TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE,
"TRAIT_SILENT_REACTIONS" = TRAIT_SILENT_REACTIONS,
),
/datum/controller/subsystem/economy = list(
"TRAIT_MARKET_CRASHING" = TRAIT_MARKET_CRASHING,
Expand Down Expand Up @@ -111,6 +112,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"STATION_TRAIT_UNIQUE_AI" = STATION_TRAIT_UNIQUE_AI,
"STATION_TRAIT_UNNATURAL_ATMOSPHERE" = STATION_TRAIT_UNNATURAL_ATMOSPHERE,
"STATION_TRAIT_VENDING_SHORTAGE" = STATION_TRAIT_VENDING_SHORTAGE,
"STATION_TRAIT_SPIKED_DRINKS" = STATION_TRAIT_SPIKED_DRINKS,
),
/datum/deathmatch_lobby = list(
"TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS" = TRAIT_DEATHMATCH_EXPLOSIVE_IMPLANTS,
Expand Down Expand Up @@ -248,6 +250,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS,
"TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE,
"TRAIT_FLOORED" = TRAIT_FLOORED,
"TRAIT_FLOPPING" = TRAIT_FLOPPING,
"TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION" = TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION,
"TRAIT_FORCED_GRAVITY" = TRAIT_FORCED_GRAVITY,
"TRAIT_FORCED_STANDING" = TRAIT_FORCED_STANDING,
Expand All @@ -265,6 +268,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_GIANT" = TRAIT_GIANT,
"TRAIT_GODMODE" = TRAIT_GODMODE,
"TRAIT_GOOD_HEARING" = TRAIT_GOOD_HEARING,
"TRAIT_GRABRESISTANCE" = TRAIT_GRABRESISTANCE,
"TRAIT_GRABWEAKNESS" = TRAIT_GRABWEAKNESS,
"TRAIT_GREENTEXT_CURSED" = TRAIT_GREENTEXT_CURSED,
"TRAIT_GUNFLIP" = TRAIT_GUNFLIP,
Expand Down Expand Up @@ -300,6 +304,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN,
"TRAIT_INVISIMIN" = TRAIT_INVISIMIN,
"TRAIT_IN_CALL" = TRAIT_IN_CALL,
"TRAIT_IS_WET" = TRAIT_IS_WET,
"TRAIT_IWASBATONED" = TRAIT_IWASBATONED,
"TRAIT_JOLLY" = TRAIT_JOLLY,
"TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH,
Expand Down Expand Up @@ -463,6 +468,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE,
"TRAIT_SKITTISH" = TRAIT_SKITTISH,
"TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE,
"TRAIT_SLIPPERY_WHEN_WET" = TRAIT_SLIPPERY_WHEN_WET,
"TRAIT_SMOKER" = TRAIT_SMOKER,
"TRAIT_SNEAK" = TRAIT_SNEAK,
"TRAIT_SNOB" = TRAIT_SNOB,
Expand Down Expand Up @@ -503,6 +509,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_TENACIOUS" = TRAIT_TENACIOUS,
"TRAIT_TENTACLE_IMMUNE" = TRAIT_TENTACLE_IMMUNE,
"TRAIT_TESLA_SHOCKIMMUNE" = TRAIT_TESLA_SHOCKIMMUNE,
"TRAIT_TETRODOTOXIN_HEALING" = TRAIT_TETRODOTOXIN_HEALING,
"TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION,
"TRAIT_THINKING_IN_CHARACTER" = TRAIT_THINKING_IN_CHARACTER,
"TRAIT_THROWINGARM" = TRAIT_THROWINGARM,
Expand Down Expand Up @@ -536,9 +543,12 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_VIRUS_RESISTANCE" = TRAIT_VIRUS_RESISTANCE,
"TRAIT_VORACIOUS" = TRAIT_VORACIOUS,
"TRAIT_WAS_EVOLVED" = TRAIT_WAS_EVOLVED,
"TRAIT_WATER_ADAPTATION" = TRAIT_WATER_ADAPTATION,
"TRAIT_WATER_HATER" = TRAIT_WATER_HATER,
"TRAIT_WEAK_SOUL" = TRAIT_WEAK_SOUL,
"TRAIT_WEB_SURFER" = TRAIT_WEB_SURFER,
"TRAIT_WEB_WEAVER" = TRAIT_WEB_WEAVER,
"TRAIT_WET_FOR_LONGER" = TRAIT_WET_FOR_LONGER,
"TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER,
"TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET,
"TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED,
Expand Down Expand Up @@ -620,14 +630,17 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_FISH_FLOPPING" = TRAIT_FISH_FLOPPING,
"TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE,
"TRAIT_FISH_INK_ON_COOLDOWN" = TRAIT_FISH_INK_ON_COOLDOWN,
"TRAIT_FISH_MUTAGENIC" = TRAIT_FISH_MUTAGENIC,
"TRAIT_FISH_NO_HUNGER" = TRAIT_FISH_NO_HUNGER,
"TRAIT_FISH_NO_MATING" = TRAIT_FISH_NO_MATING,
"TRAIT_FISH_ON_TESLIUM" = TRAIT_FISH_ON_TESLIUM,
"TRAIT_FISH_RECESSIVE" = TRAIT_FISH_RECESSIVE,
"TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE,
"TRAIT_FISH_SHOULD_TWOHANDED" = TRAIT_FISH_SHOULD_TWOHANDED,
"TRAIT_FISH_STASIS" = TRAIT_FISH_STASIS,
"TRAIT_FISH_STINGER" = TRAIT_FISH_STINGER,
"TRAIT_FISH_SURVIVE_COOKING" = TRAIT_FISH_SURVIVE_COOKING,
"TRAIT_FISH_QUICK_GROWTH" = TRAIT_FISH_QUICK_GROWTH,
"TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE,
"TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY,
"TRAIT_FISH_WELL_COOKED" = TRAIT_FISH_WELL_COOKED,
Expand Down
Loading

0 comments on commit 4108422

Please sign in to comment.