diff --git a/code/modules/antagonists/vampire/vampire_datum.dm b/code/modules/antagonists/vampire/vampire_datum.dm index ca2c0208cf4..196dc3849c3 100644 --- a/code/modules/antagonists/vampire/vampire_datum.dm +++ b/code/modules/antagonists/vampire/vampire_datum.dm @@ -59,9 +59,9 @@ /datum/antagonist/vampire/greet() var/list/messages = list() SEND_SOUND(owner.current, sound('sound/ambience/antag/vampalert.ogg')) - messages.Add("Вы — вампир!
") - messages.Add("Чтобы укусить кого-то, нацельтесь в голову, выберите намерение вреда (4) и ударьте пустой рукой. Пейте кровь, чтобы получать новые силы. \ - Вы уязвимы перед святостью, огнем и звёздным светом. Не выходите в космос, избегайте священника, церкви и, особенно, святой воды.") + messages.Add(span_danger("Вы — вампир!
")) + messages.Add("Чтобы укусить кого-то, нацельтесь на голову, выберите намерение вреда (4) и ударьте пустой рукой. Пейте кровь, чтобы получать новые силы. \ + Вы уязвимы перед святостью, огнём и звёздным светом. Не выходите в космос, избегайте священника, церкви и, особенно, святой воды.") return messages @@ -295,11 +295,11 @@ cur.adjustBrainLoss(-1) for(var/obj/item/organ/external/bodypart as anything in cur.bodyparts) if(bodypart.has_fracture() && prob(5)) - to_chat(cur, span_notice("You feel a burning sensation in your [bodypart.name] as it straightens involuntarily!")) + to_chat(cur, span_notice("Вы чувствуете жжение, когда [bodypart.name] непроизвольно выпрямляется!")) bodypart.mend_fracture() if(bodypart.has_internal_bleeding() && prob(5)) - to_chat(cur, span_notice("You feel a burning sensation in your [bodypart.name] as your veins begin to recover!")) + to_chat(cur, span_notice("Вы чувствуете жжение в [bodypart.name], когда ваши вены начинают восстанавливаться!")) bodypart.stop_internal_bleeding() if(bloodtotal >= REQ_BLOOD_FOR_SUBCLASS_ACT) diff --git a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm index f2fc9e7640c..34bb3e23d7b 100644 --- a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm @@ -215,19 +215,19 @@ /datum/vampire_passive/ears_bang_protection - gain_desc = "Your eardrums feels more durable now. You can ignore high frequency sounds." + gain_desc = "Ваши барабанные перепонки стали прочнее. Вы можете не обращать внимания на высокочастотные звуки." /datum/vampire_passive/eyes_flash_protection - gain_desc = "The corneas of your eyes have adapted to the bright flashes." + gain_desc = "Роговицы ваших глаз адаптировались к ярким вспышкам." /datum/vampire_passive/eyes_welding_protection - gain_desc = "Your eyes have been infused with the trophies power and no longer react to any bright light." + gain_desc = "Ваши глаза напитались силой собранных трофеев - теперь они невосприимчивы к воздействию яркого света." /datum/vampire_passive/upgraded_grab - gain_desc = "Power of the blood allows you to take your victims in a tighter grab." + gain_desc = "Ваши мышцы наполняются силой поглощённой крови - жертвам будет труднее вырваться из захвата." /// Time (in deciseconds) required to reinforce aggressive/neck grab to the next state. var/grab_speed = 2 SECONDS /// Resist chance overrides for the victim. @@ -250,7 +250,7 @@ /datum/vampire_passive/dissection_cap/on_apply(datum/antagonist/vampire/vampire) vampire.subclass.dissect_cap++ vampire.subclass.crit_organ_cap += 2 - gain_desc = "You can now dissect one more organ from the same victim, up to a maximum of [vampire.subclass.dissect_cap]. Also new limit for critical organs dissection is now [vampire.subclass.crit_organ_cap]." + gain_desc = "Теперь вы можете извлекать еще один орган у одной и той же жертвы, но не более чем [vampire.subclass.dissect_cap]. Помимо того, новый предел для извлечения критических органов - [vampire.subclass.crit_organ_cap]." /datum/vampire_passive/dissection_cap/two @@ -262,9 +262,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/dissect - name = "Dissect" - desc = "Precise blow that rips out victim's internal organ. Requires agressive grab and victim must be alive. Organs are used as trophies to passively increase our powers." - gain_desc = "You have gained the ability to collect victim's internal organs. Which will pasively increase your other powers strength." + name = "Препарирование" + desc = "Точный удар, вырывающий внутренний орган из тела жертвы. Жертва должна быть жива и удерживаться в агрессивном захвате. Органы используются в качестве трофеев, которые пассивно улучшают ваши способности." + gain_desc = "Теперь вы можете собирать внутренние органы своих жертв, чтобы становиться сильнее." action_icon_state = "vampire_claws" create_attack_logs = FALSE base_cooldown = 5 SECONDS @@ -298,18 +298,18 @@ if(!user.pulling || user.pull_hand != user.hand) if(show_message) - to_chat(user, span_warning("You must be grabbing a victim in your active hand to dissect them!")) + balloon_alert(user, "удерживающая рука не выбрана!") return FALSE if(user.grab_state < GRAB_NECK) if(show_message) - to_chat(user, span_warning("You must have a tighter grip to dissect this victim!")) + balloon_alert(user, "требуется крепкий захват!") return FALSE var/mob/living/carbon/human/target = user.pulling if(!ishuman(target) || is_monkeybasic(target) || ismachineperson(target) || target.stat == DEAD || !target.mind || !target.ckey) if(show_message) - to_chat(user, span_warning("[target] is not compatible!")) + balloon_alert(user, "цель не подходит!") return FALSE var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire) @@ -319,7 +319,7 @@ var/unique_dissect_id = target.UID() if((unique_dissect_id in vampire.dissected_humans) && vampire.dissected_humans[unique_dissect_id] >= vampire.subclass.dissect_cap) if(show_message) - to_chat(user, span_warning("You have already dissected [target]!")) + balloon_alert(user, "цель уже препарирована!") return FALSE return TRUE @@ -357,14 +357,14 @@ all_organs += organ if(!length(all_organs)) - to_chat(user, span_warning("[target] has no compatible organs to dissect!")) + balloon_alert(user, "у цели нет допустимых органов!") return for(var/obj/item/organ/internal/organ as anything in all_organs) all_organs -= organ all_organs[organ.slot] = organ - var/obj/item/organ/internal/organ_to_dissect = input("Select organ to dissect:", "Organ dissection", null, null) as null|anything in all_organs + var/obj/item/organ/internal/organ_to_dissect = input("Выберите орган для извлечения:", "Извлечения органа", null, null) as null|anything in all_organs if(!organ_to_dissect || !special_check(user, TRUE)) return @@ -375,32 +375,32 @@ for(var/stage in 1 to 3) switch(stage) if(1) - to_chat(user, span_notice("This victim is compatible. You must hold still...")) + to_chat(user, span_notice("Эта жертва вам подойдёт. Стойте неподвижно...")) if(2) - user.visible_message(span_warning("[user] extends claws from their fingers!"), \ - span_notice("You extend claws from your fingers.")) + user.visible_message(span_warning("[user] выпуска[pluralize_ru(user.gender, "ет", "ют")] когти из пальцев!"), \ + span_notice("Вы вытягиваете из пальцев когти.")) if(3) - user.visible_message(span_danger("[user] stabs [target] with the claws!"), \ - span_notice("You stab [target] with the claws and start dissection process...")) - to_chat(target, span_danger("You feel a sharp stabbing pain!")) + user.visible_message(span_danger("[user] пронза[pluralize_ru(user.gender, "ет", "ют")] когтями [target]!"), \ + span_notice("Вы пронзаете [target] когтями и начинаете процесс вскрытия...")) + to_chat(target, span_danger("Вы чувствуете острую колющую боль!")) target.take_overall_damage(30) add_attack_logs(user, target, "Vampire dissection. BRUTE: 30. Skill: [src]") if(!do_after(user, 5 SECONDS, target, NONE) || !special_check(user, TRUE, TRUE)) - to_chat(user, span_warning("Our dissection of [target] has been interrupted!")) + to_chat(user, span_warning("Процесс вскрытия [target] был прерван!")) is_dissecting = FALSE return is_dissecting = FALSE if(!organ_to_dissect) // organ is magically disappered, what a shame! - to_chat(user, span_warning("Our victim somehow lost desired organ trophie in a process!")) + to_chat(user, span_warning("Наша жертва каким-то образом лишилась выбранного органа!")) return if(target.stat == DEAD) // grip was too strong mr. vampire - to_chat(user, span_warning("[target] is dead and no longer fit for the ritual")) + to_chat(user, span_warning("[target] [genderize_ru(target, "мёртв", "мертва", "мертво", "мертвы")] и больше не [genderize_ru(target, "пригоден", "пригодна", "пригодно", "пригодны")] для вскрытия.")) return var/datum/spell_handler/vampire/handler = custom_handler @@ -423,37 +423,37 @@ if(INTERNAL_ORGAN_HEART) vampire.adjust_trophies(INTERNAL_ORGAN_HEART, 1) if(vampire.get_trophies(INTERNAL_ORGAN_HEART) >= MAX_TROPHIES_PER_TYPE_CRITICAL) - msg = "hearts" + msg = "сердец" else if(vampire.get_trophies(INTERNAL_ORGAN_HEART) >= vampire.subclass.crit_organ_cap) - to_chat(user, span_warning("We reached our limit to dissect critical organs of type hearts!")) + to_chat(user, span_warning("Мы достигли предела в извлечении критических органов типа сердце!")) if(INTERNAL_ORGAN_LUNGS) vampire.adjust_trophies(INTERNAL_ORGAN_LUNGS, 1) if(vampire.get_trophies(INTERNAL_ORGAN_LUNGS) >= MAX_TROPHIES_PER_TYPE_CRITICAL) - msg = "lungs" + msg = "лёгких" else if(vampire.get_trophies(INTERNAL_ORGAN_LUNGS) >= vampire.subclass.crit_organ_cap) - to_chat(user, span_warning("We reached our limit to dissect critical organs of type lungs!")) + to_chat(user, span_warning("Мы достигли предела в извлечении критических органов типа лёгкие!")) if(INTERNAL_ORGAN_LIVER) vampire.adjust_trophies(INTERNAL_ORGAN_LIVER, 1) if(vampire.get_trophies(INTERNAL_ORGAN_LIVER) >= MAX_TROPHIES_PER_TYPE_GENERAL) - msg = "livers" + msg = "печени" if(INTERNAL_ORGAN_KIDNEYS) vampire.adjust_trophies(INTERNAL_ORGAN_KIDNEYS, 1) if(vampire.get_trophies(INTERNAL_ORGAN_KIDNEYS) >= MAX_TROPHIES_PER_TYPE_GENERAL) - msg = "kidneys" + msg = "почек" if(INTERNAL_ORGAN_EYES) vampire.adjust_trophies(INTERNAL_ORGAN_EYES, 1) if(vampire.get_trophies(INTERNAL_ORGAN_EYES) >= MAX_TROPHIES_PER_TYPE_GENERAL) - msg = "eyes" + msg = "глаз" if(INTERNAL_ORGAN_EARS) vampire.adjust_trophies(INTERNAL_ORGAN_EARS, 1) if(vampire.get_trophies(INTERNAL_ORGAN_EARS) >= MAX_TROPHIES_PER_TYPE_GENERAL) - msg = "ears" + msg = "ушей" if(msg) - to_chat(user, span_warning("We reached maximum amount of [msg] as trophies!")) + to_chat(user, span_warning("Мы достигли максимально возможного количества [msg] для сбора!")) - user.visible_message(span_danger("[user] rips [organ_name] from [target]'s body!"), \ - span_notice("You collect [organ_name] from [target]'s body.")) + user.visible_message(span_danger("[user] вырыва[pluralize_ru(user, "ет", "ют")] [organ_name] из тела [target]!"), + span_notice("Вы вырываете [organ_name] из тела [target].")) add_attack_logs(user, target, "Vampire removed [organ_name]. Skill: [src]") @@ -463,9 +463,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/dissect_info - name = "Check Trophies" - desc = "Allows us to inspect all progress and passives we get from collected organ trophies." - gain_desc = "You can now use the ability Check Trophies to familiarize yourself with all the passive effects granted." + name = "Посмотреть трофеи" + desc = "Позволяет узнать количество собранных органов и пассивные способности, которые вы за них получили." + gain_desc = "Теперь вы можете использовать способность «Посмотреть трофеи», чтобы отслеживать свой прогресс." action_icon_state = "blood_rush" human_req = FALSE stat_allowed = UNCONSCIOUS @@ -476,7 +476,7 @@ /obj/effect/proc_holder/spell/vampire/self/dissect_info/can_cast(mob/living/carbon/user = usr, charge_check = TRUE, show_message = FALSE) if(user.stat == DEAD) if(show_message) - to_chat(user, span_warning("You can't use this ability while dead!")) + balloon_alert(user, "вы мертвы!") return FALSE return ..() @@ -490,7 +490,7 @@ /obj/effect/proc_holder/spell/vampire/self/dissect_info/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "VampireTrophiesStatus", "Trophies Status") + ui = new(user, src, "VampireTrophiesStatus", "Посмотреть трофеи") ui.set_autoupdate(FALSE) ui.open() @@ -542,9 +542,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/infected_trophy - name = "Infected Trophy" - desc = "Summons malformed skull infected with grave fever. You can use it to weaken your victims from a distance." - gain_desc = "You have gained the ability to spread grave fever. Various additional effects applied, depending on the collected trophies." + name = "Заражённый трофей" + desc = "Призывает деформированный череп, заражающий жертву могильной лихорадкой. Чем больше трофеев вы собрали, тем сильнее будут эффекты." + gain_desc = "Теперь вы можете заражать жертв могильной лихорадкой. Чем больше вы собрали трофеев, тем сильнее будут эффекты." action_icon_state = "infected_trophy" base_cooldown = 10 SECONDS required_blood = 60 @@ -554,14 +554,14 @@ /obj/effect/proc_holder/spell/vampire/self/infected_trophy/can_cast(mob/living/carbon/user = usr, charge_check = TRUE, show_message = FALSE) if(user.incapacitated(INC_IGNORE_GRABBED)) if(show_message) - to_chat(user, span_warning("You can't use this ability right now!")) + balloon_alert(user, "нельзя использовать сейчас!") return FALSE return ..() /obj/effect/proc_holder/spell/vampire/self/infected_trophy/cast(list/targets, mob/living/user = usr) if(user.get_active_hand()) - to_chat(user, span_warning("Your active hand should be empty to use this ability!")) + balloon_alert(user, "рука занята!") revert_cast() return FALSE @@ -579,7 +579,15 @@ */ /obj/item/gun/magic/skull_gun name = "infected skull" - desc = "Malformed skull which transfers grave fever." + desc = "Деформированный череп, передающий могильную лихорадку." + ru_names = list( + NOMINATIVE = "заражённый череп", + GENITIVE = "заражённого черепа", + DATIVE = "заражённому черепу", + ACCUSATIVE = "заражённый череп", + INSTRUMENTAL = "заражённым черепом", + PREPOSITIONAL = "заражённом черепе" + ) icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "ashen_skull" item_state = "ashen_skull" @@ -619,7 +627,15 @@ /obj/item/ammo_casing/magic/skull_gun_casing name = "skull gun casing" - desc = "WTF is this..." + desc = "Что это за..." + ru_names = list( + NOMINATIVE = "гильза для черепного пистолета", + GENITIVE = "гильзы для черепного пистолета", + DATIVE = "гильзе для черепного пистолета", + ACCUSATIVE = "гильзу для черепного пистолета", + INSTRUMENTAL = "гильзой для черепного пистолета", + PREPOSITIONAL = "гильзе для черепного пистолета" + ) icon_state = "skulls" projectile_type = /obj/item/projectile/skull_projectile muzzle_flash_effect = null @@ -628,6 +644,14 @@ /obj/item/projectile/skull_projectile name = "infected skull" + ru_names = list( + NOMINATIVE = "заражённый череп", + GENITIVE = "заражённого черепа", + DATIVE = "заражённому черепу", + ACCUSATIVE = "заражённый череп", + INSTRUMENTAL = "заражённым черепом", + PREPOSITIONAL = "заражённом черепе" + ) icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "ashen_skull" pass_flags = PASSTABLE | PASSGRILLE | PASSFENCE @@ -684,7 +708,7 @@ victim.apply_damage(applied_damage, BRUTE, BODY_ZONE_CHEST) victim.Stun(stun_amt) - to_chat(victim, span_userdanger("You feel a dull pain inside your chest!")) + to_chat(victim, span_userdanger("Вы почувствовали боль в груди!")) if(iscarbon(victim)) var/mob/living/carbon/c_victim = victim @@ -702,9 +726,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/lunge - name = "Lunge" - desc = "Swift lunge to a specified location. Can get various effects, depending on the trophies." - gain_desc = "You have gained the ability to rapidly close distances. Various additional effects applied, depending on the collected trophies." + name = "Рывок" + desc = "Стремительный рывок в указанное место. Чем больше трофеев вы собрали, тем сильнее будут эффекты." + gain_desc = "Теперь вы можете делать рывок вперёд, быстро преодолевая расстояние. В зависимости от количества собранных трофеев будут применяться определённые эффекты." action_icon_state = "vampire_charge" need_active_overlay = TRUE human_req = FALSE @@ -725,7 +749,7 @@ /obj/effect/proc_holder/spell/vampire/lunge/can_cast(mob/living/carbon/user = usr, charge_check = TRUE, show_message = FALSE) if(user.incapacitated(INC_IGNORE_RESTRAINED|INC_IGNORE_GRABBED) || user.buckled || (iscarbon(user) && user.legcuffed)) if(show_message) - to_chat(user, span_warning("You can't use this ability right now!")) + balloon_alert(user, "нельзя использовать сейчас!") return FALSE return ..() @@ -738,8 +762,8 @@ user.buckled?.unbuckle_mob(user, TRUE) user.pulledby?.stop_pulling() - user.visible_message(span_danger("[user] starts moving with unnatural speed!"), \ - span_notice("You lunge into the air...")) + user.visible_message(span_danger("[user] начина[pluralize_ru(user.gender, "ет", "ют")] двигаться с неестественной скоростью!"), \ + span_notice("Вы бросаетесь в сторону...")) var/leap_range = targeting.range @@ -824,7 +848,7 @@ victim.Weaken(weaken_amt) user.do_item_attack_animation(victim, ATTACK_EFFECT_CLAW) playsound(victim.loc, 'sound/weapons/slice.ogg', 40, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - to_chat(victim, span_userdanger("You can't resist a sudden gust of wind which slams you to the ground!")) + to_chat(victim, span_userdanger("Вы не можете устоять перед внезапным порывом ветра, который швыряет вас на пол!")) if(t_kidneys > 0 && ishuman(victim)) var/mob/living/carbon/human/h_victim = victim @@ -834,14 +858,14 @@ h_victim.bleed(actual_blood_loss) h_victim.Confused(confusion_amt) h_victim.emote("moan") - to_chat(h_victim, span_userdanger("You sense a sharp pain inside your body and suddenly feel very weak!")) + to_chat(h_victim, span_userdanger("Вы чувствуете острую боль и внезапно ощущаете сильную слабость!")) if(h_victim.mind && h_victim.ckey && !HAS_TRAIT(h_victim, TRAIT_EXOTIC_BLOOD)) blood_gained += blood_vamp_get vampire.adjust_blood(h_victim, blood_vamp_get) if(blood_gained) - to_chat(user, span_notice("You pinch arteries on fly and absorb [blood_gained] amount of blood!")) + to_chat(user, span_notice("Вы пережимаете артерии жертвы на лету и поглощаете [blood_gained] единиц[declension_ru(blood_gained, "у", "ы", "")] крови!")) /obj/effect/proc_holder/spell/vampire/lunge/on_trophie_update(datum/antagonist/vampire/vampire, trophie_type, force = FALSE) @@ -861,9 +885,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/mark - name = "Mark the Prey" - desc = "Mark your victim to slow their movement, reduce resistances and forces them to make spontaneous actions." - gain_desc = "You have gained the ability to mark your victim. Various additional effects applied, depending on the collected trophies." + name = "Пометить добычу" + desc = "Пометьте свою жертву, чтобы замедлить её передвижение, уменьшить сопротивление и заставить её совершать спонтанные действия." + gain_desc = "Вы получили возможность помечать своих жертв. Различные дополнительные эффекты применяются в зависимости от собранных трофеев." action_icon_state = "predator_sense" need_active_overlay = TRUE human_req = FALSE @@ -910,9 +934,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/metamorphosis - name = "Metamorphosis" - desc = "Transform into reporting this issue!" - gain_desc = "You have gained the ability to rapidly inform this issue into the discord's bugs channel." + name = "Метаморфоза" + desc = "Преобразуйтесь и сообщите об этом!" + gain_desc = "Вы получили возможность быстро сообщить об этом в баг-репорт в Discord." action_icon_state = "default" sound = 'sound/creatures/wings_flapping.ogg' human_req = FALSE @@ -949,22 +973,22 @@ for(var/obj/effect/proc_holder/spell/vampire/metamorphosis/spell in (user.mind.spell_list - src)) if(spell?.is_transformed) if(show_message) - to_chat(user, span_warning("You are already using another metamorphosis!")) + balloon_alert(user, "метаморфоза уже используется!") return FALSE if(user.incapacitated(INC_IGNORE_RESTRAINED|INC_IGNORE_GRABBED)) if(show_message) - to_chat(user, span_warning("You can't use this ability right now!")) + balloon_alert(user, "нельзя использовать сейчас!") return FALSE if(ishuman(user) && user.health <= 0) if(show_message) - to_chat(user, span_warning("You are too weak to use this ability!")) + balloon_alert(user, "вы слишком слабы!") return FALSE if(!isturf(user.loc)) if(show_message) - to_chat(user, span_warning("You can't use this ability inside [user.loc]!")) + balloon_alert(user, "нельзя использовать внутри!") return FALSE return ..() @@ -1004,9 +1028,9 @@ var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire) var/mob/living/simple_animal/hostile/vampire/vampire_animal = new meta_path(user.loc, vampire, user, src) - user.visible_message(span_warning("[user] shape becomes fuzzy before it takes the [vampire_animal] form!"), \ - span_notice("You start to transform into the [vampire_animal]."), \ - span_italics("You hear an eerie rustle of many wings...")) + user.visible_message(span_warning("Форма [user] становится размытой, прежде чем [genderize_ru(user.gender, "он", "она", "оно", "они")] принима[pluralize_ru(user.gender, "ет", "ют")] форму [vampire_animal]!"), \ + span_notice("Вы начинаете превращаться в [vampire_animal]."), \ + span_italics("Вы слышите жуткий шум множества крыльев...")) vampire.stop_sucking() original_body = user @@ -1039,8 +1063,8 @@ custom_handler = create_new_handler() update_vampire_spell_name() - var/self_message = death_provoked ? span_userdanger("You can't take the strain of sustaining [user]'s shape in this condition, it begins to fall apart!") : span_notice("You start to transform back into human.") - user.visible_message(span_warning("[user] shape becomes fuzzy before it takes human form!"), self_message, span_italics("You hear an eerie rustle of many wings...")) + var/self_message = death_provoked ? span_userdanger("В таком состоянии вы не сможете поддерживать форму, она начнёт рассыпаться!") : span_notice("Вы начинаете превращаться обратно в первоначальную форму.") + user.visible_message(span_warning("Форма [user] становится нечёткой, прежде чем [genderize_ru(user.gender, "он", "она", "оно", "они")] прим[pluralize_ru(user.gender, "ет", "ут")] первоначальный облик!"), self_message, span_italics("Вы слышите жуткий шум множества крыльев...")) user.set_density(FALSE) original_body.dir = SOUTH @@ -1086,9 +1110,9 @@ * Transform - Bats */ /obj/effect/proc_holder/spell/vampire/metamorphosis/bats - name = "Metamorphosis - Bats" - desc = "Transform into the swarm of vicious bats. They can fly, do moderate melee damage and can suck blood on attacks." - gain_desc = "You have gained the ability to transform into the bats swarm. They got different abilities, depending on the trophies." + name = "Метаморфоза - Летучие мыши" + desc = "Превратитесь в рой злобных летучих мышей. Они умеют летать, наносят умеренный урон в ближнем бою и могут высасывать кровь при атаках." + gain_desc = "Вы получили возможность превращаться в рой летучих мышей. У них разные способности, в зависимости от трофеев." action_icon_state = "bats_meta" free_transform_back = TRUE meta_path = /mob/living/simple_animal/hostile/vampire/bats @@ -1099,9 +1123,9 @@ * Transform - Hound */ /obj/effect/proc_holder/spell/vampire/metamorphosis/hound - name = "Metamorphosis - Hound" - desc = "Transform into the dire bloodhound. They are agile, furious beast in everything superior to human." - gain_desc = "You have gained the ability to transform into the blood hound. It is an ultimate form of bluespace entity which possessed us." + name = "Метаморфоза - Гончая" + desc = "Превратитесь в страшную ищейку. Это проворные, яростные звери, во всем превосходящие человека." + gain_desc = "Вы обрели способность превращаться в кровавую гончую. Это высшая форма блюспейс-сущности, овладевшей вами." action_icon_state = "blood_hound" sound_on_transform = 'sound/creatures/hound_howl.ogg' free_transform_back = TRUE @@ -1113,7 +1137,7 @@ var/obj/effect/proc_holder/spell/vampire/self/lunge_finale/finale = locate() in user.mob_spell_list if(finale?.lunge_timer) if(show_message) - to_chat(user, span_warning("You can't transform while [finale] is in process!")) + to_chat(user, span_warning("Вы не можете трансформироваться, пока длится [finale]!")) return FALSE return ..() @@ -1124,8 +1148,8 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/bat_screech - name = "Resonant Shriek" - desc = "Bats emit a high frequency sound that weakens and deafens humans, overloads cyborg sensors, blows out nearby lights and breaks windows." + name = "Оглушительный вопль" + desc = "Летучие мыши издают высокочастотный звук, который ослабляет и оглушает гуманоидов, перегружает датчики синтетиков, гасит свет и разбивает окна." action_icon_state = "bats_shriek" sound = 'sound/effects/creepyshriek.ogg' human_req = FALSE @@ -1135,9 +1159,9 @@ /obj/effect/proc_holder/spell/vampire/self/bat_screech/cast(list/targets, mob/living/user = usr) - user.visible_message(span_warning("[user] emits a heartbreaking screech!"), \ - span_notice("You scream loudly."), \ - span_italics("You hear a painfully loud screech!")) + user.visible_message(span_warning("[user] изда[pluralize_ru(user.gender, "ёт", "ют")] душераздирающий вопль!"), \ + span_notice("Вы громко кричите."), \ + span_italics("Вы слышите мучительно громкий визг!")) var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire) var/t_hearts = vampire.get_trophies(INTERNAL_ORGAN_HEART) @@ -1193,8 +1217,8 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/lunge_finale - name = "Lunge Finale" - desc = "Series of rapid lunges to the nearby victims. Effects are highly dependent on the trophies and are the same to those of a regular Lunge spell." + name = "Финальный рывок" + desc = "Серия стремительных выпадов в сторону ближайших жертв. Эффекты сильно зависят от трофеев и не отличаются от эффектов обычного заклинания Рывок." action_icon_state = "lunge_finale" human_req = FALSE base_cooldown = 1 MINUTES @@ -1219,7 +1243,7 @@ /obj/effect/proc_holder/spell/vampire/self/lunge_finale/can_cast(mob/living/carbon/user = usr, charge_check = TRUE, show_message = FALSE) if(lunge_timer) if(show_message) - to_chat(user, span_warning("Ability is already in use!")) + balloon_alert(user, "уже используется!") return FALSE return ..() @@ -1238,7 +1262,7 @@ lunge_counter += round(all_trophies / 10) // 6 lunges MAX - to_chat(user, span_notice("You prepare to lunge on any victim in vicinity!")) + to_chat(user, span_notice("Приготовьтесь наброситься на любую жертву поблизости!")) lunge_timer = addtimer(CALLBACK(src, PROC_REF(lunge_callback), user), 1 SECONDS, TIMER_UNIQUE | TIMER_LOOP | TIMER_STOPPABLE | TIMER_DELETE_ME) @@ -1298,9 +1322,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/anabiosis - name = "Anabiosis" - desc = "Bluespace entity summons a mysterious coffin, which can rapidly rejuvenate us even from the death door. The cost is our vulnerability during the stasis like sleep. Collected trophies helps to restore different types of injuries." - gain_desc = "You have gained the ability to heal your wounds through the prolonged anabiosis. All the trophies increase regeneration capabilities tremendously." + name = "Анабиоз" + desc = "Блюспейс сущность внутри вас призывает таинственный гроб, который может быстро восстановить вас даже на пороге смерти ценой крайней уязвимости во время лечения. Чем больше трофеев вы собрали, тем эффективнее будет процесс восстановления." + gain_desc = "Вы получили способность залечивать раны благодаря длительному анабиозу. Собранные трофеи значительно усиливают регенерацию." action_icon_state = "vampire_coffin" sound = 'sound/magic/vampire_anabiosis.ogg' base_cooldown = 3 MINUTES @@ -1311,18 +1335,18 @@ /obj/effect/proc_holder/spell/vampire/self/anabiosis/can_cast(mob/living/carbon/user = usr, charge_check = TRUE, show_message = FALSE) if(user.incapacitated()) if(show_message) - to_chat(user, span_warning("You can't use this ability right now!")) + balloon_alert(user, "нельзя использовать сейчас!") return FALSE if(!isturf(user.loc)) if(show_message) - to_chat(user, span_warning("You can't use this ability inside [user.loc]!")) + balloon_alert(user, "нельзя использовать внутри!") return FALSE return ..() /obj/effect/proc_holder/spell/vampire/self/anabiosis/cast(list/targets, mob/living/user = usr) - user.visible_message(span_warning("You see how [user] starts to levitate!"), \ - span_notice("Bluespace entity inside you starts preparing the ritual, making you levitate...")) + user.visible_message(span_warning("Вы видите, как [user] начина[pluralize_ru(user.gender, "ет", "ют")] левитировать!"), \ + span_notice("Блюспейс сущность внутри вас начинает подготовку к ритуалу, заставляя вас левитировать...")) var/turf/user_turf = get_turf(user) user.dir = SOUTH @@ -1344,8 +1368,8 @@ coffin.no_manipulation = TRUE coffin.alpha = 0 animate(coffin, alpha = 255, time = 0.5 SECONDS) - coffin.visible_message(span_warning("An eerie coffin appears out of nowhere under [user]!")) - to_chat(user, span_notice("An ancient vampire coffin appears below you. You somehow know that this is how your kin has cured from injuries for centuries.")) + coffin.visible_message(span_warning("Под [user] из ниоткуда появляется жуткий гроб!")) + to_chat(user, span_notice("Под вами появляется древний вампирский гроб. Вы откуда-то знаете, что именно так ваши сородичи веками излечивались от ран.")) sleep(1 SECONDS) if(QDELETED(user) || QDELETED(coffin)) @@ -1365,8 +1389,8 @@ user.set_stat(UNCONSCIOUS) user.visible_message( - span_warning("Suddenly [user] falls straight inside the coffin and it closes!"), - span_notice("Bluespace entity tosses you inside the coffin and seals it. The regeneration process has started..."), + span_warning("Внезапно [user] пада[pluralize_ru(user.gender, "ет", "ют")] прямо в гроб, и он закрывается!"), + span_notice("Блюспейс сущность бросает вас в гроб и запечатывает его. Процесс регенерации начался..."), ) sleep(0.6 SECONDS) @@ -1382,13 +1406,13 @@ var/self_msg if(isvampire(victim) || isvampirethrall(victim)) - self_msg = span_notice("Bluespace entity pushes you out of the coffin with a gentle touch.") + self_msg = span_notice("Блюспейс сущность лёгким прикосновением выталкивает вас из гроба.") else - self_msg = span_userdanger("An invisible force throws you out of the coffin with a violent rage!") + self_msg = span_userdanger("Невидимая сила с яростью выбрасывает вас из гроба!") victim.throw_at(get_edge_target_turf(victim, pick(GLOB.alldirs)), rand(10, 30), 8, user) - victim.visible_message(span_warning("Mysterious force pushes [victim] out of the coffin!"), self_msg, \ - span_italics("You hear the sound of a heavy blow!")) + victim.visible_message(span_warning("Таинственная сила выталкивает [victim] из гроба!"), self_msg, \ + span_italics("Вы слышите звук сильного удара!")) addtimer(CALLBACK(src, PROC_REF(release_vampire), coffin), rejuvenation_time) @@ -1427,7 +1451,15 @@ */ /obj/structure/closet/coffin/vampire name = "mysterious coffin" - desc = "Even looking at this coffin makes your hair stand on end." + desc = "Даже при взгляде на этот гроб волосы встают дыбом." + ru_names = list( + NOMINATIVE = "таинственный гроб", + GENITIVE = "таинственного гроба", + DATIVE = "таинственному гробу", + ACCUSATIVE = "таинственный гроб", + INSTRUMENTAL = "таинственным гробом", + PREPOSITIONAL = "таинственном гробе" + ) max_integrity = 500 color = "#7F0000" anchored = TRUE @@ -1474,7 +1506,7 @@ /obj/structure/closet/coffin/vampire/Destroy() - visible_message(span_warning("[src] vanishes, leaving behind only a pile of ashes...")) + visible_message(span_warning("[capitalize(declent_ru(NOMINATIVE))] исчезает, оставляя после себя лишь кучку пепла...")) new /obj/effect/decal/cleanable/ash(loc) if(isprocessing) STOP_PROCESSING(SSobj, src) @@ -1522,16 +1554,16 @@ human_vampire.UpdateAppearance() if(human_vampire.stat == DEAD) - human_vampire.visible_message(span_warning("[human_vampire]'s dead body appears under the coffin remains!")) + human_vampire.visible_message(span_warning("Мёртвое тело [human_vampire] появляется под останками гроба!")) return human_vampire.set_stat(CONSCIOUS) new /obj/effect/temp_visual/cult/sparks(source_turf) playsound(loc, 'sound/effects/creepyshriek.ogg', 100, TRUE) - human_vampire.visible_message(span_danger("[human_vampire] emerges from the destroyed coffin and emits a deafening screech!"), \ - span_userdanger("Your coffin is destroyed and you scream in a feeble rage!"), \ - span_italics("You hear a painfully loud screech!")) + human_vampire.visible_message(span_danger("[human_vampire] выход[pluralize_ru(human_vampire.gender, "ит", "ят")] из разрушенного гроба и изда[pluralize_ru(human_vampire.gender, "ёт", "ют")] оглушительный вопль!"), \ + span_userdanger("Ваш гроб разрушен, и вы кричите в неистовой ярости!"), \ + span_italics("Вы слышите чрезвычайно громкий визг!")) for(var/mob/living/victim in view(7, src)) if(!victim.affects_vampire(human_vampire)) @@ -1540,7 +1572,7 @@ continue victim.Weaken(4 SECONDS) - to_chat(victim, span_userdanger("Loud screech weakens you and makes you fall to the ground!")) + to_chat(victim, span_userdanger("Громкий визг ослабляет вас и заставляет упасть на землю!")) /obj/structure/closet/coffin/vampire/process() @@ -1682,9 +1714,9 @@ if(borer) borer.leave_host() borer.throw_at(get_edge_target_turf(borer, pick(GLOB.alldirs)), rand(10, 30), 8, human_vampire) - borer.visible_message(span_warning("Mysterious force pushes [borer] out of the coffin!"), \ - span_userdanger("An invisible force throws you out of the coffin with a violent rage!"), \ - span_italics("You hear the sound of a heavy blow!")) + borer.visible_message(span_warning("Таинственная сила выталкивает [borer] из гроба!"), \ + span_userdanger("Незримая сила с яростью выбрасывает вас из гроба!"), \ + span_italics("Вы слышите звук сильного удара!")) human_vampire.remove_all_parasites(vomit_organs = TRUE) @@ -1754,28 +1786,28 @@ return FALSE if(isvampire(user) || isvampirethrall(user)) - to_chat(user, span_notice("This coffin contains one of our kin, it would be wise to protect it.")) + to_chat(user, span_notice("В этом гробу лежит один из наших сородичей, было бы разумно защитить его.")) return FALSE if(user.mind?.isholy) - to_chat(user, span_warning("You know that this coffin contains one of the unholy vampires, it would be wise to destroy it!")) + to_chat(user, span_warning("Вы знаете, что в этом гробу находится один из нечестивых вампиров, было бы разумно уничтожить его!")) return FALSE var/user_UID = user.UID() if(!(user_UID in lightheaded)) lightheaded += user_UID - to_chat(user, span_warning("You feel like this is not a good idea...")) + to_chat(user, span_warning("Вы чувствуете, что это не очень хорошая идея...")) else lightheaded -= user_UID new /obj/effect/temp_visual/cult/sparks(get_turf(user)) user.Weaken(10 SECONDS) // well, you were warned! user.Jitter(20 SECONDS) - user.visible_message(span_warning("As soon as [user] touches [src], [user.p_their()] body undergoes violent convulsions"), \ - span_userdanger("Something is shrinking inside you, and you start convulsing!")) + user.visible_message(span_warning("Как только [user] прикаса[pluralize_ru(user.gender, "ет", "ют")]ся к [declent_ru(DATIVE)], [genderize_ru(user.gender, "его", "её", "его", "их")] тело начнет биться в конвульсиях."), \ + span_userdanger("Внутри вас что-то сжимается, и вы начинаете биться в конвульсиях!")) if(!HAS_TRAIT(user, TRAIT_NO_BLOOD)) user.bleed(100) - to_chat(human_vampire, span_notice("... [span_userdanger("You feel strange feel of joy and power")] ...")) + to_chat(human_vampire, span_notice("... [span_userdanger("Вы чувствуете внезапный прилив сил")] ...")) if(!HAS_TRAIT(user, TRAIT_EXOTIC_BLOOD)) vampire.bloodusable += 50 // only usable blood, will not affect abilities human_vampire.set_nutrition(min(NUTRITION_LEVEL_WELL_FED, human_vampire.nutrition + 50)) @@ -1806,9 +1838,9 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /obj/effect/proc_holder/spell/vampire/self/bats_spawn - name = "Summon Bats" - desc = "Calls the swarms of space bats from nearby bluespace planes. They might assist you in the battle and will be more powerful the more trophies you have. You can swap places with the bats by clicking on them in HELP intent." - gain_desc = "You have gained the ability to summon space bats. Number of packs and combat stats will heavily depend on the collected trophies." + name = "Призыв летучих мышей" + desc = "Призовите стаи космических летучих мышей из блюспейс-измерения. Они могут помочь вам в битве и будут тем мощнее, чем больше у вас трофеев. Вы можете поменяться местами с летучими мышами, нажав на них в намерении «ПОМОЩЬ»." + gain_desc = "Вы получили способность вызывать космических летучих мышей. Численность стаи и боевые показатели будут сильно зависеть от собранных трофеев." action_icon_state = "bats_new" sound = 'sound/creatures/bats_spawn.ogg' human_req = FALSE @@ -1830,9 +1862,9 @@ else if(all_trophies > 40) num_bats += all_trophies < 52 ? 2 : 3 - user.visible_message(span_warning("Suddenly [num_bats] pack[num_bats > 1 ? "s" : ""] of space bats appeared near [user]!"), \ - span_notice("You summon [num_bats] pack[num_bats > 1 ? "s" : ""] of space bats to assist you in combat."), \ - span_italics("You hear an eerie rustle of many wings and loud screeching sounds...")) + user.visible_message(span_warning("Внезапно [num_bats] ста[declension_ru(num_bats, "я", "и", "й")] космических летучих мышей появились рядом с [user]!"), \ + span_notice("Вы вызываете [num_bats] ста[declension_ru(num_bats, "ю", "и", "й")] космических летучих мышей, чтобы они помогли вам в бою."), \ + span_italics("Вы слышите жуткий шум множества крыльев и громкие визги...")) var/turf/user_turf = get_turf(user) for(var/turf/check in orange(1, user_turf)) @@ -1866,13 +1898,13 @@ * \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/////////////////////////////////////////////////////////////////////// * \*======================================================================================================================================*/ /mob/living/simple_animal/hostile/vampire - name = "vampire animal" - real_name = "vampire animal" - desc = "Report me!" + name = "Вампир-животное" + real_name = "Вампир-животное" + desc = "Сообщите обо мне!" faction = list(ROLE_VAMPIRE) - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" + response_help = "обнимает" + response_disarm = "аккуратно отодвигает в сторону" + response_harm = "бьёт" attack_sound = 'sound/effects/bite.ogg' attacktext = "кусает" friendly = "осматривает" @@ -1948,15 +1980,15 @@ if(stat != DEAD) var/list/msgs = list() if(key) - msgs += span_warning("Its eyes glows with malicious intelligence.") + msgs += span_warning("Его глаза отдают злобным блеском в глазах.") if(health > (maxHealth*0.95)) - msgs += span_notice("It appears to be in excellent health.") + msgs += span_notice("Судя по всему, он находится в отличном состоянии.") else if(health > (maxHealth*0.75)) - msgs += span_notice("It has a few injuries.") + msgs += span_notice("У него есть несколько повреждений.") else if(health > (maxHealth*0.55)) - msgs += span_warning("It has many injuries.") + msgs += span_warning("У него много травм.") else if(health > (maxHealth*0.25)) - msgs += span_warning("It is covered in wounds!") + msgs += span_warning("Он весь в ранах!") . += msgs.Join("
") @@ -2007,9 +2039,9 @@ * Mr. Vampire in the bat form. */ /mob/living/simple_animal/hostile/vampire/bats - name = "enraged bats swarm" - real_name = "enraged bats swarm" - desc = "A swarm of vicious, angry-looking space bats." + name = "Рой разъярённых летучих мышей" + real_name = "Рой разъярённых летучих мышей" + desc = "Рой злобных, сердитых на вид космических летучих мышей." icon = 'icons/mob/bats.dmi' icon_state = "bat" icon_living = "bat" @@ -2060,7 +2092,7 @@ if(l_target.affects_vampire(src) && prob(vampire.get_trophies(INTERNAL_ORGAN_EYES) * 3)) // 30% chance MAX l_target.Stun(1 SECONDS) - l_target.visible_message(span_danger("[src] scares [l_target]!")) + l_target.visible_message(span_danger("[src] пугает [l_target]!")) if(!is_vampire_compatible(l_target, only_human = TRUE, blood_required = TRUE) || isvampire(l_target) || isvampirethrall(l_target)) return @@ -2084,8 +2116,9 @@ * Mr. Vampire in the hound form. */ /mob/living/simple_animal/hostile/vampire/hound - name = "Blood Hound" - desc = "A demonic-looking black canine monster with glowing red eyes and sharp teeth. Blood hounds are typically embody powerful bluespace entities." + name = "Кровавая гончая" + real_name = "Кровавая гончая" + desc = "Чёрное клыкастое чудовище демонического вида со светящимися красными глазами и острыми зубами. Кровавые гончие обычно являются воплощением могущественных сущностей блюспейса." icon_state = "hellhoundgreater" icon_living = "hellhoundgreater" icon_dead = "hellhound_dead" @@ -2148,7 +2181,7 @@ if(vampire.bloodusable <= 100 && !warning_done) warning_done = TRUE - to_chat(src, span_userdanger("Our blood reserves are running pretty low!")) + to_chat(src, span_userdanger("Наши запасы крови на исходе!")) if(vampire.bloodusable <= 0) death() @@ -2164,7 +2197,7 @@ if(l_target.affects_vampire(src) && prob(vampire.get_trophies(INTERNAL_ORGAN_EYES) * 3)) // 30% chance MAX l_target.Stun(1 SECONDS) - l_target.visible_message(span_danger("[src] scares [l_target]!")) + l_target.visible_message(span_danger("[src] пугает [l_target]!")) /mob/living/simple_animal/hostile/vampire/hound/add_spells() @@ -2177,15 +2210,15 @@ * Summoned bats. */ /mob/living/simple_animal/hostile/vampire/bats_summoned - name = "enraged bats swarm" - real_name = "enraged bats swarm" - desc = "A swarm of vicious, angry-looking space bats." + name = "Рой разъярённых летучих мышей" + real_name = "Рой разъярённых летучих мышей" + desc = "Рой злобных, сердитых на вид космических летучих мышей." icon = 'icons/mob/bats.dmi' icon_state = "bat" icon_living = "bat" icon_dead = "bat_dead" icon_gib = "bat_dead" - deathmessage = "falls to the ground and looks lifeless!" + deathmessage = "падают на землю и выглядят безжизненными!" speak_emote = list("rattles") emote_taunt = list("flutters") taunt_chance = 30 @@ -2236,7 +2269,7 @@ if(l_target.affects_vampire(src) && prob(round(vampire.get_trophies(INTERNAL_ORGAN_EYES) * 1.5))) // 15% chance MAX l_target.Stun(1 SECONDS) - l_target.visible_message(span_danger("[src] scares [l_target]!")) + l_target.visible_message(span_danger("[src] пугает [l_target]!")) if(!is_vampire_compatible(l_target, only_human = TRUE, blood_required = TRUE) || isvampire(l_target) || isvampirethrall(l_target)) return @@ -2284,8 +2317,8 @@ step(src, direction) step(user, GetOppositeDir(direction)) - visible_message(span_notice("[user] swaps places with [src]."), \ - span_notice("[user] has swapped places with you.")) + visible_message(span_notice("[user] поменял[pluralize_ru(user.gender, "ся", "ись")] местами с [src]."), \ + span_notice("[user] поменял[pluralize_ru(user.gender, "ся", "ись")] с вами местами.")) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) diff --git a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm index 50e9edf132b..490c4056afb 100644 --- a/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/dantalion_powers.dm @@ -1,6 +1,6 @@ /datum/vampire_passive/increment_thrall_cap/on_apply(datum/antagonist/vampire/V) V.subclass.thrall_cap++ - gain_desc = "You can now thrall one more person, up to a maximum of [V.subclass.thrall_cap]" + gain_desc = "Теперь вы можете подчинить себе еще одного гуманоида, вплоть до [V.subclass.thrall_cap] ." /datum/vampire_passive/increment_thrall_cap/two @@ -10,9 +10,9 @@ /obj/effect/proc_holder/spell/vampire/enthrall - name = "Enthrall" - desc = "You use a large portion of your power to sway those loyal to none to be loyal to you only." - gain_desc = "You have gained the ability to thrall people to your will." + name = "Порабощение" + desc = "Вы используете значительную часть своей силы, чтобы поработить разум другого гуманоида." + gain_desc = "Вы обрели способность подчинять людей своей воле." action_icon_state = "vampire_enthrall" need_active_overlay = TRUE required_blood = 150 @@ -29,9 +29,9 @@ /obj/effect/proc_holder/spell/vampire/enthrall/cast(list/targets, mob/user = usr) var/datum/antagonist/vampire/vampire = user.mind.has_antag_datum(/datum/antagonist/vampire) var/mob/living/target = targets[1] - user.visible_message(span_warning("[user] bites [target]'s neck!"), \ - span_warning("You bite [target]'s neck and begin the flow of power.")) - to_chat(target, span_warning("You feel the tendrils of evil invade your mind.")) + user.visible_message(span_warning("[user] куса[pluralize_ru(user.gender, "ет", "ют")] [target] за шею!"), \ + span_warning("Вы кусаете [target] за шею и впускаете поток силы.")) + to_chat(target, span_warning("Вы чувствуете, как в ваш разум проникают потоки нечистой силы.")) if(do_after(user, 15 SECONDS, target, NONE)) if(can_enthrall(user, target)) handle_enthrall(user, target) @@ -40,7 +40,7 @@ vampire.bloodusable -= blood_cost //we take the blood after enthralling, not before else revert_cast(user) - to_chat(user, span_warning("You or your target moved.")) + to_chat(user, span_warning("Вы или ваша цель сдвинулись с места.")) /obj/effect/proc_holder/spell/vampire/enthrall/proc/can_enthrall(mob/living/user, mob/living/carbon/C) @@ -52,26 +52,26 @@ CRASH("Dantalion Thrall datum ended up null.") if(!ishuman(C)) - to_chat(user, span_warning("You can only enthrall sentient humanoids!")) + to_chat(user, span_warning("Вы можете поработить только разумных гуманоидов!")) return if(!C.mind) - to_chat(user, span_warning("[C.name]'s mind is not there for you to enthrall.")) + to_chat(user, span_warning("Разум [C.name] не предназначен для порабощения.")) return var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) if(V.subclass.thrall_cap <= length(user.mind.som.serv)) - to_chat(user, span_warning("You don't have enough power to enthrall any more people!")) + to_chat(user, span_warning("У вас не хватит сил, чтобы поработить ещё больше гуманоидов!")) return if(ismindshielded(C) || isvampire(C) || isvampirethrall(C) || C.mind.has_antag_datum(/datum/antagonist/mindslave)) - C.visible_message(span_warning("[C] seems to resist the takeover!"), \ - span_notice("You feel a familiar sensation in your skull that quickly dissipates.")) + C.visible_message(span_warning("Похоже, [C] сопротивля[pluralize_ru(user.gender, "ет", "ют")]ся захвату!"), \ + span_notice("Вы чувствуете знакомое ощущение в черепе, которое быстро проходит.")) return if(C.mind.isholy) - C.visible_message(span_warning("[C] seems to resist the takeover!"), \ - span_notice("Your faith in [SSticker.Bible_deity_name] has kept your mind clear of all evil.")) + C.visible_message(span_warning("Похоже, [C] сопротивля[pluralize_ru(user.gender, "ет", "ют")]ся захвату!"), \ + span_notice("Ваша вера в [SSticker.Bible_deity_name] сохранила ваш разум чистым от всякого зла.")) return return TRUE @@ -90,9 +90,9 @@ /obj/effect/proc_holder/spell/vampire/thrall_commune - name = "Commune" - desc = "Talk to your thralls telepathically." - gain_desc = "You have gained the ability to commune with your thralls." + name = "Телепатическая связь" + desc = "Общайтесь со своими рабами с помощью блюспейс-телепатии." + gain_desc = "Вы обрели способность общаться со своими рабами на расстоянии." action_icon_state = "vamp_communication" create_attack_logs = FALSE base_cooldown = 2 SECONDS @@ -132,30 +132,30 @@ /obj/effect/proc_holder/spell/vampire/thrall_commune/cast(list/targets, mob/user) - var/input = tgui_input_text(user, "Enter a message to relay to the other thralls", "Thrall Commune") + var/input = tgui_input_text(user, "Введите сообщение для передачи другим рабам", "Сообщение рабам") if(! input) revert_cast(user) return // if admins give this to a non vampire/thrall it is not my problem var/is_thrall = isvampirethrall(user) - var/title = is_thrall ? "(Vampire Thrall) [user.real_name]" : "(Vampire Master) [user.real_name]" + var/title = is_thrall ? "(Раб Вампира) [user.real_name]" : "(Мастер Вампир) [user.real_name]" var/message = is_thrall ? "[input]" : "[input]" for(var/mob/player in targets) - to_chat(player, "Thrall Commune, [title] telepathizes, [message]") + to_chat(player, "Рабская телепатия, [title] телепатезирует, [message]") for(var/mob/ghost in GLOB.dead_mob_list) - to_chat(ghost, "Thrall Commune, [title] ([ghost_follow_link(user, ghost)]) telepathizes, [message]") + to_chat(ghost, "Рабская телепатия, [title] ([ghost_follow_link(user, ghost)]) телепатезирует, [message]") log_say("(DANTALION) [input]", user) user.create_log(SAY_LOG, "(DANTALION) [input]") /obj/effect/proc_holder/spell/vampire/pacify - name = "Pacify" - desc = "Pacify a target temporarily, making them unable to cause harm." - gain_desc = "You have gained the ability to pacify someone's harmful tendencies, preventing them from doing any physical harm to anyone." + name = "Умиротворение" + desc = "Временно умиротворяет цель, делая её неспособной причинить вред." + gain_desc = "Вы обрели способность умиротворять агрессивные порывы гуманоида, не позволяя ему причинить кому-либо физический вред." action_icon_state = "pacify" base_cooldown = 10 SECONDS required_blood = 10 @@ -172,15 +172,15 @@ /obj/effect/proc_holder/spell/vampire/pacify/cast(list/targets, mob/user) for(var/mob/living/carbon/human/H as anything in targets) - to_chat(H, span_notice("You suddenly feel very calm...")) + to_chat(H, span_notice("Вы вдруг почувствовали себя очень спокойно...")) SEND_SOUND(H, 'sound/hallucinations/i_see_you1.ogg') H.apply_status_effect(STATUS_EFFECT_PACIFIED) /obj/effect/proc_holder/spell/vampire/switch_places - name = "Subspace Swap" - desc = "Switch positions with a target. Also slows down the victim and make them hallucinate." - gain_desc = "You have gained the ability to switch positions with a targeted mob." + name = "Подпространственный обмен" + desc = "Поменяйтесь местами с целью. Также замедляет жертву и вызывает у нее галлюцинации." + gain_desc = "Вы получили возможность меняться местами с выбранным существом." centcom_cancast = FALSE action_icon_state = "subspace_swap" base_cooldown = 5 SECONDS @@ -212,9 +212,9 @@ /obj/effect/proc_holder/spell/vampire/self/decoy - name = "Deploy Decoy" - desc = "Briefly turn invisible and deploy a decoy illusion to fool your prey." - gain_desc = "You have gained the ability to turn invisible and create decoy illusions." + name = "Приманка" + desc = "На короткое время станьте невидимым и создайте иллюзию для обмана, чтобы провести свою жертву." + gain_desc = "Вы получили способность становиться невидимым и создавать обманные иллюзии." action_icon_state = "decoy" required_blood = 30 base_cooldown = 20 SECONDS @@ -233,9 +233,9 @@ /obj/effect/proc_holder/spell/vampire/rally_thralls - name = "Rally Thralls" - desc = "Removes all incapacitating effects from your nearby thralls." - gain_desc = "You have gained the ability to remove all incapacitating effects from nearby thralls." + name = "Сплотить рабов" + desc = "Снимает все обездвиживающие эффекты с находящихся рядом с вами рабов." + gain_desc = "Вы получили способность снимать все обездвиживающие эффекты с ближайших рабов." action_icon_state = "thralls_up" required_blood = 40 base_cooldown = 30 SECONDS @@ -264,9 +264,9 @@ /obj/effect/proc_holder/spell/vampire/self/share_damage - name = "Blood Bond" - desc = "Creates a net between you and your nearby thralls that evenly shares all damage received." - gain_desc = "You have gained the ability to share damage between you and your thralls." + name = "Кровавые узы" + desc = "Создает сеть между вами и ближайшими рабами, которая равномерно распределяет весь получаемый урон." + gain_desc = "Вы получили способность распределять урон между вами и вашими рабами." action_icon_state = "blood_bond" required_blood = 5 @@ -280,9 +280,9 @@ /obj/effect/proc_holder/spell/vampire/hysteria - name = "Mass Hysteria" - desc = "Casts a powerful illusion to make everyone nearby perceive others to looks like random animals after briefly blinding them. Also slows affected victims." - gain_desc = "You have gained the ability to make everyone nearby perceive others to looks like random animals after briefly blinding them." + name = "Массовая истерия" + desc = "Накладывает мощную иллюзию, заставляющую всех, кто находится поблизости, воспринимать окружающих как случайных животных после кратковременного ослепления. Также замедляет пострадавших." + gain_desc = "Вы получили способность заставлять всех, кто находится рядом, воспринимать окружающих как случайных животных после кратковременного ослепления." action_icon_state = "hysteria" required_blood = 40 base_cooldown = 60 SECONDS diff --git a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm index 2e4ecace710..d8c705e9b07 100644 --- a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/spell/vampire/self/blood_swell - name = "Blood Swell" - desc = "You infuse your body with blood, making you highly resistant to stuns and physical damage. However, this makes you unable to fire ranged weapons while it is active." - gain_desc = "You have gained the ability to temporarly resist large amounts of stuns and physical damage." + name = "Кровавый вал" + desc = "Вы наполняете своё тело кровью, что делает вас очень устойчивым к оглушению и физическому урону, но не даёт использовать оружие дальнего боя." + gain_desc = "Вы получили способность временно повышать свою сопротивляемость урону и оглушению." base_cooldown = 40 SECONDS required_blood = 30 action_icon_state = "blood_swell" @@ -15,13 +15,13 @@ /datum/vampire_passive/blood_swell_upgrade - gain_desc = "While blood swell is active all of your melee attacks deal increased damage." + gain_desc = "Пока действует «Кровавый вал», все ваши атаки в ближнем бою наносят повышенный урон." /obj/effect/proc_holder/spell/vampire/self/stomp - name = "Seismic Stomp" - desc = "You slam your foot into the ground sending a powerful shockwave through the station's hull, sending people flying away. Cannot be cast if you legs are impared by a bola or similar." - gain_desc = "You have gained the ability to knock people back using a powerful stomp." + name = "Ударная волна" + desc = "Вы бьёте ногой по земле, посылая мощную ударную волну, отчего окружающие разлетаются в разные стороны. Не может быть применено, если ваши ноги скованы или обездвижены." + gain_desc = "Вы получили способность отбрасывать людей назад, используя мощный топот." action_icon_state = "seismic_stomp" base_cooldown = 30 SECONDS required_blood = 25 @@ -87,31 +87,31 @@ /obj/effect/proc_holder/spell/vampire/self/overwhelming_force - name = "Overwhelming Force" - desc = "When toggled you will automatically pry open doors that you bump into if you do not have access. Also deflects any thrown bola." - gain_desc = "You have gained the ability to force open doors and deflect bola at a small blood cost." + name = "Неудержимая сила" + desc = "При активации вы будете выбивать все шлюзы, на которые наткнётесь, если у вас нет доступа, а также отражать все обездвиживающие предметы." + gain_desc = "Вы получили способность выбивать двери и отражать обездвиживающие предметы за небольшую кровавую плату." base_cooldown = 2 SECONDS action_icon_state = "OH_YEAAAAH" /obj/effect/proc_holder/spell/vampire/self/overwhelming_force/cast(list/targets, mob/user) if(!HAS_TRAIT_FROM(user, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT)) - to_chat(user, span_userdanger("You feel MIGHTY!")) + to_chat(user, span_userdanger("ВЫ ЧУВСТВУЕТЕ СЕБЯ СИЛЬНЕЕ!")) ADD_TRAIT(user, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT) user.status_flags &= ~CANPUSH user.move_resist = MOVE_FORCE_STRONG else - to_chat(user, span_warning("You feel weaker...")) + to_chat(user, span_warning("Вы чувствуете себя слабее...")) REMOVE_TRAIT(user, TRAIT_FORCE_DOORS, VAMPIRE_TRAIT) user.move_resist = MOVE_FORCE_DEFAULT user.status_flags |= CANPUSH /obj/effect/proc_holder/spell/vampire/self/blood_rush - name = "Blood Rush" - desc = "Infuse yourself with blood magic to boost your movement speed." - gain_desc = "You have gained the ability to temporarily move at high speeds." + name = "Кровавый драйв" + desc = "Напитайте себя магией крови, чтобы увеличить скорость передвижения." + gain_desc = "Вы получили способность временно перемещаться с большой скоростью." base_cooldown = 30 SECONDS required_blood = 15 action_icon_state = "blood_rush" @@ -121,19 +121,19 @@ var/mob/living/target = targets[1] if(ishuman(target)) var/mob/living/carbon/human/H = target - to_chat(H, span_notice("You feel a rush of energy!")) + to_chat(H, span_notice("Вы ощущаете прилив энергии!")) H.apply_status_effect(STATUS_EFFECT_BLOOD_RUSH) /obj/effect/proc_holder/spell/fireball/demonic_grasp - name = "Demonic Grasp" - desc = "Fire a hand of demonic energy, snaring and throwing its target around, based on your intent. Disarm pushes, grab pulls." - gain_desc = "You have gained the ability to snare and disrupt people with demonic apendages." + name = "Демоническая хватка" + desc = "Выстрелите сгустком демонической энергии, захватывая или отбрасывая цель в зависимости от вашего намерения: «ОБЕЗОРУЖИТЬ» — оттолкнуть, «СХВАТИТЬ» — притянуть." + gain_desc = "Вы получили способность притягивать и отталкивать людей с помощью демонических отростков." base_cooldown = 15 SECONDS fireball_type = /obj/item/projectile/magic/demonic_grasp - selection_activated_message = span_notice("You raise your hand, full of demonic energy! Left-click to cast at a target!") - selection_deactivated_message = span_notice("You re-absorb the energy...for now.") + selection_activated_message = span_notice("Вы поднимаете руку, полную демонической энергии!") + selection_deactivated_message = span_notice("Вы возвращаете себе энергию... пока что.") action_icon_state = "demonic_grasp" @@ -161,6 +161,14 @@ /obj/item/projectile/magic/demonic_grasp name = "demonic grasp" + ru_names = list( + NOMINATIVE = "демоническая хватка", + GENITIVE = "демонической хватки", + DATIVE = "демонической хватке", + ACCUSATIVE = "демоническую хватку", + INSTRUMENTAL = "демонической хваткой", + PREPOSITIONAL = "демонической хватке" + ) // parry this you filthy casual reflectability = REFLECTABILITY_NEVER icon_state = null @@ -210,9 +218,9 @@ /obj/effect/proc_holder/spell/vampire/charge - name = "Charge" - desc = "You charge at wherever you click on screen, dealing large amounts of damage, stunning and destroying walls and other objects." - gain_desc = "You can now charge at a target on screen, dealing massive damage and destroying structures." + name = "Рывок" + desc = "Вы резко бросаетесь в выбранное направление, нанося огромный урон, оглушая и разрушая стены и другие объекты." + gain_desc = "Теперь вы можете произвести рывок, нанося огромный урон и разрушая объекты." required_blood = 30 base_cooldown = 30 SECONDS action_icon_state = "vampire_charge" diff --git a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm index f80c00c1d63..d1fbf10ee05 100644 --- a/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/hemomancer_powers.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/spell/vampire/self/vamp_claws - name = "Vampiric Claws" - desc = "You channel blood magics to forge deadly vampiric claws that leech blood and strike rapidly. Cannot be used if you are holding something that cannot be dropped." - gain_desc = "You have gained the ability to forge your hands into vampiric claws." + name = "Когти" + desc = "Вы используете магию крови, чтобы выковать смертоносные вампирские когти, которые высасывают кровь и наносят стремительные удары. Их нельзя использовать, если вы держите что-то, что нельзя уронить." + gain_desc = "Вы получили способность превращать свои руки в вампирские когти." base_cooldown = 15 SECONDS required_blood = 20 action_icon_state = "vampire_claws" @@ -9,11 +9,11 @@ /obj/effect/proc_holder/spell/vampire/self/vamp_claws/cast(mob/user) if(user.l_hand || user.r_hand) - to_chat(user, span_notice("You drop what was in your hands as large blades spring from your fingers!")) + to_chat(user, span_notice("Вы роняете то, что было у вас в руках, и из ваших пальцев вылетают огромные лезвия!")) user.drop_l_hand() user.drop_r_hand() else - to_chat(user, span_notice("Large blades of blood spring from your fingers!")) + to_chat(user, span_notice("Из ваших пальцев брызжет кровь!")) var/obj/item/twohanded/required/vamp_claws/claws = new /obj/item/twohanded/required/vamp_claws(user.loc, src) RegisterSignal(user, COMSIG_MOB_KEY_DROP_ITEM_DOWN, PROC_REF(dispel)) user.put_in_hands(claws) @@ -35,7 +35,7 @@ if(current) qdel(current) - to_chat(user, span_notice("You dispel your claws!")) + to_chat(user, span_notice("Вы рассеиваете когти!")) return COMPONENT_CANCEL_DROP @@ -47,7 +47,15 @@ /obj/item/twohanded/required/vamp_claws name = "vampiric claws" - desc = "A pair of eldritch claws made of living blood, they seem to flow yet they are solid" + desc = "Пара древних когтей из живой крови, они кажутся текучими и в то же время твердыми." + ru_names = list( + NOMINATIVE = "вампирические когти", + GENITIVE = "вампирических когтей", + DATIVE = "вампирическим когтям", + ACCUSATIVE = "вампирические когти", + INSTRUMENTAL = "вампирическими когтями", + PREPOSITIONAL = "вампирических когтях" + ) icon = 'icons/effects/vampire_effects.dmi' icon_state = "vamp_claws" w_class = WEIGHT_CLASS_BULKY @@ -59,7 +67,7 @@ attack_speed = 0.4 SECONDS attack_effect_override = ATTACK_EFFECT_CLAW hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut", "savaged", "clawed") + attack_verb = list("атаковал", "порезал", "уколол", "полоснул", "рубанул", "пронзил", "нарезал кубиками") sprite_sheets_inhand = list(SPECIES_VOX = 'icons/mob/clothing/species/vox/held.dmi', SPECIES_DRASK = 'icons/mob/clothing/species/drask/held.dmi') var/durability = 15 var/blood_drain_amount = 15 @@ -106,18 +114,18 @@ durability-- if(durability <= 0) qdel(src) - to_chat(user, span_warning("Your claws shatter!")) + to_chat(user, span_warning("Ваши когти сломаны!")) /obj/item/twohanded/required/vamp_claws/attack_self(mob/user) qdel(src) - to_chat(user, span_notice("You dispel your claws!")) + to_chat(user, span_notice("Вы рассеиваете когти!")) /obj/effect/proc_holder/spell/vampire/blood_tendrils - name = "Blood Tendrils" - desc = "You summon blood tendrils from bluespace after a delay to ensnare people in an area, slowing them down and applying moderate toxic damage." - gain_desc = "You have gained the ability to summon blood tendrils to slow people down in an area that you target." + name = "Кровавые щупальца" + desc = "Используя силу блюспейса, после небольшой задержки вы призываете кровавые щупальца, которые опутывают цели в зоне действия, замедляя их и нанося умеренный токсичный урон." + gain_desc = "Вы получили способность вызывать кровавые щупальца, чтобы замедлять людей в выбранной вами области." required_blood = 10 base_cooldown = 10 SECONDS @@ -126,8 +134,8 @@ var/area_of_affect = 1 need_active_overlay = TRUE - selection_activated_message = span_notice("You channel blood magics to weaken the bluespace veil. Left-click to cast at a target area!") - selection_deactivated_message = span_notice("Your magics subside.") + selection_activated_message = span_notice("Вы используете магию крови, чтобы ослабить завесу блюспейса.") + selection_deactivated_message = span_notice("Ваша магия ослабевает.") /obj/effect/proc_holder/spell/vampire/blood_tendrils/create_new_targeting() @@ -153,7 +161,7 @@ if(L.affects_vampire(user)) L.Slowed(slowed_amount) L.apply_damage(33, TOX) - L.visible_message(span_warning("[L] gets ensnare in blood tendrils, restricting [L.p_their()] movement!")) + L.visible_message(span_warning("[L] опутыва[pluralize_ru(L.gender, "ет", "ют")]ся кровавыми щупальцами, которые ограничивают [genderize_ru(L.gender, "его", "её", "его", "их")] движение!")) var/turf/target_turf = get_turf(L) playsound(target_turf, 'sound/magic/tail_swing.ogg', 50, TRUE) new /obj/effect/decal/cleanable/blood(target_turf) @@ -171,9 +179,9 @@ /obj/effect/proc_holder/spell/vampire/blood_barrier - name = "Blood Barrier" - desc = "Select two points within 3 tiles of each other and make a barrier between them. You can cast on self to make a barrier on your current position instantly." - gain_desc = "You have gained the ability to summon a crystaline wall of blood between two points, the barrier is easily destructable, however you can walk freely through it. You can cast on self to make a barrier on your current position instantly." + name = "Кровавый барьер" + desc = "Выберите две точки в пределах трёх тайлов друг от друга и создайте между ними барьер. Вы можете наложить заклинание на себя, чтобы мгновенно создать барьер на вашей текущей позиции." + gain_desc = "Вы получили способность вызывать кристаллическую стену крови между двумя точками, барьер легко разрушается, однако вы можете свободно проходить сквозь него. Вы можете наложить на себя заклинание, чтобы мгновенно создать барьер на вашем текущем местоположении." required_blood = 20 base_cooldown = 30 SECONDS should_recharge_after_cast = FALSE @@ -237,7 +245,7 @@ // Otherwise we will try to build a wall by two clicks if(target_turf == start_turf) - to_chat(user, span_notice("You deselect the targeted turf.")) + to_chat(user, span_notice("Вы убираете пометку с тайла.")) start_turf = null should_recharge_after_cast = FALSE return @@ -264,7 +272,15 @@ /obj/structure/blood_barrier name = "blood barrier" - desc = "a grotesque structure of crystalised blood. It's slowly melting away..." + desc = "Гротескная структура из кристаллизованной крови. Она медленно тает..." + ru_names = list( + NOMINATIVE = "кровавый барьер", + GENITIVE = "кровавого барьера", + DATIVE = "кровавому барьеру", + ACCUSATIVE = "кровавый барьер", + INSTRUMENTAL = "кровавым барьером", + PREPOSITIONAL = "о кровавом барьере" + ) max_integrity = 100 icon_state = "blood_barrier" icon = 'icons/effects/vampire_effects.dmi' @@ -313,9 +329,9 @@ /obj/effect/proc_holder/spell/ethereal_jaunt/blood_pool - name = "Sanguine Pool" - desc = "You shift your form into a pool of blood, making you invulnerable and able to move through anything that's not a wall or space. You leave a trail of blood behind you when you do this." - gain_desc = "You have gained the ability to shift into a pool of blood, allowing you to evade pursuers with great mobility." + name = "Погружение в кровь" + desc = "Вы превращаете свою форму в лужу крови, делая ее неуязвимой и способной перемещаться сквозь всё, что не является стеной или космосом. После этого за вами остаётся кровавый след." + gain_desc = "Вы получили способность превращаться в лужу крови, что позволяет вам уходить от преследователей с большой мобильностью." jaunt_duration = 8 SECONDS clothes_req = FALSE school = "vampire" @@ -342,9 +358,9 @@ /obj/effect/proc_holder/spell/vampire/predator_senses - name = "Predator Senses" - desc = "Hunt down your prey, there's nowhere to hide... Will stun for a short perion if in view." - gain_desc = "Your senses are heightened, nobody can hide from you now." + name = "Чутьё хищника" + desc = "Выслеживайте свою добычу, здесь ей негде спрятаться... На короткое время оглушает её, если она окажется в вашем поле зрения." + gain_desc = "Ваши чувства обострились, теперь никто не сможет от вас спрятаться." action_icon_state = "predator_sense" base_cooldown = 10 SECONDS create_attack_logs = FALSE @@ -366,14 +382,14 @@ for(var/mob/living/carbon/human/H as anything in targets) targets_by_name[H.real_name] = H - var/target_name = input(user, "Person to Locate", "Blood Stench") in targets_by_name + var/target_name = input(user, "Лицо для поиска", "Запах крови") in targets_by_name if(!target_name) return var/mob/living/carbon/human/target = targets_by_name[target_name] - var/message = "[target_name] is in [get_area(target)], [dir2text(get_dir(user, target))] from you." + var/message = "[target_name] наход[pluralize_ru(target_name, "ит", "ят")]ся в локации [get_area(target)], на [dir2rustext(get_dir(user, target))]е от вас." if(target.get_damage_amount() >= 40 || target.bleed_rate) - message += " They are wounded..." + message += " Цель ранена..." to_chat(user, span_cultlarge("[message]")) if(target in view(user)) @@ -384,9 +400,9 @@ /obj/effect/proc_holder/spell/vampire/blood_eruption - name = "Blood Eruption" - desc = "Every pool of blood in 4 tiles erupts with a spike of living blood, damaging anyone stood on it." - gain_desc = "You have gained the ability to weaponise pools of blood to damage those stood on them." + name = "Извержение крови" + desc = "Каждая лужа крови в 4 тайлах от вас извергается шипом живой крови, нанося урон всем, кто стоит на ней." + gain_desc = "Вы получили способность использовать лужи крови для нанесения урона тем, кто на них стоит." required_blood = 50 base_cooldown = 1 MINUTES action_icon_state = "blood_spikes" @@ -416,7 +432,7 @@ playsound(L, 'sound/misc/demon_attack1.ogg', 50, TRUE) L.apply_damage(50, BRUTE, BODY_ZONE_CHEST) L.Stun(3 SECONDS) - L.visible_message(span_warning("[L] gets impaled by a spike of living blood!")) + L.visible_message(span_warning("[L] пронзен[genderize_ru(L.gender, "", "а", "о", "ы")] шипом живой крови!")) /obj/effect/temp_visual/blood_spike @@ -426,9 +442,9 @@ /obj/effect/proc_holder/spell/vampire/self/blood_spill - name = "The Blood Bringers Rite" - desc = "When toggled, everyone around you begins to bleed profusely. You will drain their blood and rejuvenate yourself with it." - gain_desc = "You have gained the ability to rip the very life force out of people and absorb it, healing you." + name = "Кровавый обряд" + desc = "При переключении все вокруг начнут обильно кровоточить. Вы будете поглощать их кровь и напитываться силой." + gain_desc = "Вы обрели способность извлекать жизненную силу из гуманоидов и поглощать её, исцеляя себя." base_cooldown = 10 SECONDS action_icon_state = "blood_bringers_rite" required_blood = 10 @@ -480,7 +496,7 @@ owner.AdjustStunned(-2 SECONDS) owner.AdjustWeakened(-2 SECONDS) if(drain_amount == 10) - to_chat(H, span_warning("You feel your life force draining!")) + to_chat(H, span_warning("Вы чувствуете, как из вас утекает жизненная сила!")) if(beam_number >= max_beams) break diff --git a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm index 64162d25520..7afdb5e75f3 100644 --- a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm @@ -1,7 +1,7 @@ /obj/effect/proc_holder/spell/vampire/self/cloak - name = "Cloak of Darkness" - desc = "Toggles whether you are currently cloaking yourself in darkness. When in darkness and toggled on, you move at increased speeds." - gain_desc = "You have gained the Cloak of Darkness ability, which when toggled makes you nearly invisible and highly agile in the shroud of darkness." + name = "Покров тьмы" + desc = "Включает или выключает маскировку в темноте. Если вы замаскированы и находитесь в темноте, то ваша скорость увеличивается." + gain_desc = "Теперь вы можете маскировать себя во тьме, становясь почти невидимым и чрезвычайно проворным." action_icon_state = "vampire_cloak" base_cooldown = 2 SECONDS @@ -11,7 +11,7 @@ if(!V) return - var/new_name = "[initial(name)] ([V.iscloaking ? "Deactivate" : "Activate"])" + var/new_name = "[initial(name)] ([V.iscloaking ? "Деактивировать" : "Активировать"])" name = new_name action?.name = new_name action?.UpdateButtonIcon() @@ -30,7 +30,7 @@ H.physiology.burn_mod /= 1.3 update_vampire_spell_name(user) - to_chat(user, span_notice("You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.")) + to_chat(user, span_notice("Теперь вы будете [V.iscloaking ? "скрыты" : "видимы"] в темноте.")) /mob/living/proc/update_vampire_cloak() @@ -40,9 +40,9 @@ /obj/effect/proc_holder/spell/vampire/shadow_snare - name = "Shadow Snare" - desc = "You summon a trap on the ground. When crossed it will blind the target, extinguish any lights they may have, and ensnare them." - gain_desc = "You have gained the ability to summon a trap that will blind, ensnare, and turn off the lights of anyone who crosses it." + name = "Теневая ловушка" + desc = "Вы вызываете ловушку на земле. Когда её пересекут, она ослепит цель, погасит все имеющиеся у неё источники света и захватит её в капкан." + gain_desc = "Вы получили способность вызывать ловушку, которая ослепит, захватит в капкан и выключит свет любому, кто пересечет ее." base_cooldown = 10 SECONDS required_blood = 20 action_icon_state = "shadow_snare" @@ -63,7 +63,15 @@ /obj/item/restraints/legcuffs/beartrap/shadow_snare name = "shadow snare" - desc = "An almost transparent trap that melts into the shadows." + desc = "Почти прозрачная ловушка, которая тает в тени." + ru_names = list( + NOMINATIVE = "теневая ловушка", + GENITIVE = "теневой ловушки", + DATIVE = "теневой ловушке", + ACCUSATIVE = "теневую ловушку", + INSTRUMENTAL = "теневой ловушкой", + PREPOSITIONAL = "теневой ловушке" + ) alpha = 60 armed = TRUE anchored = TRUE @@ -88,7 +96,7 @@ obj_integrity -= 50 if(obj_integrity <= 0) - visible_message(span_notice("[src] withers away.")) + visible_message(span_notice("[capitalize(declent_ru(NOMINATIVE))] исчезает.")) qdel(src) @@ -119,7 +127,7 @@ /obj/item/restraints/legcuffs/beartrap/shadow_snare/attack_tk(mob/user) if(iscarbon(user)) var/mob/living/carbon/C = user - to_chat(user, span_userdanger("The snare sends a psychic backlash!")) + to_chat(user, span_userdanger("Ловушка посылает обратную связь с помощью психического сигнала!")) C.EyeBlind(20 SECONDS) @@ -130,16 +138,16 @@ . |= ATTACK_CHAIN_BLOCKED_ALL user.do_attack_animation(src) user.visible_message( - span_danger("[user] points [I] at [src] and it withers away!"), - span_danger("You point [I] at [src] and it withers away!"), + span_danger("[user] навод[pluralize_ru(user.gender, "ит", "ят")] [I] на [declent_ru(ACCUSATIVE)], и она исчезает!"), + span_danger("Наведите [I] на [declent_ru(ACCUSATIVE)], и она исчезнет!"), ) qdel(src) /obj/effect/proc_holder/spell/vampire/soul_anchor - name = "Soul Anchor" - desc = "You summon a dimenional anchor after a delay, casting again will teleport you back to the anchor. You are forced back after 2 minutes if you have not cast again." - gain_desc = "You have gained the ability to save a point in space and teleport back to it at will. Unless you willingly teleport back to that point within 2 minutes, you are forced back." + name = "Теневой якорь" + desc = "Вы вызываете затемнённый якорь после задержки, повторное заклинание телепортирует вас обратно к якорю. Вы будете вынуждены вернуться назад через 2 минуты, если не произнесли повторное заклинание." + gain_desc = "Вы получили способность сохранять точку в пространстве и телепортироваться к ней по своему желанию. Если в течение 2 минут вы самостоятельно не телепортируетесь обратно в эту точку, вас телепортирует автоматически." required_blood = 30 centcom_cancast = FALSE base_cooldown = 130 SECONDS @@ -159,7 +167,7 @@ /obj/effect/proc_holder/spell/vampire/soul_anchor/cast(list/targets, mob/user) if(making_anchor) // second cast, but we are impatient - to_chat(user, span_notice("Your anchor isn't ready yet!")) + balloon_alert(user, "якорь не готов!") return if(!making_anchor && !anchor) // first cast, setup the anchor @@ -222,7 +230,15 @@ // an indicator that shows where the vampire will land /obj/structure/shadow_anchor name = "shadow anchor" - desc = "Looking at this thing makes you feel uneasy..." + desc = "При взгляде на эту штуку вам становится не по себе..." + ru_names = list( + NOMINATIVE = "теневой якорь", + GENITIVE = "теневого якоря", + DATIVE = "теневому якорю", + ACCUSATIVE = "теневой якорь", + INSTRUMENTAL = "теневым якорем", + PREPOSITIONAL = "теневом якоре" + ) icon = 'icons/obj/cult.dmi' icon_state = "pylon" alpha = 120 @@ -234,9 +250,9 @@ /obj/effect/proc_holder/spell/vampire/dark_passage - name = "Dark Passage" - desc = "You teleport to a targeted turf." - gain_desc = "You have gained the ability to blink a short distance towards a targeted turf." + name = "Шаг в тень" + desc = "Вы телепортируетесь на указанную площадку." + gain_desc = "Вы получили способность совершать молниеносный бросок на небольшое расстояние в сторону указанной площадки." base_cooldown = 15 SECONDS required_blood = 30 centcom_cancast = FALSE @@ -272,9 +288,9 @@ /obj/effect/proc_holder/spell/vampire/vamp_extinguish - name = "Extinguish" - desc = "You extinguish any light source in an area around you." - gain_desc = "You have gained the ability to extinguish nearby light sources." + name = "Погасить" + desc = "Вы гасите любой источник света в области вокруг себя." + gain_desc = "Вы получили способность гасить ближайшие источники света." base_cooldown = 30 SECONDS action_icon_state = "vampire_extinguish" create_attack_logs = FALSE @@ -294,9 +310,9 @@ /obj/effect/proc_holder/spell/vampire/shadow_boxing - name = "Shadow Boxing" - desc = "Target someone to have your shadow beat them up. You must stay within 2 tiles for this to work." - gain_desc = "You have gained the ability to make your shadow fight for you." + name = "Бой с тенью" + desc = "Нацельтесь на кого-нибудь, чтобы ваша тень избила его. Чтобы это сработало, вы должны находиться в пределах двух тайлов." + gain_desc = "Теперь вы можете заставить свою тень сражаться бок о бок с вами." base_cooldown = 30 SECONDS action_icon_state = "shadow_boxing" required_blood = 50 @@ -318,9 +334,9 @@ /obj/effect/proc_holder/spell/vampire/self/eternal_darkness - name = "Eternal Darkness" - desc = "When toggled, you shroud the area around you in darkness and slowly lower the body temperature of people nearby." - gain_desc = "You have gained the ability to shroud the area around you in darkness, only the strongest of lights can pierce your unholy powers." + name = "Вечная тьма" + desc = "При включении вы окутываете пространство вокруг себя темнотой и медленно понижаете температуру тела находящихся рядом гуманоидов." + gain_desc = "Вы обрели способность окутывать всё вокруг себя тьмой. Только сильнейший свет сможет пронзить вашу нечестивую силу." base_cooldown = 10 SECONDS action_icon_state = "eternal_darkness" required_blood = 5 @@ -339,7 +355,7 @@ /datum/vampire_passive/eternal_darkness - gain_desc = "You surround yourself in a unnatural darkness, freezing those around you." + gain_desc = "Вы окружаете себя неестественной тьмой, замораживая окружающих." /datum/vampire_passive/eternal_darkness/New() @@ -367,5 +383,5 @@ /datum/vampire_passive/xray - gain_desc = "You can now see through walls, incase you hadn't noticed." + gain_desc = "Теперь вы можете видеть сквозь стены, если вы не заметили." diff --git a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm index 96381501944..4d24e992543 100644 --- a/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/vampire_powers.dm @@ -89,8 +89,8 @@ /obj/effect/proc_holder/spell/vampire/self/rejuvenate - name = "Rejuvenate" - desc = "Use reserve blood to enliven your body, removing any incapacitating effects." + name = "Восстановление" + desc = "Наполните своё тело резервной кровью, чтобы снять с себя любые обездвиживающие эффекты." action_icon_state = "vampire_rejuvinate" base_cooldown = 20 SECONDS stat_allowed = UNCONSCIOUS @@ -106,7 +106,7 @@ user.adjustStaminaLoss(-100) user.set_resting(FALSE, instant = TRUE) user.get_up(instant = TRUE) - to_chat(user, span_notice("You instill your body with clean blood and remove any incapacitating effects.")) + to_chat(user, span_notice("Вы наполняете свое тело чистой кровью и снимаете все обездвиживающие эффекты.")) var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) var/rejuv_bonus = V.get_rejuv_bonus() if(rejuv_bonus) @@ -139,9 +139,9 @@ /obj/effect/proc_holder/spell/vampire/self/specialize - name = "Choose Specialization" - desc = "Choose what sub-class of vampire you want to evolve into." - gain_desc = "You can now choose what specialization of vampire you want to evolve into." + name = "Выбрать специализацию" + desc = "Выберите, каким подклассом вампира вы хотите стать." + gain_desc = "Теперь вы можете выбрать, в какую специализацию вампира вы хотите эволюционировать." base_cooldown = 2 SECONDS action_icon_state = "select_class" @@ -155,10 +155,19 @@ /obj/effect/proc_holder/spell/vampire/self/specialize/ui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "VampireSpecMenu", "Specialisation Menu") + ui = new(user, src, "VampireSpecMenu", "Меню выбора специализации") ui.set_autoupdate(FALSE) ui.open() +/obj/effect/proc_holder/spell/vampire/self/specialize/ui_static_data(mob/user) + var/list/data = list() + data["hemomancer"] = icon2base64(icon('icons/misc/vampire_tgui.dmi', "hemomancer")) + data["umbrae"] = icon2base64(icon('icons/misc/vampire_tgui.dmi', "umbrae")) + data["gargantua"] = icon2base64(icon('icons/misc/vampire_tgui.dmi', "gargantua")) + data["dantalion"] = icon2base64(icon('icons/misc/vampire_tgui.dmi', "dantalion")) + data["bestia"] = icon2base64(icon('icons/misc/vampire_tgui.dmi', "bestia")) + + return data /obj/effect/proc_holder/spell/vampire/self/specialize/ui_data(mob/user) var/datum/antagonist/vampire/vamp = user.mind.has_antag_datum(/datum/antagonist/vampire) @@ -210,8 +219,8 @@ /obj/effect/proc_holder/spell/vampire/glare - name = "Glare" - desc = "Your eyes flash, stunning and silencing anyone in front of you. It has lesser effects for those around you." + name = "Вспышка" + desc = "Ваши глаза вспыхивают, ошеломляя и заставляя замолчать всех, кто находится прямо перед вами. В меньшей степени действует на окружающих вне вашего поля зрения." action_icon_state = "vampire_glare" base_cooldown = 30 SECONDS stat_allowed = UNCONSCIOUS @@ -247,11 +256,11 @@ if(ishuman(user) && istype(user.glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) var/obj/item/clothing/glasses/sunglasses/blindfold/blindfold = user.glasses if(blindfold.tint) - to_chat(user, span_warning("You're blindfolded!")) + balloon_alert(user, "ваши глаза закрыты!") return user.mob_light(LIGHT_COLOR_BLOOD_MAGIC, _range = 3, _duration = 0.2 SECONDS) - user.visible_message(span_warning("[user]'s eyes emit a blinding flash!")) + user.visible_message(span_warning("Глаза [user] испускают ослепительную вспышку!")) for(var/mob/living/target as anything in targets) var/deviation @@ -277,7 +286,7 @@ target.AdjustSilence(8 SECONDS) target.flash_eyes(1, TRUE, TRUE) - to_chat(target, span_warning("You are blinded by [user]'s glare.")) + to_chat(target, span_warning("Вы ослеплены взглядом [user].")) add_attack_logs(user, target, "(Vampire) Glared at") @@ -317,8 +326,8 @@ /obj/effect/proc_holder/spell/vampire/raise_vampires - name = "Raise Vampires" - desc = "Summons deadly vampires from bluespace." + name = "Возвышение вампиров" + desc = "Призывает смертоносных вампиров из блюспейса." school = "transmutation" clothes_req = FALSE human_req = TRUE @@ -328,7 +337,7 @@ cooldown_min = 2 SECONDS action_icon_state = "revive_thrall" sound = 'sound/magic/wandodeath.ogg' - gain_desc = "You have gained the ability to Raise Vampires. This extremely powerful AOE ability affects all humans near you. Vampires/thralls are healed. Corpses are raised as vampires. Others are stunned, then brain damaged, then killed." + gain_desc = "Вы получили способность «Возвышение вампиров». Эта чрезвычайно мощная АОЕ-способность действует на всех людей рядом с вами. Вампиры/стражи исцеляются. Трупы воскрешаются как вампиры. Другие люди оглушаются, получают повреждения мозга, а затем погибают." /obj/effect/proc_holder/spell/vampire/raise_vampires/create_new_targeting() @@ -340,7 +349,7 @@ /obj/effect/proc_holder/spell/vampire/raise_vampires/cast(list/targets, mob/user = usr) new /obj/effect/temp_visual/cult/sparks(user.loc) var/turf/T = get_turf(user) - to_chat(user, span_warning("You call out within bluespace, summoning more vampiric spirits to aid you!")) + to_chat(user, span_warning("Вы взываете к блюспейсу, призывая на помощь ещё больше вампирических духов!")) for(var/mob/living/carbon/human/H in targets) T.Beam(H, "sendbeam", 'icons/effects/effects.dmi', time = 30, maxdistance = 7, beam_type = /obj/effect/ebeam) new /obj/effect/temp_visual/cult/sparks(H.loc) @@ -351,13 +360,13 @@ if(!istype(M) || !istype(H)) return if(!H.mind) - visible_message("[H] looks to be too stupid to understand what is going on.") + visible_message("Похоже, [H] слишком глуп[genderize_ru(H.gender, "", "а", "о", "ы")], чтобы понять, что происходит.") return if(HAS_TRAIT(H, TRAIT_NO_BLOOD) || HAS_TRAIT(H, TRAIT_EXOTIC_BLOOD) || !H.blood_volume) - visible_message("[H] looks unfazed!") + visible_message("[H] выгляд[pluralize_ru(H.gender, "ит", "ят")] невозмутимым!") return if(H.mind.has_antag_datum(/datum/antagonist/vampire) || H.mind.special_role == SPECIAL_ROLE_VAMPIRE || H.mind.special_role == SPECIAL_ROLE_VAMPIRE_THRALL) - visible_message(span_notice("[H] looks refreshed!")) + visible_message(span_notice("[H] выгляд[pluralize_ru(H.gender, "ит", "ят")] посвежевшим!")) H.heal_overall_damage(60, 60, affect_robotic = TRUE) for(var/obj/item/organ/external/bodypart as anything in H.bodyparts) if(prob(25)) @@ -367,10 +376,10 @@ return if(H.stat != DEAD) if(H.IsWeakened()) - visible_message(span_warning("[H] looks to be in pain!")) + visible_message(span_warning("[H], похоже, испытыва[pluralize_ru(H.gender, "ет", "ют")] боль!")) H.apply_damage(60, BRAIN) else - visible_message(span_warning("[H] looks to be stunned by the energy!")) + visible_message(span_warning("Похоже, что [H] ошеломлен[genderize_ru(H.gender, "", "а", "о", "ы")] энергией!")) H.Weaken(40 SECONDS) return for(var/obj/item/implant/mindshield/L in H) @@ -379,11 +388,11 @@ for(var/obj/item/implant/traitor/T in H) if(T && T.implanted) qdel(T) - visible_message(span_warning("[H] gets an eerie red glow in their eyes!")) + visible_message(span_warning("У [H] появля[pluralize_ru(H.gender, "ет", "ют")]ся жуткое красное свечение в глазах!")) var/datum/objective/protect/protect_objective = new protect_objective.owner = H.mind protect_objective.target = M.mind - protect_objective.explanation_text = "Protect [M.real_name]." + protect_objective.explanation_text = "Защитите [M.real_name]." H.mind.objectives += protect_objective add_attack_logs(M, H, "Vampire-sired") H.mind.make_vampire() diff --git a/icons/misc/vampire_tgui.dmi b/icons/misc/vampire_tgui.dmi new file mode 100644 index 00000000000..0222b6d4cbe Binary files /dev/null and b/icons/misc/vampire_tgui.dmi differ diff --git a/tgui/packages/tgui/interfaces/VampireSpecMenu.js b/tgui/packages/tgui/interfaces/VampireSpecMenu.js index f42d0cf32bd..48b347a6524 100644 --- a/tgui/packages/tgui/interfaces/VampireSpecMenu.js +++ b/tgui/packages/tgui/interfaces/VampireSpecMenu.js @@ -1,285 +1,490 @@ -import { useBackend } from '../backend'; -import { Button, Section, Stack, Divider } from '../components'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Flex, Section, Divider, Tabs, Box } from '../components'; import { Window } from '../layouts'; export const VampireSpecMenu = (props, context) => { + const { act } = useBackend(context); + const [activeTab, setActiveTab] = useLocalState( + context, + 'activeTab', + 'hemomancer' + ); + + const renderMenu = () => { + switch (activeTab) { + case 'hemomancer': + return ; + case 'umbrae': + return ; + case 'gargantua': + return ; + case 'dantalion': + return ; + case 'bestia': + return ; + default: + return null; + } + }; + return ( - - - - - - - - - - - - - + + + +