Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge upstream 19.05.2024 #270

Merged
merged 160 commits into from
May 19, 2024
Merged

Merge upstream 19.05.2024 #270

merged 160 commits into from
May 19, 2024

Conversation

Gaxeer
Copy link
Collaborator

@Gaxeer Gaxeer commented May 19, 2024

About The Pull Request

Merge upstream

jlsnow301 and others added 30 commits May 11, 2024 16:03
## About The Pull Request
Converts more of common into typescript, with some tests
## Why It's Good For The Game
Typescript,,,,
…gstation#83179)

## About The Pull Request

This fix enables most of the clicks that have been disabled in the alt
click menu up to this point. However, I did have to cut out the pointing
thing it would do for right clicking. The only thing you aren't able to
do with the new alt-click menu at this point is dragging items onto each
other, pointing, and the shift-click context menu. Maybe we'll leave
that for another PR, because I think I'd have to rewrite core components
of TGUI for that?
## Why It's Good For The Game

Lets you perform almost all of the alternative and right click functions
on things you have alt-clicked the tiles for. I believe this outweighs
the benefits of pointing at stuff on a tile instead.
## Changelog

The alt-click item panel now lets you perform most of the alternative
click options.
:cl: Bisar
qol: Most of the alternate click modes (right click, control clicking,
shift clicking, etc) have been enabled in the alt-click item menu.
fix: You will no longer point at things you right-click in the alt-click
item menu.
/:cl:
## About The Pull Request

This adds an action figure for Bitrunners, and places one in the
Deltastation bitrunning den.


