diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 21d4e613711..1a312d331fb 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -3,7 +3,15 @@ //Internal /obj/item/storage/backpack/shared name = "paradox bag" - desc = "Somehow, it's in two places at once." + desc = "Каким-то образом, эта сумка существует в двух местах одновременно." + ru_names = list( + NOMINATIVE = "парадоксальная сумка", + GENITIVE = "парадоксальной сумки", + DATIVE = "парадоксальной сумке", + ACCUSATIVE = "парадоксальную сумку", + INSTRUMENTAL = "парадоксальной сумкой", + PREPOSITIONAL = "парадоксальной сумке" + ) max_combined_w_class = 60 max_w_class = WEIGHT_CLASS_NORMAL cant_hold = list(/obj/item/storage/backpack/shared) @@ -13,7 +21,7 @@ // basically we cannot put one bag in the storage if another one is already there if(istype(I) && I.bag && I.bag == src && I.twin_storage && I.twin_storage.loc == src) if(!stop_messages) - to_chat(usr, span_warning("Yo dawg, and how are you going to do it?")) + balloon_alert(usr, "невозможно!") return FALSE return ..() @@ -21,7 +29,15 @@ //External /obj/item/shared_storage name = "paradox bag" - desc = "Somehow, it's in two places at once." + desc = "Каким-то образом, эта сумка существует в двух местах одновременно." + ru_names = list( + NOMINATIVE = "парадоксальная сумка", + GENITIVE = "парадоксальной сумки", + DATIVE = "парадоксальной сумке", + ACCUSATIVE = "парадоксальную сумку", + INSTRUMENTAL = "парадоксальной сумкой", + PREPOSITIONAL = "парадоксальной сумке" + ) icon = 'icons/obj/storage.dmi' icon_state = "cultpack" slot_flags = ITEM_SLOT_BACK @@ -111,7 +127,15 @@ /obj/item/book_of_babel name = "Book of Babel" - desc = "An ancient tome written in countless tongues." + desc = "Древнейший фолиант, написанный в бесчисленном множестве языков." + ru_names = list( + NOMINATIVE = "книга Вавилона", + GENITIVE = "книги Вавилона", + DATIVE = "книге Вавилона", + ACCUSATIVE = "книгу Вавилона", + INSTRUMENTAL = "книгой Вавилона", + PREPOSITIONAL = "книге Вавилона" + ) icon = 'icons/obj/library.dmi' icon_state = "book1" w_class = 2 @@ -119,11 +143,14 @@ /obj/item/book_of_babel/attack_self(mob/living/carbon/user) if(HAS_TRAIT(user, TRAIT_NO_BABEL)) - user.visible_message(span_notice("[user] suddenly stops, releasing [src].")) - to_chat(user, span_warning("You don't know what a book is or what to do with it.")) + user.visible_message( + span_notice("[user] внезапно останавлива[pluralize_ru(user, "ет", "ют")]ся, недоумённо глядя на [declent_ru(GENITIVE)]."), + span_warning("Вы понятия не имеете, что это такое и что с этим делать.") + ) + return - to_chat(user, "You flip through the pages of the book, quickly and conveniently learning every language in existence. Somewhat less conveniently, the aging book crumbles to dust in the process. Whoops.") + to_chat(user, "Вы упоённо пролистываете страницы книги, вбирая в себя знания всех существующих языков во Вселенной. К сожалению, [declent_ru(NOMINATIVE)] не выдерживает такого напора и рассыпается в прах. Ой...") user.grant_all_babel_languages() new /obj/effect/decal/cleanable/ash(get_turf(user)) user.temporarily_remove_item_from_inventory(src) @@ -138,7 +165,15 @@ /obj/item/reagent_containers/glass/bottle/potion/flight name = "strange elixir" - desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'." + desc = "Флакон с едва ли не святой аурой, исходящей от него. Вы пытаетесь прочитать надпись на бутылке, но текст неразборчив." + ru_names = list( + NOMINATIVE = "странный эликсир", + GENITIVE = "странного эликсира", + DATIVE = "странному эликсиру", + ACCUSATIVE = "странный эликсир", + INSTRUMENTAL = "странным эликсиром", + PREPOSITIONAL = "странном эликсире" + ) list_reagents = list("flightpotion" = 5) /obj/item/reagent_containers/glass/bottle/potion/update_icon_state() @@ -150,20 +185,20 @@ /datum/reagent/flightpotion name = "Flight Potion" id = "flightpotion" - description = "Strange mutagenic compound of unknown origins." + description = "Странный мутагенный состав неизвестного происхождения." reagent_state = LIQUID color = "#FFEBEB" /datum/reagent/flightpotion/reaction_mob(mob/living/M, method = REAGENT_TOUCH, reac_volume, show_message = 1) - to_chat(M, "This item is currently non-functional.") + to_chat(M, span_warning("Данный предмет нефункционален на текущий момент.")) /*if(ishuman(M) && M.stat != DEAD) var/mob/living/carbon/human/H = M if(!ishumanbasic(H) || reac_volume < 5) // implying xenohumans are holy if(method == INGEST && show_message) - to_chat(H, "You feel nothing but a terrible aftertaste.") + to_chat(H, span_notice("Кроме отвратительного послевкусия у вас во рту, вы ничего не почувствовали.")) return ..() - to_chat(H, "A terrible pain travels down your back as wings burst out!") + to_chat(H, span_danger("Невыносимая боль проходит через вашу спину, как вдруг оттуда вырываются крылья!")) H.set_species(/datum/species/angel) playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) H.adjustBruteLoss(20) @@ -172,7 +207,15 @@ /obj/item/jacobs_ladder name = "jacob's ladder" - desc = "A celestial ladder that violates the laws of physics." + desc = "Небесная лестница, нарушающая законы физики." + ru_names = list( + NOMINATIVE = "лестница Иакова", + GENITIVE = "лестницы Иакова", + DATIVE = "лестнице Иакова", + ACCUSATIVE = "лестницу Иакова", + INSTRUMENTAL = "лестницей Иакова", + PREPOSITIONAL = "лестнице Иакова" + ) icon = 'icons/obj/structures.dmi' icon_state = "ladder" @@ -180,7 +223,7 @@ var/turf/T = get_turf(src) var/ladder_x = T.x var/ladder_y = T.y - to_chat(user, "You unfold the ladder. It extends much farther than you were expecting.") + to_chat(user, span_notice("Вы разворачиваете лестницу. Она уходит значительно дальше, чем вы ожидали.")) var/last_ladder = null for(var/i in 1 to world.maxz) if(is_admin_level(i) || is_away_level(i) || is_taipan(i)) @@ -195,12 +238,27 @@ // Inherit from unbreakable but don't set ID, to suppress the default Z linkage /obj/structure/ladder/unbreakable/jacob name = "jacob's ladder" - desc = "An indestructible celestial ladder that violates the laws of physics." - + desc = "Нерушимая небесная лестница, нарушающая законы физики." + ru_names = list( + NOMINATIVE = "лестница Иакова", + GENITIVE = "лестницы Иакова", + DATIVE = "лестнице Иакова", + ACCUSATIVE = "лестницу Иакова", + INSTRUMENTAL = "лестницей Иакова", + PREPOSITIONAL = "лестнице Иакова" + ) //Wisp Lantern /obj/item/wisp_lantern name = "spooky lantern" - desc = "This lantern gives off no light, but is home to a friendly wisp." + desc = "Эта лампа не источает света, но является пристанищем для дружелюбного духа." + ru_names = list( + NOMINATIVE = "жуткая лампа", + GENITIVE = "жуткой лампы", + DATIVE = "жуткой лампе", + ACCUSATIVE = "жуткую лампу", + INSTRUMENTAL = "жуткой лампой", + PREPOSITIONAL = "жуткой лампе" + ) icon = 'icons/obj/lighting.dmi' icon_state = "lantern-blue" item_state = "lantern" @@ -222,33 +280,31 @@ /obj/item/wisp_lantern/attack_self(mob/user) if(!wisp) - to_chat(user, "The wisp has gone missing!") + balloon_alert(user, "дух исчезает") update_icon(UPDATE_ICON_STATE) return if(wisp.loc == src) RegisterSignal(user, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(update_user_sight)) - to_chat(user, "You release the wisp. It begins to bob around your head.") + balloon_alert(user, "дух выпущен") wisp.forceMove(user) update_icon(UPDATE_ICON_STATE) INVOKE_ASYNC(wisp, TYPE_PROC_REF(/atom/movable, orbit), user, 20) set_light_on(FALSE) user.update_sight() - to_chat(user, "The wisp enhances your vision.") SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Freed") // freed else UnregisterSignal(user, COMSIG_MOB_UPDATE_SIGHT) - to_chat(user, "You return the wisp to the lantern.") + balloon_alert("дух возвращён") wisp.stop_orbit() wisp.forceMove(src) set_light_on(TRUE) user.update_sight() - to_chat(user, "Your vision returns to normal.") update_icon(UPDATE_ICON_STATE) SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned") // returned @@ -263,7 +319,7 @@ if(wisp.loc == src) qdel(wisp) else - wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") + wisp.visible_message(span_notice("Дух огорчённо вздыхает, а затем улетает восвояси.")) return ..() /obj/item/wisp_lantern/proc/update_user_sight(mob/user) @@ -273,7 +329,15 @@ /obj/effect/wisp name = "friendly wisp" - desc = "Happy to light your way." + desc = "Счастливо освещает вам путь." + ru_names = list( + NOMINATIVE = "дружелюбный дух", + GENITIVE = "дружелюбного духа", + DATIVE = "дружелюбному духу", + ACCUSATIVE = "дружелюбного духа", + INSTRUMENTAL = "дружелюбным духом", + PREPOSITIONAL = "дружелюбном духе" + ) icon = 'icons/obj/lighting.dmi' icon_state = "orb" light_range = 7 @@ -282,7 +346,15 @@ //Red/Blue Cubes /obj/item/warp_cube name = "blue cube" - desc = "A mysterious blue cube." + desc = "Мистический синий куб." + ru_names = list( + NOMINATIVE = "синий куб", + GENITIVE = "синего куба", + DATIVE = "синему кубу", + ACCUSATIVE = "синий куб", + INSTRUMENTAL = "синим кубом", + PREPOSITIONAL = "синем кубе" + ) icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "blue_cube" var/obj/item/warp_cube/linked @@ -295,11 +367,11 @@ /obj/item/warp_cube/attack_self(mob/user) if(!linked) - to_chat(user, "[src] fizzles uselessly.") + balloon_alert(user, "куб искрится и шипит") return if(is_in_teleport_proof_area(user) || is_in_teleport_proof_area(linked)) - to_chat(user, "[src] sparks and fizzles.") + balloon_alert(user, "куб искрится и шипит.") return if(do_after(user, 1.5 SECONDS, user)) var/datum/effect_system/smoke_spread/smoke = new @@ -313,12 +385,20 @@ smoke2.set_up(1, 0, user.loc) smoke2.start() else - to_chat(user, "You need to hold still to use [src].") + balloon_alert(user, "прервано из-за движения") /obj/item/warp_cube/red name = "red cube" - desc = "A mysterious red cube." + desc = "Мистический красный куб." + ru_names = list( + NOMINATIVE = "красный куб", + GENITIVE = "красного куба", + DATIVE = "красному кубу", + ACCUSATIVE = "красный куб", + INSTRUMENTAL = "красным кубом", + PREPOSITIONAL = "красном кубе" + ) icon_state = "red_cube" /obj/item/warp_cube/red/New() @@ -332,7 +412,15 @@ /obj/item/gun/magic/hook name = "meat hook" - desc = "Mid or feed." + desc = "Ты погляди, свежее мясо!" + ru_names = list( + NOMINATIVE = "мясной крюк", + GENITIVE = "мясного крюка", + DATIVE = "мясному крюку", + ACCUSATIVE = "мясной крюк", + INSTRUMENTAL = "мясным крюком", + PREPOSITIONAL = "мясном крюке" + ) ammo_type = /obj/item/ammo_casing/magic/hook icon_state = "hook" item_state = "chain" @@ -343,7 +431,15 @@ /obj/item/ammo_casing/magic/hook name = "hook" - desc = "a hook." + desc = "Это крюк." + ru_names = list( + NOMINATIVE = "крюк", + GENITIVE = "крюка", + DATIVE = "крюку", + ACCUSATIVE = "крюк", + INSTRUMENTAL = "крюком", + PREPOSITIONAL = "крюке" + ) projectile_type = /obj/item/projectile/hook caliber = "hook" icon_state = "hook" @@ -372,7 +468,7 @@ var/turf/firer_turf = get_turf(firer) var/mob/living/L = target if(!L.anchored && L.loc) - L.visible_message("[L] is snagged by [firer]'s hook!") + L.visible_message(span_danger("[firer] зацепля[pluralize_ru(firer, "ет", "ют")] [L] [declent_ru(INSTRUMENTAL)]!")) ADD_TRAIT(L, TRAIT_UNDENSE, UNIQUE_TRAIT_SOURCE(src)) // Ensures the hook does not hit the target multiple times L.forceMove(firer_turf) REMOVE_TRAIT(L, TRAIT_UNDENSE, UNIQUE_TRAIT_SOURCE(src)) @@ -385,7 +481,15 @@ //Immortality Talisman /obj/item/immortality_talisman name = "Immortality Talisman" - desc = "A dread talisman that can render you completely invulnerable." + desc = "Таинственный талисман, способный даровать неуязвимость." + ru_names = list( + NOMINATIVE = "Талисман Бессмертия", + GENITIVE = "Талисмана Бессмертия", + DATIVE = "Талисману Бессмертия", + ACCUSATIVE = "Талисман Бессмертия", + INSTRUMENTAL = "Талисманом Бессмертия", + PREPOSITIONAL = "Талисмане Бессмертия" + ) icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "talisman" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF @@ -406,7 +510,7 @@ /obj/item/immortality_talisman/attack_self(mob/user) if(!COOLDOWN_FINISHED(src, last_used_immortality_talisman)) - to_chat(user, span_warning("[src] is still recharging.")) + balloon_alert(user, "ещё не готово!") return var/turf/source_turf = get_turf(src) @@ -415,11 +519,11 @@ COOLDOWN_START(src, last_used_immortality_talisman, 60 SECONDS) SSblackbox.record_feedback("amount", "immortality_talisman_uses", 1) - user.visible_message(span_danger("[user] vanishes from reality, leaving a a hole in [user.p_their()] place!")) + user.visible_message(span_danger("[user] исчеза[pluralize_ru(user, "ет", "ют")] из реальности, оставляя после себя дыру в пространстве!")) var/obj/effect/immortality_talisman/effect = new(source_turf) effect.name = "hole in reality" - effect.desc = "It's shaped an awful lot like [user.name]." + effect.desc = "Подозрительно походит на силуэт [user.name]." effect.setDir(user.dir) user.forceMove(effect) user.add_traits(list(TRAIT_NO_TRANSFORM, TRAIT_GODMODE), UNIQUE_TRAIT_SOURCE(src)) @@ -438,7 +542,7 @@ user.remove_traits(list(TRAIT_NO_TRANSFORM, TRAIT_GODMODE), UNIQUE_TRAIT_SOURCE(src)) user.forceMove(effect_turf) - user.visible_message(span_danger("[user] pops back into reality!")) + user.visible_message(span_danger("[user] материализу[pluralize_ru(user.gender, "ет", "ют")]ся в пространстве, вновь возвращаясь в нашу реальность!")) effect.can_destroy = TRUE if(length(effect.contents))