![image](https://github.com/tgstation/tgstation/assets/28870487/03b40d5c-1eeb-493e-8244-1456d120c848)

"I'm in..."
## Why It's Good For The Game

Every job has an action figure, and bitrunning should not be an
exception! Delta has figurines in each job site, and adding one there
lets the Bitrunners in on the fun.
## Changelog
:cl: Rhials
add: Bitrunners now have their own job figurine. Cool!
/:cl:
…gstation#83176)

## About The Pull Request
Blocks Rat Kings from using "Rat King's Domain" (the spell that spawns
dirt/vomit/oil and creates miasma) while ventcrawling.

Also blocks Rat Kings from summoning mice while in pipes; as far as I
can tell, this is just an oversight, as it previously created a mouse
stuck inside of the pipe without the normal chat message.
## Why It's Good For The Game
Rat Kings are supposed to build a lair of filth, a rat king visiting
every department in the distro pipes while spamming motor oil is boring,
lame, lacks any contextual sense that a rat inside a pipe could dirty
the floor above it, and doesn't really have any counterplay besides
begging atmos to up the temperature (which they realistically probably
will never do because it's a rat king not a xeno or a ling).

Ling spells are blocked while crawling so there's precedent for it.
## Changelog
:cl: PapaMichael
fix: Rat Kings can no longer trap mice inside of pipes by creating them
while ventcrawling.
balance: Rat Kings can no longer create grime and miasma while
ventcrawling.
/:cl:
…n#83170)

## About The Pull Request
Fix the movement of a pack of cigarettes under an spaceman when they
interacts with it with the right mouse button.
Also adds a new way to quickly insert cigarettes in the mouth, just
hitting a pack of cigarettes on yourself. Here how it works:


https://github.com/tgstation/tgstation/assets/126676387/9f1442b0-173b-4f2e-a95e-e42fd9269642
## Why It's Good For The Game
It fixes the bug and adds a new quick and convenient way to put a
cigarette in your mouth. That's good, isn't it?
## Changelog
:cl:
qol: Now you can put a cigarette in your mouth just by hitting the pack
of cigarettes on yourself.
fix: The cigarette pack no longer moves under the spaceman when they
interacts with it with the RMB
/:cl:

---------

Co-authored-by: paganiy <[email protected]>
## About The Pull Request

Title
## Why It's Good For The Game

typos... BAD?????????
## Changelog
:cl:
spellcheck: Added a period to the end of the wendigo deathrattle
/:cl:
…garettes out of your mouth (tgstation#83101)

## About The Pull Request

- Cigarette particles are now particles rather than baked in 
- Taking a cigarette out of your mouth release a big puff of smoke


https://github.com/tgstation/tgstation/assets/51863163/183b39e7-3367-43a1-b750-99e66838d60f

## Why It's Good For The Game

Looks better

## Changelog

:cl: Melbert
add: Cigarette smoke is now more smokey. 
add: Taking a cigarette out of your mouth will let out a big puff of
smoke.
/:cl:

---------

Co-authored-by: san7890 <[email protected]>
…n#83190)

This wasn't working for me because `OSMajor` was set to a string, not a
number, so it failed the if check.

Making this change made it work
## About The Pull Request
Alt click wouldnt draw the sabre bc of dual click actions
## Why It's Good For The Game
Fixes tgstation#83159
## Changelog
:cl:
fix: Alt click will draw the captain's sabre again
/:cl:
…tion#83144)

## About The Pull Request
Closes
tgstation#82965 (comment)

This is how it looks now:


https://github.com/tgstation/tgstation/assets/126676387/3934017c-b031-4bb0-8041-231739a6144c


## Why It's Good For The Game
It's not
## Changelog
:cl:
fix: Accelerator laser gun no longer shoots sun size projectiles.
/:cl:

---------

Co-authored-by: paganiy <[email protected]>
## About The Pull Request
Wrote better docs and tests for string helpers in tgui.



Something I noticed, which I'm ok with reverting, is that multiline does
precisely nothing. And despite being a template string fn, it doesn't
accept vars for interpolation. It looks as if it were used to circumvent
a babel limitation, which we are no longer using.

Removed:
- babel plugin (unused)
- multiline (no impact)
- createGlobPattern (unused)
- buildQueryString (unused)

<details>
<summary>Spot the difference</summary>

![Screenshot 2024-05-06
095420](https://github.com/tgstation/tgstation/assets/42397676/bbf2f58e-81b7-4023-8da4-8d7f19cd3bb1)

![Screenshot 2024-05-06
095443](https://github.com/tgstation/tgstation/assets/42397676/24f303ba-f352-4132-a2a6-873dff0d979b)

(There is none)

</details>

## Why It's Good For The Game
More core tools in TS.
Better docs so hopefully these functions are more widely used (and done
so properly)
Tests so things don't break
## About The Pull Request

Once you gain a level in Athletics you will gain the ability to evaluate
the relative muscularity (in terms of unarmed combat) of your fellow
crewmates by examining them.
Various factors influence this; 
- The damage dealt by your limbs.
- Your experience in the fitness skill.
- Various quirks, genetic mutations, and brain traumas.

In order to make this not an antagonist check, Changelings will now also
be able to copy your athletics skill level when they steal your DNA.
This is... admittedly a little weird, but this is a consequence of using
"skills" to represent a physical attribute I guess.

## Why It's Good For The Game

During the social experiment we sometimes call "April Fools Day" it
became apparent to me that our playerbase liked to watch a number go up,
a quality marked especially in those players who liked to have their
characters hang out in the gym.
Many of them made their characters repeatedly hang out in the gym and
work out even though doing this had no effect at all on the number they
were supposedly increasing.
I would like to give this joy back to them.
<sub><sup>Additionally I have heard that the ability to retain players
by stimulating their desire to see numbers increase is good for our
annual retention metrics.</sub></sup>

Ultimately this is a very silly feature but I think that there often
_can be_ a comparative aspect to bodybuilding and letting players be
competitive in terms of looking at each other's completely meaningless
numbers gives them something to base a story around.

Also I mostly only make silly features.

## Changelog

:cl:
add: People who spend time improving their bodies are able to evaluate
the relative physical strength of those they examine as a kind of "power
level".
add: Changeling transformation copies the target's athletics skill
level.
/:cl:
Oversight on my part. I stuck c4 on a lizards brain and it didnt kill
them.

The deletion chain is somewhat awkward for humans. When deleting a
human, it deletes the organs but also removes them, which causes all
kinds of wacky effects on a deleting mob which is not great.

This is more akin to a band aid, but I need to take some time and focus
to sort through all the removal procs and make them qdel friendly

:cl:
fix: Deleting someones brain kills them again
/:cl:
these lists only contains text, not anything qdeletable. 
```
[18:10:26] Runtime in code/controllers/subsystem/garbage.dm, line 349: bad del
proc name: qdel (/proc/qdel)
src: null
call stack:
qdel(null, 0)
the tram controller (/obj/machinery/transport/tram_controller): clear repair signals()
/datum/transport_controller/li... (/datum/transport_controller/linear/tram): end malf event()
/datum/round_event/tram_malfun... (/datum/round_event/tram_malfunction): end()
/datum/round_event/tram_malfun... (/datum/round_event/tram_malfunction): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```
## About The Pull Request
Gives health sensors a UI to change their settings

![sensor-off](https://github.com/tgstation/tgstation/assets/139372157/06eb1756-23ff-4d8a-b305-e847430f6982)

![sensor-on](https://github.com/tgstation/tgstation/assets/139372157/466f21d2-8369-4e04-9197-d606063aa715)

![checking-for-death](https://github.com/tgstation/tgstation/assets/139372157/25d7bc84-246b-4997-9684-e899a6700b5b)


## Why It's Good For The Game

Makes the assemblies less annoying to use

## Changelog
:cl:

qol: Gives Health sensor assemblies a UI so its easier to use.

/:cl:
…83171)

## About The Pull Request
Replaces the two 'arcade cabinet which shouldn't exist' with arcade
machine spawners.
## Why It's Good For The Game
The arcade cabinet which shouldn't exist shouldn't exist, hence the
name. It's the base type for the real arcade machines. The spawner
should be used instead.
## Changelog
:cl:
fix: The random arcade machines in the 'Interdyne Spinward Research
Base's now function.
/:cl:
ShizCalev and others added 27 commits May 16, 2024 23:40
…eInvisibility() (tgstation#83253)

```
[2024-05-15 18:24:21.291] RUNTIME: runtime error: cannot read from list
 - proc name: RemoveInvisibility (/atom/proc/RemoveInvisibility)
 -   source file: code/game/atom/atom_invisibility.dm,66
 -   usr: null
 -   src: the turret (/obj/machinery/porta_turret/ai)
 -   src.loc: the floor (187,33,3) (/turf/open/floor/circuit)
 -   call stack:
 - the turret (/obj/machinery/porta_turret/ai): RemoveInvisibility(/obj/machinery/porta_turret_co... (/obj/machinery/porta_turret_cover))
 - the turret (/obj/machinery/porta_turret_cover): Destroy(0)
 - qdel(the turret (/obj/machinery/porta_turret_cover), 0)
 - the turret (/obj/machinery/porta_turret/ai): atom break("melee")
 - the turret (/obj/machinery/porta_turret/ai): take damage(20, "brute", "melee", 1, 4, 0)
 - the turret (/obj/machinery/porta_turret/ai): take damage(40, "brute", "melee", 1, 4, 0)
 - the turret (/obj/machinery/porta_turret/ai): attack generic(the turret (/mob/living/simple_animal/hostile/mimic/copy/machine), 40, "brute", "melee", 1, 0)
 - the turret (/obj/machinery/porta_turret/ai): attack animal(the turret (/mob/living/simple_animal/hostile/mimic/copy/machine), null)
 - the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): AttackingTarget(the turret (/obj/machinery/porta_turret/ai))
 - the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): AttackingTarget(the turret (/obj/machinery/porta_turret/ai))
 - the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): MeleeAction(1)
 - the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): MoveToTarget(/list (/list))
 - the turret (/mob/living/simple_animal/hostile/mimic/copy/machine): handle automated action()
 - NPC Pool (/datum/controller/subsystem/npcpool): fire(0)
 - NPC Pool (/datum/controller/subsystem/npcpool): ignite(0)
 - Master (/datum/controller/master): RunQueue()
 - Master (/datum/controller/master): Loop(2)
 - Master (/datum/controller/master): StartProcessing(0)
 - 

```
…3259)

## About The Pull Request
Fixes a bunch of hearts so they no longer turn into errors when you take
a bite out of them... for whatever reason.
Fixes tgstation#83147 

## Why It's Good For The Game
Immersion: ruined

## Changelog
:cl:
fix: Fixes a bunch of hearts turning into errors when you try to eat
them
/:cl:
…tgstation#83233)

## About The Pull Request
This adds 1 extra pump, better stock parts for the temp units, and 2
canisters of co2 and nitrogen

## Why It's Good For The Game
For nukies buying ordnance keycard is semi rare, this adds extra gasses
to let them show their atmos knowledge more by allowing them to create
better bombs(as thats kinda the point of the whole keycard since its
also a timesink to create said bombs)

## Changelog
:cl:
balance: Nukies ordnance now include more gasses and stock parts
/:cl:
## About The Pull Request
Renames the ruin to include the required prefix "Lava-Ruin". Removes the
now unnecessary suffix.
## Why It's Good For The Game
## Changelog
The names have this prefix system for easier string-searching. If they
don't have the prefixes, they're harder to find and sort.
:cl:
fix: adds missing prefix to name of The Lizard's Gas Lava land ruin.
/:cl:
…overs (tgstation#83252)

Properly fixes tgstation#7617

🆑 ShizCalev
fix: Malf AI can now override/overload closed turrets.
fix: Fixed a scenario in which a turret would have its covers closed
while still firing.
/🆑

cleaned up a dumb proc that was added at the machinery level for
literally only turret covers, and added support for fixing turrets in
the future (through atom_fix(), which is essentially unused at this
time.)
## About The Pull Request
Made more common tgui bits in typescript with tests. Not much else to
see here
## Why It's Good For The Game
Typescript conversion + More documentation + type safety

You now get full docs and type info as nature intended:

![image](https://github.com/tgstation/tgstation/assets/42397676/17a7aad6-56d3-4e22-89fa-585cda4c5315)

---------

Co-authored-by: Style Mistake <[email protected]>
…ries (tgstation#83228)

## About The Pull Request
Replaces the Ansem, SC/FISHER, and suppressor in the Sam Fisher gimmick
bundle with the Ansem/SC, a variant of the Ansem that:
- has an integral suppressor (read: acts like it's always suppressed,
because it is)
- an underbarrel light disruptor (functionally identical to the
SC/FISHER, fired with RMB)
(note: firing the disruptor in combat mode causes the main gun to fire
as if it were being fired akimbo. which it shouldn't, but I'm not sure
how to make it not do that)
- is longer, visually, but not storage-wise, and also visibly has an
underbarrel light disruptor

![image](https://github.com/tgstation/tgstation/assets/31829017/0842d9b9-9b24-4833-aeae-631c3bf1a5d5)

Also added code support for integrally suppressed ballistic guns (with
no separate suppressor overlay), handled by the can_unsuppress variable.

Also fixes the SC/FISHER disrupting APCs for ten times longer than they
probably should have been disrupted.
## Why It's Good For The Game
In regards to the Ansem, SC/FISHER, suppressor:
The Sam Fisher gimmick bundle having the Ansem and SC/FISHER as separate
items always kinda bugged me, since it seemed too clunky for a
sneaky-beaky operator-type to have to juggle two guns (one which you had
to bump to normal-size, leaving it unable to fit in the belt) to break
lights and then shoot dudes in the back of the head. So now it's one
gun, like the M-90gl and its grenade launcher. I think the bundle's rare
enough that it's fine to give them this much.

In regards to the APC thing:
Shooting an APC with a gimmick gun and leaving it unpowered for two
minutes seemed unintentional.

In regards to the code support for integrally suppressed guns:
Maybe someone else will want to put in another integrally suppressed
gun? It was relevant for this use-case.
## Changelog

:cl:
qol: The Ansem, suppressor, and SC/FISHER included in the Fisher gimmick
bundle now come together as one whole gun, the Ansem/SC. It's integrally
suppressed, and fires the disruptor on right-click.
fix: The SC/FISHER disrupts APCs for an appropriate amount of time, not
ten times the intended disruption length.
/:cl:

---------

Co-authored-by: Hatterhat <[email protected]>
Co-authored-by: Zephyr <[email protected]>
Co-authored-by: Ghom <[email protected]>
## About The Pull Request
adds more machines to the malf AI overload ability blacklist: shuttle
consoles and gateway console
closes tgstation#83223
## Why It's Good For The Game
bug fix
## Changelog
:cl:
fix: fixed malf AI being able to overload shuttle consoles and the
gateway control console
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Ctrl clicking your jumpsuit will max its suit sensors



https://github.com/tgstation/tgstation/assets/96586172/3b7275ee-404a-49d1-b378-63de794d22ee


<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Nice little change that makes maxing your sensors easier
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

:cl: grungussuss
qol: suit sensors can now be maxed by ctrl clicking your jumpsuit
/:cl:

<!-- Both :cl:'s are required for the changelog to work! You can put
your name to the right of the first :cl: if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request

### Pictures below (You have to click them)

<Details>

<Summary> The prodigal bar returns to its home on the first floor,
re-combining the kitchen and the bar's atrium into one room off of the
main hallway. I didn't want to leave the Clown and Mime out, though, so
I added a mini stage by the bar's entrance, for stand-up.</Summary>


![image](https://github.com/tgstation/tgstation/assets/51863163/a9500c1f-0e58-40fe-9c65-332ef7877cba)

</Details>

<Details>

<Summary> The lower bar area is not entirely dead, however, Where it
once was now lies an expansion of Hydroponics, as well as a gambling
lounge and stage for the clown and mime. </Summary>


![image](https://github.com/tgstation/tgstation/assets/51863163/bd8ff0ed-12a2-4537-a9d1-93b59498ece1)

</Details>

<Details>

<Summary> The maintenance in and around the upper service area and dorms
have also expanded, adding a connection between serv maint and sec
maint. </Summary>


![image](https://github.com/tgstation/tgstation/assets/51863163/78a6b3fb-97cd-4e74-a957-6a163653f985)

</Details>

Other notes:

- Standardizes some decal styles in the main hallway
- Adds a single air alarm to the brig (I noticed it was missing one
while running mapping verbs)

## Why It's Good For The Game

I really, really like the design behind the Icebox bar, the "seedy
gambling bar underneath the station" is supreme vibes, but unfortunately
it really hampers visitation. Bars should really be front and center on
the station to people walking by can see what shenanigans are going on,
who is around, if the bartender is serving drinks, etc... which is
difficult when it's hidden under the kitchen.

This PR aims to bring it back to the front, and kinda bring back the
kitchen-bar connection, while not entirely abandoning the vibes of the
bar as-is.

## Changelog

:cl: Melbert
add: Icebox: The bar returns to its home. 
add: Icebox: Standardizes some decal styles in the main hallway.  
fix: Icebox: The lower brig's missing air alarm has been found. 
/:cl:
## About The Pull Request
Instead of iterating over an assoc list and doing a list access, which
has a complexity of O(nlog(n)), it is better to just store a 2 tuple and
access that to get a complexity of O(n)
Check code to see what I mean.

## Why It's Good For The Game

![image](https://github.com/tgstation/tgstation/assets/37270891/1e5d68fa-2e19-473c-a870-e1e0277cbacc)
This is a very hot proc and it's worth micro-optimizing where we can.

The speed increase in doing the following code can be seen here:

![image](https://github.com/tgstation/tgstation/assets/37270891/1b7f00a3-b3c2-4976-b2ab-97eefbbd2459)
Higher is better.

The code that was benchmarked:
```dm
var/list/target = list()

/proc/testa()
    var/list/queued_calls = list()
    for(var/i in 1 to length(target))
        var/data = target[i]
        queued_calls.Add(data, 1)
    for(var/i in 1 to (length(queued_calls) / 2))
        var/a = queued_calls[i*2-1]
        var/b = queued_calls[i*2]

/proc/testb()
    var/list/queued_calls = list()
    for(var/data in target)
        queued_calls[data] = 1
    for(var/data in queued_calls)
        var/a = data
        var/b = queued_calls[data]

MAIN
	for(var/i in 1 to 100)
		target.Add("[i]")
    BEGIN_BENCH(2)
        BENCH_PHASE("New code", testa())
        BENCH_PHASE("Old code", testb())
    END_BENCH
```

## Changelog

---------

Co-authored-by: Watermelon914 <[email protected]>
Co-authored-by: LemonInTheDark <[email protected]>
…ion#83266)

## About The Pull Request

At some point we added a new parameter to spawners which randomised the
number of mobs they could spawn up to a maximum.
For some reason the default value here was set to "2", meaning that
every mob spawner in the game would be spawning an average of 1.5 mobs
per update instead of 1.
As the place it was _intended_ for (mining vents) already provides a
value in the constructor, I just set the default back to 1.

Additionally, this randomised value did not actually obey the "maximum
mobs" parameter of the component and could spawn mobs above what was
supposed to be the cap of mobs created by the spawner.

This PR fixes those things.

## Changelog

:cl:
fix: Mob spawners (such as lavaland tendrils) won't spawn more mobs than
they are supposed to, faster than they should.
/:cl:
## About The Pull Request

Changes the sprites on the action button for furious steel, and orbiting
knives for Blade Heretic in general.

## Why It's Good For The Game

![Blade Heretic
Resprite](https://github.com/tgstation/tgstation/assets/102721711/22c4cf37-8bd0-494e-804e-34bea909594f)


Kitchen utensils are kind of a lame fit for an eldritch acolyte, now
they look like proper throwing knives.

## Changelog

:cl:
Image: Blade Heretic Knives have been resprited into proper throwing
knives.
/:cl:
## About The Pull Request
Does what it says on the tin, slices out a bunch of unused antag huds.
## Why It's Good For The Game
Its getting pretty annoying to work within that file when half the icons
arent used, so this just removes them. The file is less cluttered now.
## Changelog
Shouldn't be player facing
## About The Pull Request

Closes tgstation#83271

i didnt know this item existed in the game but seems it got mapped in by
mistake and can teleport u around
Copy link

This pr causes following conflicts on translate branch:

  • code/modules/antagonists/heretic/heretic_knowledge.dm
++<<<<<<< HEAD
 +		for(var/obj/item/melee/sickly_blade/is_blade_ritual as anything in result_atoms)
 +			valid_blades = blades_limit_check(user)
 +			break
 +		if(valid_blades)
 +			return TRUE
 +		else
 +			loc.balloon_alert(user, "ritual failed, at limit!")
 +			return FALSE
++=======
+ 		loc.balloon_alert(user, "ритуал провален, уже лимит!")
+ 		return FALSE
++>>>>>>> origin/translate

  • code/modules/antagonists/heretic/knowledge/rust_lore.dm
++<<<<<<< HEAD
 +	desc = "Your Mansus Grasp will deal 500 damage to non-living matter and rust any surface it touches. \
 +		Already rusted surfaces are destroyed. Surfaces and structures can only be rusted by using Right-Click. \
 +		Allows you to rust basic iron walls and floors."
 +	gain_text = "On the ceiling of the Mansus, rust grows as moss does on a stone."
++=======
+ 	desc = "Ваша Хватка Мансуса наносит 500 единиц урона неживой материи и ржавеет любая поверхность, которой она коснется. \
+ 		Уже заржавевшие поверхности разрушаются. Поверхности и структуры можно заставить ржаветь с помощью ПКМ."
+ 	gain_text = "На потолке Мансуса ржавчина растет, как мох на камне."
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "Your Mansus Grasp now applies the Mark of Rust. The mark is triggered from an attack with your Rusty Blade. \
 +		When triggered, your victim will suffer heavy disgust and confusion. \
 +		Allows you to rust reinforced walls and floors as well as plasteel."
 +	gain_text = "The Blacksmith looks away. To a place lost long ago. \"Rusted Hills help those in dire need... at a cost.\""
++=======
+ 	desc = "Ваша Хватка Мансуса теперь накладывает Метку ржавчины. Метка срабатывает при атаке вашим Ржавым клинком. \
+ 		При срабатывании органы и оборудование жертвы с вероятностью 75% получат повреждения и могут быть уничтожены."
+ 	gain_text = "Кузнец смотрит вдаль. В давно потерянное место. \"Ржавые Холмы помогают остро нуждающимся... за определенную плату.\""
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "Grants you Aggressive Spread, a spell that spreads rust to nearby surfaces. \
 +		Already rusted surfaces are destroyed \ Also improves the rusting abilities of non rust-heretics."
 +	gain_text = "All wise men know well not to visit the Rusted Hills... Yet the Blacksmith's tale was inspiring."
++=======
+ 	desc = "Дает вам заклинание Aggressive Spread, которое распространяет ржавчину на близлежащие поверхности. \
+ 		Уже заржавевшие поверхности разрушаются."
+ 	gain_text = "Все разумные люди хорошо знают, что не стоит посещать Ржавые Холмы... Но рассказ Кузнеца был вдохновляющим."
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "Your Rusty Blade now disgusts enemies on attack \ Allows you to rust Titanium and Plastitanium.."
 +	gain_text = "The Blacksmith hands you their blade. \"The Blade will guide you through the flesh, should you let it.\" \
 +		The heavy rust weights it down. You stare deeply into it. The Rusted Hills call for you, now."
++=======
+ 	desc = "Ваш Ржавый клинок теперь отравляет врагов при атаке."
+ 	gain_text = "Кузнец протягивает вам свой клинок. \"Клинок проведет тебя через плоть, если ты позволишь ему.\" \
+ 		Тяжелая ржавчина утяжеляет клинок. Вы пристально вглядываетесь в него. Ржавые Холмы зовут тебя."
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "Grants you Entropic Plume, a spell that releases a vexing wave of Rust. \
 +		Blinds, poisons, and inflicts Amok on any heathen it hits, causing them to strike \
 +		at friend or foe wildly. Also rusts and destroys and surfaces it hits and improves the rusting abilities of non-rust heretics."
 +	gain_text = "The corrosion was unstoppable. The rust was unpleasable. \
 +		The Blacksmith was gone, and you hold their blade. Champions of hope, the Rustbringer is nigh!"
++=======
+ 	desc = "Дарует вам Entropic Plume, заклинание, выпускающее досаждающую волну ржавчины. \
+ 		Ослепляет, отравляет и накладывает Amok на всех попавших язычников, заставляя их дико нападать \
+ 		на друзей или врагов. Также ржавеет и разрушает поверхности, на которые попадает."
+ 	gain_text = "Коррозия была неостановима. Ржавчина была неприятной. \
+ 		Кузнец ушел, ты держишь его клинок. Чемпионы надежды, Повелитель ржавчины близок!"
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "The ascension ritual of the Path of Rust. \
 +		Bring 3 corpses to a transmutation rune on the bridge of the station to complete the ritual. \
 +		When completed, the ritual site will endlessly spread rust onto any surface, stopping for nothing. \
 +		Additionally, you will become extremely resilient on rust, healing at triple the rate \
 +		and becoming immune to many effects and dangers \ You will be able to rust almost anything upon ascending."
 +	gain_text = "Champion of rust. Corruptor of steel. Fear the dark, for the RUSTBRINGER has come! \
 +		The Blacksmith forges ahead! Rusted Hills, CALL MY NAME! WITNESS MY ASCENSION!"
++=======
+ 	desc = "Ритуал вознесения Пути ржавчины. \
+ 		Принесите 3 трупа к руне трансмутации на мостик станции, чтобы завершить ритуал. \
+ 		После завершения, ритуальное место будет бесконечно распространять ржавчину на любую поверхность, не останавливаясь ни перед чем. \
+ 		Кроме того, вы станете чрезвычайно стойкими на ржавчине, исцеляясь втрое быстрее \
+ 		и приобретая иммунитет ко многим эффектам и опасностям."
+ 	gain_text = "Чемпион ржавчины. Разлагатель стали. Бойся темноты, ибо пришел ПОВЕЛИТЕЛЬ РЖАВЧИНЫ! \
+ 		Работа Кузнеца продолжается! Ржавые Холмы, УСЛЫШЬТЕ МОЕ ИМЯ! УЗРИТЕ МОЕ ВОЗНЕСЕНИЕ!"
++>>>>>>> origin/translate

  • code/modules/antagonists/heretic/knowledge/side_rust_cosmos.dm
++<<<<<<< HEAD
 +	desc = "Allows you to transmute 10 iron sheets to fill the surrounding vicinity of the rune with rust."
 +	gain_text = "Reality begins to whisper to me. To give it its entropic end."
++=======
+ 	desc = "Позволяет трансмутировать 20 железа и 2 мусорных предмета, чтобы заполнить ржавчиной окружение вокруг руны."
+ 	gain_text = "Реальность начинает нашептывать мне, чтобы дать ей энтропийный конец."
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	desc = "Allows you to transmute a pool of vomit, some cable coil, and 5 sheets of iron into a Rust Walker. \
 +		Rust Walkers excel at spreading rust and are moderately strong in combat."
 +	gain_text = "I combined my knowledge of creation with my desire for corruption. The Marshal knew my name, and the Rusted Hills echoed out."
++=======
+ 	desc = "Позволяет трансмутировать лужу рвоты, книгу и голову в Ржавого ходока. \
+ 		Ржавые ходоки превосходно распространяют ржавчину и умеренно сильны в бою."
+ 	gain_text = "Я объединил свои знания о созидании с жаждой коррозии. Маршал знал мое имя, и Ржавые Холмы отозвались эхом."
++>>>>>>> origin/translate

  • code/modules/antagonists/heretic/magic/space_crawl.dm
++<<<<<<< HEAD
 +	RegisterSignal(jaunter, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost))
 +	RegisterSignal(jaunter, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change))
 +	our_turf.visible_message(span_warning("[jaunter] sinks into [our_turf]!"))
++=======
+ 	our_turf.visible_message(span_warning("[jaunter] погружается в [our_turf]!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +/datum/action/cooldown/spell/jaunt/space_crawl/proc/try_exit_jaunt(turf/our_turf, mob/living/jaunter, force = FALSE)
 +	if(!force && HAS_TRAIT_FROM(jaunter, TRAIT_NO_TRANSFORM, REF(src)))
 +		to_chat(jaunter, span_warning("You cannot exit yet!!"))
++=======
+ /datum/action/cooldown/spell/jaunt/space_crawl/proc/try_exit_jaunt(turf/our_turf, mob/living/jaunter)
+ 	if(HAS_TRAIT_FROM(jaunter, TRAIT_NO_TRANSFORM, REF(src)))
+ 		to_chat(jaunter, span_warning("Вы еще не можете выйти!!"))
++>>>>>>> origin/translate

  • code/modules/antagonists/malf_ai/malf_ai_modules.dm
++<<<<<<< HEAD
 +
 +	if(istype(clicked_machine, /obj/machinery/porta_turret_cover)) //clicking on a closed turret will attempt to override the turret itself instead of the animated/abstract cover.
 +		var/obj/machinery/porta_turret_cover/clicked_turret = clicked_machine
 +		clicked_machine = clicked_turret.parent_turret
 +
 +	if((clicked_machine.resistance_flags & INDESTRUCTIBLE) || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
 +		to_chat(caller, span_warning("That machine can't be overridden!"))
++=======
+ 	if(!clicked_machine.can_be_overridden() || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
+ 		to_chat(caller, span_warning("Эта машина не может быть перезаписана!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +
 +	if(istype(clicked_machine, /obj/machinery/porta_turret_cover)) //clicking on a closed turret will attempt to override the turret itself instead of the animated/abstract cover.
 +		var/obj/machinery/porta_turret_cover/clicked_turret = clicked_machine
 +		clicked_machine = clicked_turret.parent_turret
 +
 +	if((clicked_machine.resistance_flags & INDESTRUCTIBLE) || is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
 +		to_chat(caller, span_warning("You cannot overload that device!"))
++=======
+ 	if(is_type_in_typecache(clicked_machine, GLOB.blacklisted_malf_machines))
+ 		to_chat(caller, span_warning("Эта машина не может быть перегружена!"))
++>>>>>>> origin/translate

  • code/modules/surgery/amputation.dm
++<<<<<<< HEAD
 +		span_notice("You begin to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		span_notice("[user] begins to sever [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы начинаете отрезать [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает отрезать [parse_zone(target_zone)] у [target]!"),
+ 		span_notice("[user] начинает отрезать [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You sever [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] severs [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		span_notice("[user] severs [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +	)
 +	display_pain(target, "You can no longer feel your severed [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 		span_notice("Вы отрезали [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] отрезал [parse_zone(target_zone)] у [target]!"),
+ 		span_notice("[user] отрезал [parse_zone(target_zone)] у [target]!"),
+ 	)
+ 	display_pain(target, "Вы больше не чувствуете вашу [parse_zone(target_zone)]!")
++>>>>>>> origin/translate

  • code/modules/surgery/bone_mending.dm
++<<<<<<< HEAD
 +			span_notice("You begin to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +			span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "Your [target.parse_zone_with_bodypart(user.zone_selected)] aches with pain!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы приступаете к устранению перелома в [parse_zone(user.zone_selected)] у [target]..."),
+ 			span_notice("[user] приступает к устранению перелома в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] приступает к устранению перелома в [parse_zone(user.zone_selected)] у [target]."),
+ 		)
+ 		display_pain(target, "Ваш [parse_zone(user.zone_selected)] испытывает сильную боль!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully repair the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 			span_notice("Вы успешно устранили перелом в [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] успешно устранил перелом в [parse_zone(target_zone)] у [target] при помощи [tool]!"),
+ 			span_notice("[user] успешно устранил перелом в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +			span_notice("[user] begins to reset the bone in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "The aching pain in your [target.parse_zone_with_bodypart(user.zone_selected)] is overwhelming!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы начинаете восстанавливать кость в [parse_zone(user.zone_selected)] у [target]..."),
+ 			span_notice("[user] начинает восстанавливать кость в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] начинает восстанавливать кость в [parse_zone(user.zone_selected)] у [target]."),
+ 		)
+ 		display_pain(target, "Острая боль в [parse_zone(user.zone_selected)] просто невыносима!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully reset the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] successfully resets the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully resets the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 			span_notice("Вы успешно восстановили кость в [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] успешно восстановил кость в [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 			span_notice("[user] успешно восстановил кость в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +			span_notice("[user] begins to repair the fracture in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "The aching pain in your [target.parse_zone_with_bodypart(user.zone_selected)] is overwhelming!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы приступаете к устранению перелома в [parse_zone(user.zone_selected)] у [target]..."),
+ 			span_notice("[user] приступает к устранению перелома в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] приступает к устранению перелома в [parse_zone(user.zone_selected)] у [target]."),
+ 		)
+ 		display_pain(target, "Острая боль в [parse_zone(user.zone_selected)] просто невыносима!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully repair the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully repairs the fracture in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 			span_notice("Вы успешно устранили перелом в [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] успешно устранил перелом в [parse_zone(target_zone)] у [target] при помощи [tool]!"),
+ 			span_notice("[user] успешно устранил перелом в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to discard the smaller skull debris in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to discard the smaller skull debris in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to poke around in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
++=======
+ 		span_notice("Вы начинаете избавляться от мелких обломков черепа в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает избавляться от мелких обломков черепа в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает копошиться в [parse_zone(target_zone)] у [target]..."),
++>>>>>>> origin/translate

  • code/modules/surgery/burn_dressing.dm
++<<<<<<< HEAD
 +			to_chat(user, span_notice("[target]'s [target.parse_zone_with_bodypart(user.zone_selected)] has no infected flesh to remove!"))
++=======
+ 			to_chat(user, span_notice("У [target] в [parse_zone(user.zone_selected)] нет зараженной плоти, которую нужно удалить!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +			span_notice("[user] begins to excise infected flesh from [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "The infection in your [target.parse_zone_with_bodypart(user.zone_selected)] stings like hell! It feels like you're being stabbed!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы начинаете удалять зараженную плоть из [parse_zone(user.zone_selected)] у [target]..."),
+ 			span_notice("[user] начинает удалять зараженную плоть из [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] начинает удалять зараженную плоть из [parse_zone(user.zone_selected)] у [target]."),
+ 		)
+ 		display_pain(target, "Инфекция в вашей [parse_zone(user.zone_selected)] адски зудит! Такое ощущение, что тебя режут ножом!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет [parse_zone(user.zone_selected)] у [target]."), span_notice("Вы ищете [parse_zone(user.zone_selected)] у [target]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully excise some of the infected flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)][progress_text]."),
 +			span_notice("[user] successfully excises some of the infected flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully excises some of the infected flesh from  [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 			span_notice("Вы успешно удалили часть зараженной плоти из [parse_zone(target_zone)] у [target][progress_text]."),
+ 			span_notice("[user] успешно удалил часть зараженной плоти из [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 			span_notice("[user] успешно удалил часть зараженной плоти из [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You carve away some of the healthy flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] carves away some of the healthy flesh from [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +		span_notice("[user] carves away some of the healthy flesh from  [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы срезаете часть здоровой плоти из [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] срезает часть здоровой плоти из [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 		span_notice("[user] срезает часть здоровой плоти из [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +			span_notice("[user] begins to dress the burns on [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "The burns on your [target.parse_zone_with_bodypart(user.zone_selected)] sting like hell!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы начинаете обрабатывать ожоги на [parse_zone(user.zone_selected)] у [target]..."),
+ 			span_notice("[user] начинает обрабатывать ожоги на [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] начинает обрабатывать ожоги на [parse_zone(user.zone_selected)] у [target]."),
+ 		)
+ 		display_pain(target, "Ожоги в [parse_zone(user.zone_selected)] адски зудят!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет у [target] [parse_zone(user.zone_selected)]."), span_notice("Вы ищете [parse_zone(user.zone_selected)] у [target] ..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully wrap [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."),
 +			span_notice("[user] successfully wraps [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully wraps [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 			span_notice("Вы успешно перевязываете [parse_zone(target_zone)] у [target] при помощи [tool.name]."),
+ 			span_notice("[user] успешно перевязывает [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 			span_notice("[user] успешно перевязывает [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate

  • code/modules/surgery/dental_implant.dm
++<<<<<<< HEAD
 +		span_notice("You begin to wedge [tool] in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to wedge \the [tool] in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to wedge something in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "Something's being jammed into your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 		span_notice("Вы начинаете вставлять [tool.name] в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает вставлять [tool.name] в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает вставлять что-то в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Что-то засовывают вам в [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You wedge [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] wedges \the [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		span_notice("[user] wedges something into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы вставили [tool.name] в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] вставил [tool.name] в [parse_zone(target_zone)] у [target]!"),
+ 		span_notice("[user] вставил что-то в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate

  • code/modules/surgery/limb_augmentation.dm
++<<<<<<< HEAD
 +		to_chat(user, span_warning("[tool] isn't the right type for [target.parse_zone_with_bodypart(target_zone)]."))
++=======
+ 		to_chat(user, span_warning("[tool] не подходит для [parse_zone(target_zone)]."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +			span_notice("[user] begins to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [aug]."),
 +			span_notice("[user] begins to augment [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +		)
 +		display_pain(target, "You feel a horrible pain in your [target.parse_zone_with_bodypart(user.zone_selected)]!")
 +	else
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 			span_notice("Вы начинаете аугментировать [parse_zone(user.zone_selected)] у [target] ..."),
+ 			span_notice("[user] начинает аугментировать [parse_zone(user.zone_selected)] у [target] with [aug]."),
+ 			span_notice("[user] начинает аугментировать [parse_zone(user.zone_selected)] у [target] ."),
+ 		)
+ 		display_pain(target, "Вы чувствуете ужасную боль в [parse_zone(user.zone_selected)]!")
+ 	else
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +					span_warning("You fail in replacing [target]'s [target.parse_zone_with_bodypart(target_zone)]! Their body has rejected [tool]!"),
 +					span_warning("[user] fails to replace [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +					span_warning("[user] fails to replaces [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 					span_warning("Вы не смогли заменить [parse_zone(target_zone)] у [target] ! Тело отвергает [tool.name]!"),
+ 					span_warning("[user] не смог заменить [parse_zone(target_zone)] у [target] !"),
+ 					span_warning("[user] не смог заменить [parse_zone(target_zone)] у [target] !"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You successfully augment [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] successfully augments [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully augments [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		)
 +		display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] comes awash with synthetic sensation!", mechanical_surgery = TRUE)
 +		log_combat(user, target, "augmented", addition="by giving him new [target.parse_zone_with_bodypart(target_zone)] COMBAT MODE: [uppertext(user.combat_mode)]")
 +	else
 +		to_chat(user, span_warning("[target] has no organic [target.parse_zone_with_bodypart(target_zone)] there!"))
++=======
+ 			span_notice("Вы успешно заменили [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] успешно заменил [parse_zone(target_zone)] у [target] на [tool.name]!"),
+ 			span_notice("[user] успешно заменил [parse_zone(target_zone)] у [target]!"),
+ 		)
+ 		display_pain(target, "Ваш [parse_zone(target_zone)] наполняется синтетическими ощущениями!", mechanical_surgery = TRUE)
+ 		log_combat(user, target, "проаугментирован", addition="дав ему новую [parse_zone(target_zone)] COMBAT MODE: [uppertext(user.combat_mode)]")
+ 	else
+ 		to_chat(user, span_warning("У [target] нет органической [parse_zone(target_zone)] здесь!"))
++>>>>>>> origin/translate

  • code/modules/surgery/mechanic_steps.dm
++<<<<<<< HEAD
 +		span_notice("You begin to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to unscrew the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
++=======
+ 		span_notice("Вы начинаете откручивать корпус в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает откручивать корпус в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает откручивать корпус в [parse_zone(target_zone)] у [target]."),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to screw the shell of [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel the faint pricks of sensation return as your [target.parse_zone_with_bodypart(target_zone)]'s panel is screwed in.", TRUE)
++=======
+ 		span_notice("Вы начинаете закручивать корпус в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает закручивать корпус в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает закручивать корпус в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы ощущаете, как начинаете получать показания датчиков из [parse_zone(target_zone)], после того, как панель закрутили обратно.", TRUE)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to prepare electronics in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You can feel a faint buzz in your [target.parse_zone_with_bodypart(target_zone)] as the electronics reboot.", TRUE)
++=======
+ 		span_notice("Вы начинаете подготовку электроники в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает подготовку электроники в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает подготовку электроники в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете слабое жужжание в [parse_zone(target_zone)], когда электроника перезагружается.", TRUE)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to unwrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a jostle in your [target.parse_zone_with_bodypart(target_zone)] as the bolts begin to loosen.", TRUE)
++=======
+ 		span_notice("Вы начинаете откручивать болты в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает откручивать болты в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает откручивать болты в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете вибрацию в [parse_zone(target_zone)], когда болты начинают ослабевать.", TRUE)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to wrench some bolts in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a jostle in your [target.parse_zone_with_bodypart(target_zone)] as the bolts begin to tighten.", TRUE)
++=======
+ 		span_notice("Вы начинаете закручивать болты в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает закручивать болты в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает закручивать болты в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете вибрацию в [parse_zone(target_zone)], когда болты начинают затягиваться.", TRUE)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to open the hatch holders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "The last faint pricks of tactile sensation fade from your [target.parse_zone_with_bodypart(target_zone)] as the hatch is opened.", TRUE)
++=======
+ 		span_notice("Вы начинаете открывать держатели люка в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает открывать держатели люка в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает открывать держатели люка в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы получаете последние показания датчиков из вашей [parse_zone(target_zone)], когда открывается люк.", TRUE)
++>>>>>>> origin/translate

  • code/modules/surgery/organ_manipulation.dm
++<<<<<<< HEAD
 +			to_chat(user, span_warning("You cannot put [target_organ] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"))
++=======
+ 			to_chat(user, span_warning("Вы не можете вставить [target_organ] в [target] [parse_zone(target_zone)]!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			to_chat(user, span_warning("There is no room for [target_organ] in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"))
++=======
+ 			to_chat(user, span_warning("Здесь нет места для [target_organ] в [target] [parse_zone(target_zone)]!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +			span_notice("[user] begins to insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] begins to insert something into [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		)
 +		display_pain(target, "You can feel something being placed in your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 			span_notice("Вы вставляете [tool.name] в [parse_zone(target_zone)] у [target]..."),
+ 			span_notice("[user] вставляет [tool.name] в [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] вставляет что-то в [parse_zone(target_zone)] у [target]."),
+ 		)
+ 		display_pain(target, "Вы чувствуете, как что-то вставили в вашу [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			to_chat(user, span_warning("There are no removable organs in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"))
++=======
+ 			to_chat(user, span_warning("В [parse_zone(target_zone)] нет органов, которые можно удалить у [target]!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +					span_notice("You begin to extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +					span_notice("[user] begins to extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +					span_notice("[user] begins to extract something from [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +				)
 +				display_pain(target, "You can feel your [target_organ.name] being removed from your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 					span_notice("Вы начинаете извлекать [target_organ] из [parse_zone(target_zone)] у [target]..."),
+ 					span_notice("[user] начинает извлекать [target_organ] из [parse_zone(target_zone)] у [target]."),
+ 					span_notice("[user] начинает извлекать что-то из [parse_zone(target_zone)] у [target]."),
+ 				)
+ 				display_pain(target, "Вы чувствуете, как [target_organ.name] извлекли из вашей [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +				span_notice("You insert [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +				span_notice("[user] inserts [tool] into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +				span_notice("[user] inserts something into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +			)
 +			display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] throbs with pain as your new [tool.name] comes to life!")
++=======
+ 				span_notice("Вы установили [tool.name] в [parse_zone(target_zone)] у [target]."),
+ 				span_notice("[user] установил [tool.name] в [parse_zone(target_zone)] у [target]!"),
+ 				span_notice("[user] установил что-то в [parse_zone(target_zone)] у [target]!"),
+ 			)
+ 			display_pain(target, "Ваш [parse_zone(target_zone)] болит, пока [tool.name] приживается к телу!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +				span_notice("You successfully extract [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +				span_notice("[user] successfully extracts [target_organ] from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +				span_notice("[user] successfully extracts something from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +			)
 +			display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] throbs with pain, you can't feel your [target_organ.name] anymore!")
 +			log_combat(user, target, "surgically removed [target_organ.name] from", addition="COMBAT MODE: [uppertext(user.combat_mode)]")
++=======
+ 				span_notice("Вы успешно извлекате [target_organ] из [parse_zone(target_zone)] у [target]."),
+ 				span_notice("[user] успешно извлек [target_organ] из [parse_zone(target_zone)] у [target]!"),
+ 				span_notice("[user] успешно извлек что-то из [parse_zone(target_zone)] у [target]!"),
+ 			)
+ 			display_pain(target, "Ваш [parse_zone(target_zone)] болит, вы больше не чувствуете [target_organ.name]!")
+ 			log_combat(user, target, "хирургически удалил [target_organ.name] из", addition="COMBAT MODE: [uppertext(user.combat_mode)]")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +				span_warning("You can't extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +				span_notice("[user] can't seem to extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +				span_notice("[user] can't seem to extract anything from [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 				span_warning("Вы не можете ничего извлечь из [parse_zone(target_zone)] у [target]!"),
+ 				span_notice("[user] похоже не может ничего извлечь из [parse_zone(target_zone)] у [target]!"),
+ 				span_notice("[user] похоже не может ничего извлечь из [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate

  • code/modules/surgery/organic_steps.dm
++<<<<<<< HEAD
 +		span_notice("You begin to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a stabbing in your [target.parse_zone_with_bodypart(target_zone)].")
++=======
+ 		span_notice("Вы начинаете делать надрез в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает делать надрез в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает делать надрез в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете колющую боль в [parse_zone(target_zone)].")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +				span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +				span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +				span_notice("Blood pools around the incision in [human_target]'s [target.parse_zone_with_bodypart(target_zone)]."),
++=======
+ 				span_notice("Вокруг [parse_zone(target_zone)] у [human_target] образуется лужа крови."),
+ 				span_notice("Вокруг [parse_zone(target_zone)] у [human_target] образуется лужа крови."),
+ 				span_notice("Вокруг [parse_zone(target_zone)] у [human_target] образуется лужа крови."),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to <i>carefully</i> make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to <i>carefully</i> make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to <i>carefully</i> make an incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a <i>careful</i> stabbing in your [target.parse_zone_with_bodypart(target_zone)].")
++=======
+ 		span_notice("Вы начинаете <i>осторожно</i> делать надрез в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает <i>осторожно</i> делать надрез в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает <i>осторожно</i> делать надрез в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете <i>осторожный</i> колющий удар в [parse_zone(target_zone)].")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to clamp bleeders in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a pinch as the bleeding in your [target.parse_zone_with_bodypart(target_zone)] is slowed.")
++=======
+ 		span_notice("Вы начинаете зажимать кровеносные сосуды в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает зажимать кровеносные сосуды в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает зажимать кровеносные сосуды в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете укол, послче чего кровотечение в вашей [parse_zone(target_zone)] замедляется.")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to retract the skin in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a severe stinging pain spreading across your [target.parse_zone_with_bodypart(target_zone)] as the skin is pulled back!")
++=======
+ 		span_notice("Вы начинаете раздвигать кожу в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинаете раздвигать кожу в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинаете раздвигать кожу в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете сильную жгучую боль, распространяющуюся по всей [parse_zone(target_zone)], по мере того, как кожа возвращается в прежнее состояние!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to mend the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "Your [target.parse_zone_with_bodypart(target_zone)] is being burned!")
++=======
+ 		span_notice("Вы начинаете обрабатывать разрез в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает обрабатывать разрез в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает обрабатывать разрез в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Ваш [parse_zone(target_zone)] прижигается!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to saw through the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a horrid ache spread through the inside of your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 		span_notice("Вы начинаете распиливать кость в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает распиливать кость в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает распиливать кость в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете ужасную боль внутри [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You saw [target]'s [target.parse_zone_with_bodypart(target_zone)] open."),
 +		span_notice("[user] saws [target]'s [target.parse_zone_with_bodypart(target_zone)] open!"),
 +		span_notice("[user] saws [target]'s [target.parse_zone_with_bodypart(target_zone)] open!"),
 +	)
 +	display_pain(target, "It feels like something just broke in your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 		span_notice("Вы вскрываете [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] вскрывает [parse_zone(target_zone)] у [target] !"),
+ 		span_notice("[user] вскрывает [parse_zone(target_zone)] у [target] !"),
+ 	)
+ 	display_pain(target, "Такое ощущение, что в [parse_zone(target_zone)] что-то сломано!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to drill into the bone in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel a horrible piercing pain in your [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 		span_notice("Вы начинаете сверлить прямо в кости в [parse_zone(target_zone)] у [target]..."),
+ 		span_notice("[user] начинает сверлить прямо в кости в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] начинает сверлить прямо в кости в [parse_zone(target_zone)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете ужасную пронзительную боль в [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You drill into [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] drills into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		span_notice("[user] drills into [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы просверлили [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] просверливает [parse_zone(target_zone)] у [target]!"),
+ 		span_notice("[user] просверливает [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate

  • code/modules/surgery/plastic_surgery.dm
++<<<<<<< HEAD
 +		span_notice("You begin to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]..."),
 +		span_notice("[user] begins to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] begins to insert [tool] into the incision in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +	)
 +	display_pain(target, "You feel something inserting just below the skin in your [target.parse_zone_with_bodypart(target_zone)].")
++=======
+ 		span_notice("Вы начинаете вставлять [tool.name] в разрезе на [parse_zone(target_zone)] у [target] ..."),
+ 		span_notice("[user] начинает вставлять [tool.name] в разрезе на [parse_zone(target_zone)] у [target]]."),
+ 		span_notice("[user] начинает вставлять [tool.name] в разрезе на [parse_zone(target_zone)] у [target]]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете, как что-то вставили вам под кожу в [parse_zone(target_zone)].")
++>>>>>>> origin/translate

  • code/modules/surgery/prosthetic_replacement.dm
++<<<<<<< HEAD
 +				target.balloon_alert(user, "that doesn't go on the [target.parse_zone_with_bodypart(target_zone)]!")
++=======
+ 				target.balloon_alert(user, "это не подходит к [parse_zone(target_zone)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +				span_notice("You begin to replace [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]..."),
 +				span_notice("[user] begins to replace [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."),
 +				span_notice("[user] begins to replace [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			)
 +		else
 +			to_chat(user, span_warning("[tool] isn't the right type for [target.parse_zone_with_bodypart(target_zone)]."))
++=======
+ 				span_notice("Вы начинаете заменять [parse_zone(target_zone)] у [target] на [tool.name]..."),
+ 				span_notice("[user] начинает заменять [parse_zone(target_zone)] у [parse_zone(target_zone)] на [tool.name]."),
+ 				span_notice("[user] начинает заменять [parse_zone(target_zone)] у [target]."),
+ 			)
+ 		else
+ 			to_chat(user, span_warning("[tool.name] не подходит для [parse_zone(target_zone)]."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You begin to attach [tool] onto [target]..."),
 +			span_notice("[user] begins to attach [tool] onto [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] begins to attach something onto [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
++=======
+ 			span_notice("Вы начинаете прикреплять [tool.name] к [target]..."),
+ 			span_notice("[user] начинает прикреплять [tool.name] к [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] начинает прикреплять что-то к [parse_zone(target_zone)] у [target]."),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +			span_notice("You succeed in replacing [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +			span_notice("[user] successfully replaces [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +			span_notice("[user] successfully replaces [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
 +		)
 +		display_pain(target, "You feel synthetic sensation wash from your [target.parse_zone_with_bodypart(target_zone)], which you can feel again!", TRUE)
++=======
+ 			span_notice("Вы успешно заменили [parse_zone(target_zone)] у [target]."),
+ 			span_notice("[user] успешно заменил [parse_zone(target_zone)] у [target] на [tool.name]!"),
+ 			span_notice("[user] успешно заменил [parse_zone(target_zone)] у [target]!"),
+ 		)
+ 		display_pain(target, "Вы наполняетесь позитивными ощущениями, потому что вы снова чувствуете ваш [parse_zone(target_zone)]!", TRUE)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		display_pain(target, "You feel a strange sensation from your new [target.parse_zone_with_bodypart(target_zone)].", TRUE)
++=======
+ 		display_pain(target, "Вы испытываете странные ощущения от своего нового [parse_zone(target_zone)].", TRUE)
++>>>>>>> origin/translate

  • code/modules/surgery/repair_puncture.dm
++<<<<<<< HEAD
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
 +		return
 +
 +	if(pierce_wound.blood_flow <= 0)
 +		to_chat(user, span_notice("[target]'s [target.parse_zone_with_bodypart(user.zone_selected)] has no puncture to repair!"))
++=======
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
+ 		return
+ 
+ 	if(pierce_wound.blood_flow <= 0)
+ 		to_chat(user, span_notice("У [target] в [parse_zone(user.zone_selected)] нет сквозного ранения, которое нуждается в обработке!"))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +		span_notice("[user] begins to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +		span_notice("[user] begins to realign the torn blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +	)
 +	display_pain(target, "You feel a horrible stabbing pain in your [target.parse_zone_with_bodypart(user.zone_selected)]!")
++=======
+ 		span_notice("Вы начинаете приводить в порядок поврежденные кровеносные сосуды в [parse_zone(user.zone_selected)] у [target]..."),
+ 		span_notice("[user] начинает приводить в порядок поврежденные кровеносные сосуды в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 		span_notice("[user] начинает приводить в порядок поврежденные кровеносные сосуды в [parse_zone(user.zone_selected)] у [target]."),
+ 	)
+ 	display_pain(target, "Вы чувствуете ужасную колющую боль в [parse_zone(user.zone_selected)]!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You successfully realign some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] successfully realigns some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +		span_notice("[user] successfully realigns some of the blood vessels in  [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы успешно восстанавливаете некоторые кровеносные сосуды в [parse_zone(user.zone_selected)] у [target]."),
+ 		span_notice("[user] успешно восстанавливает некоторые кровеносные сосуды в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]!"),
+ 		span_notice("[user] успешно восстанавливает некоторые кровеносные сосуды в [parse_zone(user.zone_selected)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You jerk apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]."),
 +		span_notice("[user] jerks apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +		span_notice("[user] jerk apart some of the blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы повреждаете некоторые кровеносные сосуды в [parse_zone(target_zone)] у [target]."),
+ 		span_notice("[user] повреждает некоторые кровеносные сосуды в [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 		span_notice("[user] повреждает некоторые кровеносные сосуды в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		user.visible_message(span_notice("[user] looks for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."), span_notice("You look for [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."))
++=======
+ 		user.visible_message(span_notice("[user] ищет у [target] в [parse_zone(user.zone_selected)]."), span_notice("Вы ищете у [target] в [parse_zone(user.zone_selected)]..."))
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You begin to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]..."),
 +		span_notice("[user] begins to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)] with [tool]."),
 +		span_notice("[user] begins to meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(user.zone_selected)]."),
 +	)
 +	display_pain(target, "You're being burned inside your [target.parse_zone_with_bodypart(user.zone_selected)]!")
++=======
+ 		span_notice("Вы начинаете восстанавливать некоторые из поврежденных кровеносных сосудов в [parse_zone(user.zone_selected)] у [target]..."),
+ 		span_notice("[user] начинает восстанавливать некоторые из поврежденных кровеносных сосудов в [parse_zone(user.zone_selected)] у [target] при помощи [tool.name]."),
+ 		span_notice("[user] начинает восстанавливать некоторые из поврежденных кровеносных сосудов в [parse_zone(user.zone_selected)] у [target]."),
+ 	)
+ 	display_pain(target, "В [parse_zone(user.zone_selected)] все горит!")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		span_notice("You successfully meld some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]."),
 +		span_notice("[user] successfully melds some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)] with [tool]!"),
 +		span_notice("[user] successfully melds some of the split blood vessels in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"),
++=======
+ 		span_notice("Вы успешно восстановили некоторые из поврежденных кровеносных сосудов в [parse_zone(target_zone)] у [target] при помощи [tool.name]."),
+ 		span_notice("[user] успешно восстановил некоторые из поврежденных кровеносных сосудов в [parse_zone(target_zone)] у [target] при помощи [tool.name]!"),
+ 		span_notice("[user] успешно восстановил некоторые из поврежденных кровеносных сосудов в [parse_zone(target_zone)] у [target]!"),
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +		to_chat(user, span_green("You've repaired all the internal damage in [target]'s [target.parse_zone_with_bodypart(target_zone)]!"))
++=======
+ 		to_chat(user, span_green("Вы восстановили все внутренние повреждения в [parse_zone(target_zone)] у [target]!"))
++>>>>>>> origin/translate

  • code/modules/surgery/sleeper_protocol.dm
++<<<<<<< HEAD:code/modules/surgery/sleeper_protocol.dm
++=======
+ /datum/traitor_objective_category/sleeper_protocol
+ 	name = "Sleeper Protocol"
+ 	objectives = list(
+ 		/datum/traitor_objective/sleeper_protocol = 1,
+ 		/datum/traitor_objective/sleeper_protocol/everybody = 1,
+ 	)
+ 
+ /datum/traitor_objective/sleeper_protocol
+ 	name = "Выполните процедуру внедрения спящего агента над одним из членов экипажа."
+ 	description = "Используйте кнопку ниже, чтобы материализовать в руке хирургический диск, с помощью которого вы сможете сделать члена экипажа спящим агентом Синдиката. Если диск будет уничтожен, цель будет провалена. Это сработает только на живых и разумных членах экипажа."
+ 
+ 	progression_minimum = 0 MINUTES
+ 
+ 	progression_reward = list(8 MINUTES, 15 MINUTES)
+ 	telecrystal_reward = 1
+ 
+ 	var/list/limited_to = list(
+ 		JOB_CHIEF_MEDICAL_OFFICER,
+ 		JOB_MEDICAL_DOCTOR,
+ 		JOB_PARAMEDIC,
+ 		JOB_ROBOTICIST,
+ 	)
+ 
+ 	var/obj/item/disk/surgery/sleeper_protocol/disk
+ 
+ 	var/mob/living/current_registered_mob
+ 
+ 	var/inverted_limitation = FALSE
+ 
+ /datum/traitor_objective/sleeper_protocol/generate_ui_buttons(mob/user)
+ 	var/list/buttons = list()
+ 	if(!disk)
+ 		buttons += add_ui_button("", "Нажмите, чтобы материализовать процедуру внедрения спящего агента", "save", "summon_disk")
+ 	return buttons
+ 
+ /datum/traitor_objective/sleeper_protocol/ui_perform_action(mob/living/user, action)
+ 	switch(action)
+ 		if("summon_disk")
+ 			if(disk)
+ 				return
+ 			disk = new(user.drop_location())
+ 			user.put_in_hands(disk)
+ 			AddComponent(/datum/component/traitor_objective_register, disk, \
+ 				fail_signals = list(COMSIG_QDELETING))
+ 
+ /datum/traitor_objective/sleeper_protocol/proc/on_surgery_success(datum/source, datum/surgery_step/step, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
+ 	SIGNAL_HANDLER
+ 	if(istype(step, /datum/surgery_step/brainwash/sleeper_agent))
+ 		succeed_objective()
+ 
+ /datum/traitor_objective/sleeper_protocol/can_generate_objective(datum/mind/generating_for, list/possible_duplicates)
+ 	var/datum/job/job = generating_for.assigned_role
+ 	if(!(job.title in limited_to) && !inverted_limitation)
+ 		return FALSE
+ 	if((job.title in limited_to) && inverted_limitation)
+ 		return FALSE
+ 	if(length(possible_duplicates) > 0)
+ 		return FALSE
+ 	return TRUE
+ 
+ /datum/traitor_objective/sleeper_protocol/generate_objective(datum/mind/generating_for, list/possible_duplicates)
+ 	AddComponent(/datum/component/traitor_objective_mind_tracker, generating_for, \
+ 		signals = list(COMSIG_MOB_SURGERY_STEP_SUCCESS = PROC_REF(on_surgery_success)))
+ 	return TRUE
+ 
+ /datum/traitor_objective/sleeper_protocol/ungenerate_objective()
+ 	disk = null
++>>>>>>> origin/translate:code/modules/antagonists/traitor/objectives/sleeper_protocol.dm

  • code/modules/surgery/surgery_step.dm
++<<<<<<< HEAD
 +				to_chat(user, span_warning("You need to expose [target]'s [target.parse_zone_with_bodypart(target_zone)] to perform surgery on it!"))
++=======
+ 				to_chat(user, span_warning("Вам надо снять все, что может закрывать [parse_zone(target_zone)] у [target], для того чтобы начать операцию!"))
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
++<<<<<<< HEAD
 +          tooltip={`
 +            This is a gameplay suggestion for bored traitors.
 +            You don't have to follow it, unless you want some
 +            ideas for how to spend the round.`}
++=======
+           tooltip={multiline`
+             Это внутриигровое предложение для заскучавших предателей.
+             Вы не обязаны следовать ему, если только вы не хотите
+             использовать это для генерации идей для раунда.`}
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/ApprenticeContract.tsx
++<<<<<<< HEAD
 +              blurb={`
 +                Your apprentice is skilled in offensive magic.
 +                They know Magic Missile and Fireball.
++=======
+               blurb={multiline`
+                 Ваш ученик владеет наступательной магией.
+                 Они владеют «Magic Missile» и «Fireball».
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +              blurb={`
 +              Your apprentice is able to defy physics, melting through
 +              solid objects and travelling great distances in the
 +              blink of an eye. They know Teleport and Ethereal Jaunt.
++=======
+               blurb={multiline`
+               Ваш ученик способен бросить вызов физике, проникая
+               сквозь твердые предметы и преодолевая огромные
+               расстояния в мгновение ока. Они владеют «Teleport» и «Ethereal Jaunt».
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +              blurb={`
 +              Your apprentice is training to cast spells that will
 +              aid your survival. They know Forcewall and Charge and
 +              come with a Staff of Healing.
++=======
+               blurb={multiline`
+               Ваш ученик обучается заклинаниям, которые
+               помогут вам в выживании. Они знают «Forcewall» и «Charge» и
+               имеют при себе Посох исцеления.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +              blurb={`
 +              Your apprentice is training to cast spells without
 +              their robes. They know Knock and Mindswap.
++=======
+               blurb={multiline`
+               Ваш ученик учится применять заклинания
+               без одеяний. Они владеют «Knock» и «Mindswap».
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/abductor.ts
++<<<<<<< HEAD
 +    `
 +      Abductors are technologically advanced alien society set on cataloging
 +      all species in the system. Unfortunately for their subjects their methods
 +      are quite invasive.
 +    `,
 +
 +    `
 +      You and a partner will become the abductor scientist and agent duo.
 +      As an agent, abduct unassuming victims and bring them back to your UFO.
 +      As a scientist, scout out victims for your agent, keep them safe, and
 +      operate on whoever they bring back.
++=======
+     multiline`
+       Абдукторы - технологически развитое инопланетное общество, поставившее
+       своей целью каталогизацию всех видов в системе. К несчастью для своих
+       испытуемых, их методы весьма инвазивны.
+     `,
+ 
+     multiline`
+       Вы и ваш напарник станете дуэтом абдукторов из учёного и агента.
+       В качестве агента похищайте ничего не подозревающих жертв и возвращайте
+       их в свой НЛО.
+       В качестве учёного ищите жертв для своего агента, обеспечивайте
+       его безопасность и оперируйте тех, кого он принесёт.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blob.ts
++<<<<<<< HEAD
 +export const BLOB_MECHANICAL_DESCRIPTION = `
 +  The blob infests the station and destroys everything in its path, including
 +  hull, fixtures, and creatures. Spread your mass, collect resources, and
 +  consume the entire station. Make sure to prepare your defenses, because the
 +  crew will be alerted to your presence!
++=======
+ export const BLOB_MECHANICAL_DESCRIPTION = multiline`
+   Блоб заражает станцию и уничтожает все на своем пути, включая корпус,
+   основание станции и существ. Распространяйте свою массу, собирайте ресурсы
+   и поглотите всю станцию. Не забудьте подготовить оборону, потому что экипаж
+   будет предупрежден о вашем присутствии!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/blobinfection.ts
++<<<<<<< HEAD
 +    `
 +      At any point in the middle of the shift, be strucken with an infection
 +      that will turn you into the terrifying blob.
++=======
+     multiline`
+       В любой момент посреди смены вас поразит инфекция,
+       которая превратит вас в ужасающего блоба.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/bloodbrother.ts
++<<<<<<< HEAD
 +    `
 +      Team up with other crew members as blood brothers to combine the strengths
 +      of your departments, break each other out of prison, and overwhelm the
 +      station.
++=======
+     multiline`
+       Объединитесь с другими членами команды как кровные братья,
+       чтобы объединить сильные стороны своих отделов,
+       вызволить друг друга из тюрьмы и побороть станцию.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changeling.ts
++<<<<<<< HEAD
 +export const CHANGELING_MECHANICAL_DESCRIPTION = `
 +Transform yourself or others into different identities, and buy from an
 +arsenal of biological weaponry with the DNA you collect.
++=======
+ export const CHANGELING_MECHANICAL_DESCRIPTION = multiline`
+ Превращайтесь или превращайте в другие личностей и покупайте арсенал
+ биологического оружия с помощью собранной ДНК.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +    `
 +      A highly intelligent alien predator that is capable of altering their
 +      shape to flawlessly resemble a human.
++=======
+     multiline`
+       Разумный инопланетный хищник, способный изменять свою форму,
+       чтобы безупречно походить на человека.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/changelingmidround.ts
++<<<<<<< HEAD
 +    `
 +    A midround changeling does not receive a crew identity, instead arriving
 +    from space. This will be more difficult than being a round-start changeling!
++=======
+     multiline`
+     Вариант генокрада, который не получает личность экипажа, а прибывает
+     из космоса во время смены. Эта версия сложнее, чем начинающаяся в начале смены!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/clownoperative.ts
++<<<<<<< HEAD
 +    `
 +      Honk! You have been chosen, for better or worse to join the Syndicate
 +      Clown Operative strike team. Your mission, whether or not you choose
 +      to tickle it, is to honk Nanotrasen's most advanced research facility!
 +      That's right, you're going to Clown Station 13.
++=======
+     multiline`
+       Хонк! Вы были выбраны, к лучшему или худшему, в Синдикатовскую ударную группу
+       клоунов. Ваша миссия, вне зависимости от ваших щекоток,
+       заключается в отхонкивании самого передового
+       исследовательского центра Нанотрейзен!
+       Правильно, вы отправитесь на клоунскую станцию 13.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/cultist.ts
++<<<<<<< HEAD
 +    `
 +      The Geometer of Blood, Nar-Sie, has sent a number of her followers to
 +      Space Station 13. As a cultist, you have an abundance of cult magics at
 +      your disposal, something for all situations. You must work with your
 +      brethren to summon an avatar of your eldritch goddess!
 +    `,
 +
 +    `
 +      Armed with blood magic, convert crew members to the Blood Cult, sacrifice
 +      those who get in the way, and summon Nar-Sie.
++=======
+     multiline`
+       Богиня Крови, Нар-Си, отправила несколько своих последователей на
+       космическую станцию 13. Как культист, вы имеете в своем распоряжении
+       множество заклинаний культа, подходящих для любых ситуаций.
+       Вы должны работать вместе со своими собратьями,
+       чтобы призвать аватар вашей мистической богини!
+     `,
+ 
+     multiline`
+       Вооружившись магией крови, обратите членов экипажа в Культ крови,
+       принесите в жертву мешающим вам, и призовите Нар-Си.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/fugitive.ts
++<<<<<<< HEAD
 +    `
 +    Wherever you come from, you're being hunted. You have 10 minutes to prepare
 +    before fugitive hunters arrive and start hunting you and your friends down!
++=======
+     multiline`
+     Откуда бы вы ни прибыли, за вами охотятся. У вас есть 10 минут,
+     чтобы подготовиться, пока не появились охотники за беглецами и не начали
+     охоту на вас и ваших друзей!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/glitch.ts
++<<<<<<< HEAD
 +    `
 +    The virtual domain is a dangerous place for bitrunners. Make it so.
 +    `,
 +
 +    `
 +    You are a short-term antagonist, a glitch in the system. Use martial arts \
 +    and lethal weaponry to terminate organics.
++=======
+     multiline`
+     Виртуальное пространство - опасное место для битраннеров. Убедите их в этом.
+     `,
+ 
+     multiline`
+     Вы кратковременный антагонист, сбой в системе. Используйте боевые искусства \
+     и летальное оружие, чтобы уничтожить органиков.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/headrevolutionary.ts
++<<<<<<< HEAD
 +export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = `
 +      Armed with a flash, convert as many people to the revolution as you can.
 +      Kill or exile all heads of staff on the station.
++=======
+ export const REVOLUTIONARY_MECHANICAL_DESCRIPTION = multiline`
+       Вооружившись флэшем, обратите в революцию как можно больше людей.
+       Убейте или изгоните всех глав станции.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/heretic.ts
++<<<<<<< HEAD
 +export const HERETIC_MECHANICAL_DESCRIPTION = `
 +      Find hidden influences and sacrifice crew members to gain magical
 +      powers and ascend as one of several paths.
++=======
+ export const HERETIC_MECHANICAL_DESCRIPTION = multiline`
+       Найдите скрытые влияния и принесите в жертву членов экипажа,
+       чтобы получить магические силы и возвыситься по одному из нескольких путей.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +    `
 +      Forgotten, devoured, gutted. Humanity has forgotten the eldritch forces
 +      of decay, but the mansus veil has weakened. We will make them taste fear
 +      again...
++=======
+     multiline`
+       Забытые, поглощенные, выпотрошенные. Человечество забыло о мистических силах
+       разложения, но завеса Мансуса ослабла. Мы заставим их снова
+       почувствовать вкус страха...
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/loneoperative.ts
++<<<<<<< HEAD
 +    `
 +      A solo nuclear operative that has a higher chance of spawning the longer
 +      the nuclear authentication disk stays in one place.
++=======
+     multiline`
+       Шанс появления ядерного оперативника-одиночки повышается в зависимости от того,
+       насколько долго диск ядерной аутентификации находится на одном месте.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfai.ts
++<<<<<<< HEAD
 +export const MALF_AI_MECHANICAL_DESCRIPTION = `
 +    With a law zero to complete your objectives at all costs, combine your
 +    omnipotence and malfunction modules to wreak havoc across the station.
 +    Go delta to destroy the station and all those who opposed you.
++=======
+ export const MALF_AI_MECHANICAL_DESCRIPTION = multiline`
+     Имея нулевой закон, гласящий выполнить свои задачи любой ценой,
+     объедините свое всемогущество с модулями сбойного ИИ, чтобы посеять хаос
+     на всей станции. Активируйте код Дельта, чтобы уничтожить станцию и всех,
+     кто вам противостоит.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/malfaimidround.ts
++<<<<<<< HEAD
 +    `
 +      A form of malfunctioning AI that is given to existing AIs in the middle
 +      of the shift.
++=======
+     multiline`
+       Вариант сбойного ИИ, которого могут получить существующие ИИ
+       в любой момент во время смены.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/nightmare.ts
++<<<<<<< HEAD
 +    `
 +      Use your light eater to break sources of light to survive and thrive.
 +      Jaunt through the darkness and seek your prey with night vision.
++=======
+     multiline`
+       Используйте свой клинок для уничтожения источников света,
+       чтобы жить и процветать во тьме. Пробирайтесь сквозь тьму и
+       ищите добычу с помощью ночного зрения.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/obsessed.ts
++<<<<<<< HEAD
 +    `
 +    You're obsessed with someone! Your obsession may begin to notice their
 +    personal items are stolen and their coworkers have gone missing,
 +    but will they realize they are your next victim in time?
++=======
+     multiline`
+     Вы кем-то одержимы! Ваша цель одержимости может начать замечать,
+     что их личные вещи были украдены, а коллеги пропали,
+     но поймут ли они вовремя, что она - ваша следующая жертва?
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operative.ts
++<<<<<<< HEAD
 +export const OPERATIVE_MECHANICAL_DESCRIPTION = `
 +  Retrieve the nuclear authentication disk, use it to activate the nuclear
 +  fission explosive, and destroy the station.
++=======
+ export const OPERATIVE_MECHANICAL_DESCRIPTION = multiline`
+   Вытащите диск ядерной аутентификации и используйте его,
+   чтобы активировать ядерную бомбу для уничтожения станции.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +    `
 +      Congratulations, agent. You have been chosen to join the Syndicate
 +      Nuclear Operative strike team. Your mission, whether or not you choose
 +      to accept it, is to destroy Nanotrasen's most advanced research facility!
 +      That's right, you're going to Space Station 13.
++=======
+     multiline`
+       Поздравляю, агент. Вы были выбраны в Синдикатовскую ударную группу
+       ядерных оперативников. Ваша миссия, вне зависимости от вашего решения,
+       заключается в уничтожении самого передового
+       исследовательского центра Нанотрейзен!
+       Правильно, вы отправитесь на космическую станцию 13.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/operativemidround.ts
++<<<<<<< HEAD
 +    `
 +      A form of nuclear operative that is offered to ghosts in the middle
 +      of the shift.
++=======
+     multiline`
+       Вариант ядерного оперативника, который могут получить призраки
+       в любой момент во время смены.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/paradoxclone.ts
++<<<<<<< HEAD
 +    `
 +    A freak time-space anomaly has teleported you into another reality!
 +    Now you have to find your counterpart and kill and replace them.
++=======
+     multiline`
+     Странная пространственно-временная аномалия телепортировала вас в
+     другую реальность! Теперь вам предстоит найти своего двойника,
+     убить и заменить его.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/provocateur.ts
++<<<<<<< HEAD
 +    `
 +      A form of head revolutionary that can activate when joining an ongoing
 +      shift.
++=======
+     multiline`
+       Вариант главы революции, который можно получить при прибытии смену.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/revenant.ts
++<<<<<<< HEAD
 +    `
 +      Become the mysterious revenant. Break windows, overload lights, and eat
 +      the crew's life force, all while talking to your old community of
 +      disgruntled ghosts.
++=======
+     multiline`
+       Станьте таинственным ревенантом. Разбивайте окна, перегружайте свет
+       и питайтесь жизненной силой экипажа, общаясь при этом со своей
+       старой общиной недовольных призраков.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentiencepotionspawn.ts
++<<<<<<< HEAD
 +    `
 +		Either by cosmic happenstance, or due to crew's shenanigans, you have been
 +		given sentience!
 +	  `,
 +
 +    `
 +		This is a blanket preference. The more benign ones include random human
 +		level intelligence events, the cargorilla, and creatures uplifted via sentience
 +		potions. The less friendly ones include the regal rat, and the boosted
 +		mining elite mobs.
++=======
+     multiline`
+     Либо по космической случайности, либо из-за махинаций экипажа,
+     вы получили разум!
+ 	  `,
+ 
+     multiline`
+     Это универсальное предпочтение. К более дружелюбным относятся случайные события,
+     связанные с интеллектом человеческого уровня, каргорилла и существа,
+     поднятые с помощью зелий разумности. К менее дружелюбным относятся
+     крысиный король и усиленные шахтерские элитные мобы.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/sentientdisease.ts
++<<<<<<< HEAD
 +    `
 +      Mutate and spread yourself and infect as much of the crew as possible
 +      with a deadly plague of your own creation.
++=======
+     multiline`
+       Мутируйте, распространяйтесь и заразите как можно больше членов экипажа
+       смертельно опасной чумой собственного создания.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts
++<<<<<<< HEAD
 +    `
 +      Become a ferocious space dragon. Breathe fire, summon an army of space
 +      carps, crush walls, and terrorize the station.
++=======
+     multiline`
+       Станьте свирепым Космическим драконом. Дышите огнем, призывайте армию
+       космических карпов, крушите стены и наводите ужас на станцию.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spaceninja.ts
++<<<<<<< HEAD
 +    `
 +      The Spider Clan practice a sort of augmentation of human flesh in order to
 +      achieve a more perfect state of being and follow Postmodern Space Bushido.
 +    `,
 +
 +    `
 +      Become a conniving space ninja, equipped with a katana, gloves to hack
 +      into airlocks and APCs, a suit to make you go near-invisible,
 +      as well as a variety of abilities in your kit. Hack into arrest consoles
 +      to mark everyone as arrest, and even hack into communication consoles to
 +      summon more threats to cause chaos on the station!
++=======
+     multiline`
+       Клан Пауков практикует своего рода аугментацию человеческой плоти,
+       чтобы достичь более совершенного состояния бытия
+       и следовать постмодернистскому космическому бусидо.
+     `,
+ 
+     multiline`
+       Станьте коварным космическим ниндзя, вооружившись катаной,
+       перчатками для взлома шлюзов и ЛКП, костюмом, делающим вас
+       практически невидимым, а также разнообразными способностями в вашем наборе.
+       Взломайте консоли СБ, чтобы пометить всех как арестованных,
+       и даже взломайте консоли связи, чтобы вызвать новые угрозы
+       для большего хаоса на станции!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts
++<<<<<<< HEAD
 +    `
 +      Your mission, should you choose to accept it: Infiltrate Space Station 13.
 +      Disguise yourself as a member of their crew and steal vital equipment.
 +      Should you be caught or killed, your employer will disavow any knowledge
 +      of your actions. Good luck agent.
 +    `,
 +
 +    `
 +      Complete Spy Bounties to earn rewards from your employer.
 +      Use these rewards to sow chaos and mischief!
++=======
+     multiline`
+       Ваша миссия, если вы решитесь взяться за нее: проникнуть на космическую станцию 13.
+       Замаскируйтесь под ее члена экипажа и украдите жизненно важное оборудование.
+       Если вас поймают или убьют, ваш работодатель будет отрицать любую информацию,
+       связанную с вашими действиями тут. Удачи, агент.
+     `,
+ 
+     multiline`
+       Выполняйте шпиноские заказы, чтобы заработать награды от вашего работодателя.
+       Используйте эти награды для того, чтобы сеять хаос и беду!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/stowawaychangeling.ts
++<<<<<<< HEAD
 +    `
 +      A Changeling that found its way onto the shuttle
 +      unbeknownst to the crewmembers on board.
++=======
+     multiline`
+       Генокрад, который попал на шаттл без ведома членов экипажа.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/syndicatesleeperagent.ts
++<<<<<<< HEAD
 +    `
 +      A form of traitor that can activate at any point in the middle
 +      of the shift.
++=======
+     multiline`
+       Вариант предателя, который можно получить в любой момент во время смены.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/traitor.ts
++<<<<<<< HEAD
 +export const TRAITOR_MECHANICAL_DESCRIPTION = `
 +      Start with an uplink to purchase your gear and take on your sinister
 +      objectives. Ascend through the ranks and become an infamous legend.
++=======
+ export const TRAITOR_MECHANICAL_DESCRIPTION = multiline`
+       Начните с аплинком, чтобы приобрести снаряжение и приступить к
+       выполнению своих зловещих задач. Поднимитесь по карьерной лестнице
+       и станьте печально известной легендой.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +    `
 +      An unpaid debt. A score to be settled. Maybe you were just in the wrong
 +      place at the wrong time. Whatever the reasons, you were selected to
 +      infiltrate Space Station 13.
++=======
+     multiline`
+       Неоплаченный долг. Счеты, которые нужно свести. Может быть,
+       вы просто оказались не в том месте и не в то время. Каковы бы ни были
+       причины, вы были выбраны для проникновения на космическую станцию 13.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/wizard.ts
++<<<<<<< HEAD
 +export const WIZARD_MECHANICAL_DESCRIPTION = `
 +      Choose between a variety of powerful spells in order to cause chaos
 +      among Space Station 13.
++=======
+ export const WIZARD_MECHANICAL_DESCRIPTION = multiline`
+       Выбирайте из множества мощных заклинаний, чтобы вызвать хаос
+       на космической станции 13.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/xenomorph.ts
++<<<<<<< HEAD
 +    `
 +      Become the extraterrestrial xenomorph. Start as a larva, and progress
 +      your way up the caste, including even the Queen!
++=======
+     multiline`
+       Станьте внеземным ксеноморфом. Начните как ларва и продвигайтесь
+       по касте, вплоть до Королевы!
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx
++<<<<<<< HEAD
 +  name: 'Get ghost roles while adminned',
 +  category: 'ADMIN',
 +  description: `
 +    If you de-select this, you will not get any ghost role pop-ups while
 +    adminned! Every single pop-up WILL never show up for you in an adminned
 +    state. However, this does not suppress notifications when you are
 +    a regular player (deadminned).
++=======
+   name: 'Получать гост-роли будучи админом',
+   category: 'АДМИН',
+   description: multiline`
+     Если вы отключите это, то вы не будете получать предложения о гост-ролях,
+     когда вы с правами администратора. НИКАКОЕ оповещение не будет повляться для вас.
+     Но эта опция ничего не делает, если вы являетесь обычным игроком
+     (deadmin).
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx
++<<<<<<< HEAD
 +  name: 'Broadcast login/logout',
 +  category: 'GAMEPLAY',
 +  description: `
 +    When enabled, disconnecting and reconnecting will announce to deadchat.
++=======
+   name: 'Оповещать остальных о входе/выходе',
+   category: 'ГЕЙМПЛЕЙ',
+   description: multiline`
+     Оповещать в чате призраков остальных, когда вы входите или выходите из сервера.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx
++<<<<<<< HEAD
 +  name: 'Enable darkened flashes',
 +  category: 'GAMEPLAY',
 +  description: `
 +    When toggled, being flashed will show a dark screen rather than a
 +    bright one.
++=======
+   name: 'Включить затемнение вспышек',
+   category: 'ГЕЙМПЛЕЙ',
+   description: multiline`
+     Если включено, ослепление будет показывать темный экран,
+     вместо яркого.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx
++<<<<<<< HEAD
 +  name: 'Ghost orbit',
 +  category: 'GHOST',
 +  description: `
 +    The shape in which your ghost will orbit.
 +    Requires BYOND membership.
++=======
+   name: 'Призрак - орбитирование',
+   category: 'ПРИЗРАК',
+   description: multiline`
+     Форма, по которой ваш призрак будет орбитировать.
+     Необходима подписка BYOND.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Ghosts of others',
 +  category: 'GHOST',
 +  description: `
 +    Do you want the ghosts of others to show up as their own setting, as
 +    their default sprites, or always as the default white ghost?
++=======
+   name: 'Призрак - окружающие',
+   category: 'ПРИЗРАК',
+   description: multiline`
+     Должны ли призраки других показываться с их настройками, только с их
+     стандартным спрайтом, или только показывать их стандартным белым призраком?
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Get ghost roles',
 +  category: 'GHOST',
 +  description: `
 +    If you de-select this, you will not get any ghost role pop-ups what-so-ever!
 +    Every single type of these pop-ups WILL be muted for you when you are
 +    ghosted. Very useful for those who find ghost roles or the
 +    pop-ups annoying, use at your own peril.
++=======
+   name: 'Получать гост-роли',
+   category: 'ПРИЗРАК',
+   description: multiline`
+     Если вы отключите это, вы не будете получать оповещения о гост-ролях, вообще!
+     Каждое оповещение БУДЕТ заглушено для вас, когда вы являетесь призраком.
+     Полезная опция для тех, кто не хочет играть на гост-ролях или не любит их
+     оповещения, используйте на свой страх и риск.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx
++<<<<<<< HEAD
 +  name: 'Hear all messages',
 +  category: 'GHOST',
 +  description: `
 +    When enabled, you will be able to hear all speech as a ghost.
 +    When disabled, you will only be able to hear nearby speech.
++=======
+   name: 'Слышать все сообщения',
+   category: 'ПРИЗРАК',
+   description: multiline`
+     Если включено, вы будете слышать всех мобов.
+     Если отключено, вы будете слышать только мобов на экране.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'See all whispers',
 +  category: 'GHOST',
 +  description: `
 +    When enabled, you will be able to hear all whispers as a ghost.
 +    When disabled, you will only be able to hear nearby whispers.
++=======
+   name: 'Слышать все шепоты',
+   category: 'ПРИЗРАК',
+   description: multiline`
+     Если включено, вы будете слышать шепоты всех мобов.
+     Если выключено, вы будете слышать шепоты только мобов на экране.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx
++<<<<<<< HEAD
 +  name: 'Prevent being summoned as a cult ghost',
 +  category: 'ADMIN',
 +  description: `
 +    When enabled and observing, prevents Spirit Realm from forcing you
 +    into a cult ghost.
++=======
+   name: 'Не появляться за призрака культа',
+   category: 'АДМИН',
+   description: multiline`
+     Если включено, и если вы призрак, не дает Spirit Realm превращать вас
+     в призрака культа.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx
++<<<<<<< HEAD
 +  name: 'Preferred map',
 +  category: 'GAMEPLAY',
 +  description: `
 +    During map rotation, prefer this map be chosen.
 +    This does not affect the map vote, only random rotation when a vote
 +    is not held.
++=======
+   name: 'Предпочтительная карта',
+   category: 'ГЕЙМПЛЕЙ',
+   description: multiline`
+     Предпочитать эту карту при ротации карт.
+     Это влияет только тогда, когда вы не проголосовали
+     за выбор карты.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx
++<<<<<<< HEAD
 +  name: 'Screentips: Screentips color',
 +  category: 'UI',
 +  description: `
 +    The color of screen tips, the text you see when hovering over something.
++=======
+   name: 'Подсказки на экране - цвет',
+   category: 'ИНТЕРФЕЙС',
+   description: multiline`
+     Цвет ваших подсказок на экране.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Screentips: Allow images',
 +  category: 'UI',
 +  description: `When enabled, screentip hints use images for
 +    the mouse button rather than LMB/RMB.`,
++=======
+   name: 'Подсказки на экране - изображения',
+   category: 'ИНТЕРФЕЙС',
+   description: multiline`Показывает изображения кнопок мыши при подсказках,
+     вместо ЛКМ/ПКМ.`,
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Screentips: Enable screentips',
 +  category: 'UI',
 +  description: `
 +    Enables screen tips, the text you see when hovering over something.
 +    When set to "Only with tips", will only show when there is more information
 +    than just the name, such as what right-clicking it does.
++=======
+   name: 'Подсказки на экране - включить',
+   category: 'ИНТЕРФЕЙС',
+   description: multiline`
+    Включает подсказки на экране, когда вы наводитесь над объектами.
+    Если выбрана "Только с подсказками", подсказки будут появляться, только если
+    есть дополнительная информация к ним, например действие на ПКМ.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx
++<<<<<<< HEAD
 +  name: 'Enable TTS',
 +  category: 'SOUND',
 +  description: `
 +    When enabled, be able to hear text-to-speech sounds in game.
 +    When set to "Blips", text to speech will be replaced with blip sounds based on the voice.
++=======
+   name: 'TTS - включить',
+   category: 'ЗВУК',
+   description: multiline`
+     Играть звук text-to-speech.
+     Функция "Blips" не работает.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Achievement unlock sound',
 +  category: 'SOUND',
 +  description: `
 +    The sound that's played when unlocking an achievement.
 +    If disabled, no sound will be played.
++=======
+   name: 'Звук при получении достижений',
+   category: 'ЗВУК',
+   description: multiline`
+     Выбор звука, который будет играть при получении достижения.
+     При отключении звука не будет.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx
++<<<<<<< HEAD
 +  name: 'Enable tooltips',
 +  category: 'TOOLTIPS',
 +  description: `
 +    Do you want to see tooltips when hovering over items?
++=======
+   name: 'Подсказки - включить',
+   category: 'ПОДСКАЗКИ',
+   description: multiline`
+     Показывать подсказки при наведении на объект.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +  name: 'Tooltip delay (in milliseconds)',
 +  category: 'TOOLTIPS',
 +  description: `
 +    How long should it take to see a tooltip when hovering over items?
++=======
+   name: 'Подсказки - задержка (в миллисекундах)',
+   category: 'ПОДСКАЗКИ',
+   description: multiline`
+     Задержка перед тем, как показать подсказку при наведении на объект?
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx
++<<<<<<< HEAD
 +  name: 'Enable window flashing',
 +  category: 'UI',
 +  description: `
 +    When toggled, some important events will make your game icon flash on your
 +    task tray.
++=======
+   name: 'Включить мигание окна',
+   category: 'ИНТЕРФЕЙС',
+   description: multiline`
+     Важные события в игре заставят иконку игры мигать
+     на панели задач.
++>>>>>>> origin/translate

  • tgui/packages/tgui/interfaces/Spellbook.tsx
++<<<<<<< HEAD
 +            author="Archchancellor Gray"
 +            blurb={`
 +                This is the classic wizard, crazy popular in
 +                the 2550's. Comes with Fireball, Magic Missile,
 +                Ei Nath, and Ethereal Jaunt. The key here is that
 +                every part of this kit is very easy to pick up and use.
++=======
+             author="Архиканцлер Грей"
+             blurb={multiline`
+                 Это классический маг, был безумно популярным в
+                 2550-е годы. Поставляется с Fireball, Magic Missile,
+                 Ei Nath, и Ethereal Jaunt. Ключевой момент тут в том, что
+                 каждый элемент этого набора очень легко освоить и использовать.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +            author="Jegudiel Worldshaker"
 +            blurb={`
 +                The power of the mighty Mjolnir! Best not to lose it.
 +                This loadout has Summon Item, Mutate, Blink, Force Wall,
 +                Tesla Blast, and Mjolnir. Mutate is your utility in this case:
 +                Use it for limited ranged fire and getting out of bad blinks.
++=======
+             author="Джегудиэль Ворлдшейкер"
+             blurb={multiline`
+                 Сила могучего Мьёльнира! Лучше не терять его.
+                 Этот набор содержит Summon Item, Mutate, Blink, Force Wall,
+                 Tesla Blast, и Мьёлнир. Mutate это ваша поддержка в данном случае:
+                 Используйте его для стрельбы с ограниченным радиусом действия и выхода из плохих блинков.
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +            author="Prospero Spellstone"
 +            blurb={`
 +                Why kill when others will gladly do it for you?
 +                Embrace chaos with your kit: Soulshards, Staff of Change,
 +                Necro Stone, Teleport, and Jaunt! Remember, no offense spells!
++=======
+             author="Заклинатель Просперо"
+             blurb={multiline`
+                 Зачем убивать, если другие с радостью сделают это за вас?
+                 Устройте хаос с помощью своего набора: Soulshards, Staff of Change,
+                 Necro Stone, Teleport, and Jaunt! Помните, у вас нет атакующих заклинаний!
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +            author="Tom the Empty"
 +            blurb={`
 +                Embrace the dark, and tap into your soul.
 +                You can recharge very long recharge spells
 +                like Ei Nath by jumping into new bodies with
 +                Mind Swap and starting Soul Tap anew.
++=======
+             author="Том Пустотный"
+             blurb={multiline`
+                 Примите темноту и откройте свою душу.
+                 Вы можете перезаряжать очень длинные заклинания
+                 как Ei Nath перемещаясь в новые тела с помощью
+                 Mind Swap и начинать ловить души заного.
++>>>>>>> origin/translate

@larentoun larentoun merged commit 7575449 into master May 19, 2024
20 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.