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 [09.07.2024] #333

Merged
merged 425 commits into from
Jul 9, 2024
Merged

Merge upstream [09.07.2024] #333

merged 425 commits into from
Jul 9, 2024

Conversation

Gaxeer
Copy link
Collaborator

@Gaxeer Gaxeer commented Jul 9, 2024

About The Pull Request

Merge upstream [09.07.2024]

comfyorange and others added 30 commits July 4, 2024 09:18
…on#84414)

## About The Pull Request

exorcises hardstun weapons + death/poly wands from lootboxes
pulse weapons are of the taserless variant
also all nukeop guns are unrestricted let people have fun bro

also removes the enchanted modsuit from said loot

## Why It's Good For The Game

getting instantly paralyzed with a ranged gun is not fun, never will be
so we just remove those
also being able to use the guns you get from an admin
shitspawn/deathmatch prop is pretty much a fix???
polymorph wands and death wands are stupid and are just taser++ except
they kill you outright (polymorph could make you a rat that would count
as dead personally)
enchanted modsuit entirely shuts down basically 90% of other players
spells which basically invalidates the entire ragin mages map (which
sucks anyway)

## Changelog
:cl:
balance: removed tasers, the unfirable turret gun, death wand, polymorph
wands and the enchanted modsuit from lootbox loot tables
fix: lootbox guns should now mostly not have syndicate firing pins so
you can actually use them
/:cl:
… to cast any rites (tgstation#84362)

## About The Pull Request

The string path that has been passed to `perform_rite` has not been
converted to an actual type path. This meant that religious tools that
had a whitelist of rites they could perform, could not actually perform
these rights, as a string path does not equals with a typepath. This PR
fixes that.

## Why It's Good For The Game

Makes a mechanic work, allowing the chaplain to store up rite slots as
intended.
Fixes tgstation#83997

## Changelog

:cl:
fix: Instruments enhanced with portable tuning can perform the rites
that have been granted
/:cl:
## About The Pull Request

I originally made the sound effect to accompany heretic ascension
announcements, but tgstation#82878 did that first (and even better, making unique
ones for each path). I thought of ways to reuse it, perhaps replacing
the heretic gain sound effect, since it uses the original sound in the
background, but concluded that it's too intense for that. However, I
think it could work for the feast ritual, being basically a more
dramatic opening for the antag (I assume it would typically be performed
near the shift's start). Also, the ritual is your reward for forsaking
an ascension and thus playing an ascension theme, so I think it kind of
makes sense to give it a unique sound effect as well...

Here is the theme:

https://github.com/tgstation/tgstation/assets/44502667/018a2e25-8956-4620-a4fb-ccdfdfdc82b4

Let me know if you like it, or whether it's too long for your taste or
anything like that 😆.

Since we're already at it, I also improved the ritual's presentation in
chat (which I found quite underwhelming), giving it larger text, and a
message akin to the ones gained from influences and the knowledge
ritual.
## Why It's Good For The Game

It's a somewhat impactful ritual, and I think it could use a theme.
## Changelog
:cl:
add: the Feast of Owls now leaves more dramatic messages in your chat
sound: the Feast of Owls now has a little theme
/:cl:
## About The Pull Request

Closes tgstation#84522
Mending touch should no longer have a reverse effect on simplemobs and
silicons

## Changelog
:cl:
fix: Mending touch no longer damages non-humans
/:cl:
## About The Pull Request
fixes not being able to clean microwaves

## Why It's Good For The Game
closes tgstation#84503

## Changelog
:cl:
fix: fixes not being able to clean microwaves
/:cl:
## About The Pull Request

This pr simply adds drop/pickup sounds to bedsheets, replaces its
`attackby(...)` and `attack_secondary(...)` with `item_interaction(...)`
and `interact_with_atom_secondary(...)`, and makes tucking in match the
bedsheet `pixel_z` with that of the living we're tucking in. It also
removes a check that's no longer needed to allow for telekinetically
tucking someone in.

First bit of note, we use `item_interaction(...)` instead of
`wirecutters_act(...)`/`tool_act(...)` as I think tearing up the
bedsheets should be the interaction in combat mode too, and everything
under `tool_act(...)` only gets called with combat mode being off.

Second bit of note, we remove the `!user.CanReach(target)` check from
tucking people in, as I believe that's no longer necessary here. This
allows us to tuck people in telekinetically, given the bedsheets are
adjacent to the one we're tucking in.

Finally, we match the bedsheets' `pixel_z` with that of the living we're
tucking in by setting it directly, and also reset it directly when we
smooth the sheets.
I know the elevation element exists, but I believe that only cares about
living instances, and besides that really we only want this to be set
when tucking someone in rather than always. Most importantly, it works.
## Why It's Good For The Game

Using the new item interaction code is better than `attackby(...)` and
such.
Cloth sounds are nicer than no sounds, and make sense given they're,
well, cloth.
Tucking someone in with telekinesis is funny.

Previously, bedsheets would not offset their `pixel_z` to match that of
the living they're tucking in, meaning if you were to say rest upon a
table the bedsheets would always be awkwardly offset.
This fixes that.
## Changelog
:cl:
code: Moved bedsheet interactions to the item interaction code. Please
report any issues.
fix: Bedsheets adjust their offset to match that of the living they're
tucking in.
sound: Bedsheets use the cloth drop/pickup sounds instead of being
silent.
qol: You can tuck someone in telekinetically.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
## About The Pull Request
1. Objects now have an `get_proxy_for()` proc. This returns an atom that
will participate in the object melee attack chain on behalf of your
atom. Allows for general purpose polymorphism per object interaction
2. Cleaned up some multitool acts to accommodate proxy behaviour
3. You can pry tiles as an Engiborg with crowbar in hand & do other
similar behaviour with crowbar
5. Improves & Depends on tgstation#83880. We don't need a hidden omni toolbox &
can create the tools directly in the omnitool and pass them in the
attack chain as a proxy rather than calling the attack chain manually.
All tools are on the borg directly
   - Fixes tgstation#84355
   - Fixes tgstation#84359
   - Fixes tgstation#84393

## Changelog 
SyncIt21,zxaber
:cl:
fix: omni crowbar tool interaction for replacing tiles has been fixed 
fix: techfab screentip does not runtime when you hover over it with an
omnitool multitool
fix: medi borgs can do brain surgery again
code: improved multitool & general tool code for some machines
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>
…tion#84325)

## About The Pull Request

Transhumanist and prosthetic limb no longer conflict. If you pick the
same limb for both it uses the weaker prosthetic (dumbass)

Made the name for prosthetic limb global list more intelligible

## Why It's Good For The Game

> Transhumanist and prosthetic limb no longer conflict. If you pick the
same limb for both it uses the weaker prosthetic (dumbass)

I wanted to RP a guy with a robotic voicebox and prosthetic limb but the
game didn't let me, which I thought was pretty lame! Since the root
issue is likely that both can have the same limb which ends up as Free
Points as transhuman takes priority, I just added a check to ensure that
can't happen and is overridden by the negative instead. Any
transhumanist mood point benefits are made up for by the bad limb.

> Made the name for prosthetic limb global list more intelligible

It was bad

## Changelog

:cl:
qol: Transhumanist and prosthetic limb no longer conflict. If you pick
the same limb for both it uses the weaker prosthetic (dumbass)
code: Made the name for prosthetic limb global list more intelligible

/:cl:
## About The Pull Request
fixes mansus grasp not removing runes

## Why It's Good For The Game
closes tgstation#84289

## Changelog
:cl:
fix: fixes mansus grasp not clearing runes
/:cl:
## About The Pull Request
Bitrunning hacker names now permit most characters while staying within
the IC filter and length requirements. Made some helper procs to keep it
organized
## Why It's Good For The Game
You can now name yourself things like An1me_Sn1p3r
## Changelog
:cl:
fix: Bitrunning hacker aliases are now much more permissive
/:cl:
## About The Pull Request
When resources were updated diamond stacks were forgotten about. I also
forgot about them in my last PR, so here they are.

![image](https://github.com/tgstation/tgstation/assets/44720187/c91429c1-1abf-4b68-9ec4-a6935b0f6479)


## Why It's Good For The Game

Spriting consistency is good

## Changelog
:cl:
image: Updated diamond stacks to fit its "unstacked" version.
/:cl:

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


![image](https://github.com/tgstation/tgstation/assets/3625094/ea701268-1d74-42a2-8154-46a84c24ce7b)

Adds a portable atmos device, Pipe Scrubber. Works only when connected
to a port.

Can scrub gases from the pipes into an internal tank, or dump internal
gases to the connected port.

## Why It's Good For The Game

It's hard to clean pipes and machinery from lingering gases.

## Changelog

:cl:
add: Added Pipe Scrubber portable atmos machine
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
…ode [NO GBP] (tgstation#84502)

## About The Pull Request

Provides an alternative way to get the 200 points for the final
augmentation node.

Also reduced the tier of the prior tech node, it was put to tier 4 by
mistake

## Why It's Good For The Game

More options to get the desired node.

## Changelog

:cl:
fix: Techweb: Moved upgraded cyber organs to tier 3 from tier 4
qol: Techweb: Added fully augmented android scan discount experiment for
Advanced Cybernetic Organs techweb node
/:cl:
## About The Pull Request

Moved all 3 versions of data disks to protolathe and autolathe.

## Why It's Good For The Game

It was confusing that you can't print it in lathe and they were
considered circuitboards.

## Changelog

:cl:
qol: Data disks are now printed in lathes instead of circuit imprinter 
/:cl:
comfyorange and others added 19 commits July 9, 2024 08:47
…ir grammar (tgstation#84749)

## About The Pull Request

Closes tgstation#84709
I also rewrote a couple of descriptions and gave user a different
warning formatted with ``span_userdanger`` as to be more visible
(because having your limb torn off is a pretty big deal)

## Why It's Good For The Game

Bugfix + better structured sentences

## Changelog
:cl:
fix: Living limbs can no longer make you touch ghosts or abstract
concepts of start, landmark, influence or job
spellcheck: Fixed improper word usage and improved grammar for living
limbs
/:cl:
## About The Pull Request

Closes tgstation#84762
It was missing total_requirement which defaulted to 0 and made it not
generate properly.

## Changelog
:cl:
fix: Exosuit Stress Failure experiment now works
/:cl:
<!-- 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
Partial port of BeeStation/BeeStation-Hornet#29


https://github.com/tgstation/tgstation/assets/96586172/75b91976-252e-43eb-bd18-787de2513383
<!-- 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
More immersion with sounds for something that is done so often should
further the experience.
<!-- 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
sound: Zippos, Lighters and cigarettes now have sound
/: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. -->
…gstation#84777)

## About The Pull Request
I've forgotten to fill the `loot_list` arg of the `skew_loot_weight`
call, and I'm preventing the maintenance spawners from running the proc
more times that necessary, also stopping the `no_decal` subtype from
removing decals typepaths from the global `maintenance_loot` list.

## Why It's Good For The Game
Pseudo-bugfixing.

## Changelog
N/A
## About The Pull Request
When the beaker is full, chem dispenser thinks it should dispense 0
chemicals.
If 0 chemicals should be dispensed, `cell.use` returns 0. The same value
is returned when there isn't enough energy in the cell.
Because of that, the dispenser was confused and gave off the wrong
message. I added a check to fix that.
Closes tgstation#84780.
## Why It's Good For The Game
Bug bad
## Changelog
:cl:
fix: fixed dubious chem dispenser feedback when the beaker is full
/:cl:
## About The Pull Request
Final part of the 5 part series of fixing all the shuttles. This one is
mostly more of the same except that there were a few shuttles that had
templates so they would show up in the shuttle manipulator but seemingly
there is no actual map file for them.
<details>
  <summary>Full changes</summary>

- Fixed the following shuttles flying in unexpected directions:
ferry_base.dmm*, ferry_meat.dmm, ferry_lighthouse.dmm, ert_bounty,
cargo_kilo.dmm, cargo_pubby.dmm, cargo_delta.dmm
- Fixed ert_bounty.dmm having incorrect offsets in its navigation
console
- Removed: the Northstar ferry template, Omegastation arrivals shuttle
template, Donutstation cargo ferry template: I don't think any of these
shuttles exist. I looked around in the map folder and couldn't find any
of them. Trying to load one of them in the shuttle manipulator will just
cause a runtime because it cant find a docking port. I don't know if I
just missed these or if they don't exist, but it seems like the latter.

*The ferry is kind of debateable on which direction it's supposed to fly
because it has engines on both sides but i'm going with the side that
has more engines being the "back"

</details>

## Why It's Good For The Game
All the shuttles should now fly in their intended directions and all the
navigation consoles should all be centred so they're usable. The
templates were removed because it doesn't really make sense to have
entries in the shuttle manipulator for shuttles that don't exist and
cannot be spawned.

## Changelog
:cl:

del: Removed the shuttle manipulator entries for the following shuttles:
Northstar ferry, Omegastation arrivals shuttle, and Donutstation cargo
ferry. (These shuttles didn't actually exist but they still had entries
in the manipulator.)

fix: Fixed the following shuttles flying in unexpected directions: Basic
CC Ferry, Meat Ferry, Lighthouse Ferry, ERT bounty shuttle, Kilo cargo
shuttle, Pubby cargo shuttle, and Delta cargo shuttle.

fix: Fixed the ERT bounty shuttle having incorrect offsets in the
shuttle navigation console.

/:cl:
## About The Pull Request

Added a ``/datum/component/speechmod`` component which can be used to
perform basic speech modifications. It use either simple replacements or
regex, add a string at the end of any message (at a chance if required)
and convert speech to uppercase. However, a good chunk of speechmods are
far too niche and specific to be put into a speechmod component and thus
have been left alone.

## Why It's Good For The Game

Cuts down on copypasted code, makes making new speechmods easier.

## Changelog
:cl:
refactor: Refactored a lot of speech modifiers to use a component
instead of copied over code.
/:cl:
@ss220club ss220club deleted a comment from github-actions bot Jul 9, 2024
@Gaxeer Gaxeer closed this Jul 9, 2024
@Gaxeer Gaxeer reopened this Jul 9, 2024
Copy link

github-actions bot commented Jul 9, 2024

This pr causes following conflicts on translate branch:

  • code/datums/mutations/speech.dm
++<<<<<<< HEAD
 +	text_gain_indication = span_notice("You feel Swedish, however that works.")
 +	text_lose_indication = span_notice("The feeling of Swedishness passes.")
 +	var/static/list/language_mutilation = list("w" = "v", "j" = "y", "bo" = "bjo", "a" = list("å","ä","æ","a"), "o" = list("ö","ø","o"))
++=======
+ 	text_gain_indication = span_notice("Ты ощущаешь себя шведом, что бы это ни значило.")
+ 	text_lose_indication = span_notice("Ты перестаешь ощущать себя шведом.")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	text_gain_indication = span_notice("You feel...totally chill, man!")
 +	text_lose_indication = span_notice("You feel like you have a better sense of time.")
++=======
+ 	locked = TRUE
+ 	text_gain_indication = span_notice("Ты чувствуешь себя...максимально расслабленным, чувак!")
+ 	text_lose_indication = span_notice("Ты чувствуешь, что твоё восприятие времени стало лучше.")
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/items/keyring.dm
++<<<<<<< HEAD
 +		to_chat(user, span_notice("You use [src], to link [reference_resolved] and [target] together."))
++=======
+ 		to_chat(user, span_notice("Используя [src], вы соединяете [link] с [target]."))
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/knowledge/side_blade_rust.dm
++<<<<<<< HEAD
 +	name = "Lionhunter Rifle Ammunition"
 +	desc = "Allows you to transmute 3 ballistic ammo casings (used or unused) of any caliber, \
 +		including shotgun shot, with any animal hide to create an extra clip of ammunition for the Lionhunter Rifle."
 +	gain_text = "The weapon came with three rough iron balls, intended to be used as ammunition. \
 +		They were very effective, for simple iron, but used up quickly. I soon ran out. \
 +		No replacement munitions worked in their stead. It was peculiar in what it wanted."
++=======
+ 	name = "Lionhunter Rifle Ammunition (free)"
+ 	desc = "Позволяет трансмутировать 3 баллистические гильзы (использованные или неиспользованные) любого калибра, \
+ 		включая дробь, со шкурой любого животного, чтобы создать дополнительную обойму боеприпасов для винтовки Lionhunter."
+ 	gain_text = "К оружию прилагались три грубых железных шара, предназначенных для использования в качестве боеприпасов. \
+ 		Они были очень эффективны для простого железа, но быстро расходовались. Вскоре они у меня закончились. \
+ 		Никакие запасные боеприпасы не помогали. Винтовка была своеобразна в том, чего она хотела."
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/magic/flesh_ascension.dm
++<<<<<<< HEAD
 +	invocation = "REALITAS EXSERPAT!!"
++=======
+ 	invocation = "РЕАЛЬНОСТЬ РАЗРУШЬСЯ!"
++>>>>>>> origin/translate
  • code/modules/bitrunning/objects/netpod.dm
  • code/modules/bitrunning/server/_parent.dm
++<<<<<<< HEAD
 +		. += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
 +		upgraded = TRUE
 +
 +	if(servo_bonus > 0.2)
 +		. += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.")
 +		. += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.")
 +		upgraded = TRUE
 +
 +	if(!upgraded)
 +		. += span_notice("Its output is suboptimal. Improved components will grant domain information, reduce cooldowns and increase rewards.")
++=======
+ 		. += span_infoplain("- Вместимость охладителя уменьшает время задержки на [(1 - capacitor_coefficient) * 100]%.")
+ 
+ 	if(servo_bonus > 0.2)
+ 		. += span_infoplain("- Потенциал манипуляторов увеличивает награду на [servo_bonus]x.")
+ 		. += span_infoplain("- Повреждения, получаемые при небезопасном выходе, уменьшены на [servo_bonus * 100]%.")
++>>>>>>> origin/translate
  • code/modules/bitrunning/virtual_domain/domains/pirates.dm
++<<<<<<< HEAD
 +	name = "Corsair Cove"
 +	announce_to_ghosts = TRUE
++=======
+ 	name = "Бухта корсаров"
++>>>>>>> origin/translate
  • code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm
++<<<<<<< HEAD
 +	name = "Syndicate Assault"
 +	announce_to_ghosts = TRUE
++=======
+ 	name = "Нападение Синдиката"
++>>>>>>> origin/translate
  • code/modules/client/preferences/clothing.dm
++<<<<<<< HEAD
 +	priority = PREFERENCE_PRIORITY_BODY_TYPE
 +	main_feature_name = "Jumpsuit"
++=======
+ 	main_feature_name = "Комбинезон"
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	priority = PREFERENCE_PRIORITY_BODY_TYPE
 +	main_feature_name = "Undershirt"
++=======
+ 	main_feature_name = "Одежда"
++>>>>>>> origin/translate
  • code/modules/experisci/experiment/types/scanning_fish.dm
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 2"
 +	description = "An experiment requiring more fish species to be scanned to unlock the 'Chasm' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (2)"
+ 	description = "Эксперимент, требующий отсканировать больше видов рыб, чтобы разблокировать настройку \"Бездна\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 3"
 +	description = "An experiment requiring even more fish species to be scanned to unlock the 'Ocean' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (3)"
+ 	description = "Эксперимент, требующий отсканировать еще больше видов рыб, чтобы разблокировать настройку \"Океан\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Holographic Fish Scanning Experiment"
 +	description = "This one actually requires holographic fish to unlock the 'Randomizer' setting for the fishing portal."
 +	performance_hint = "Load in the 'Beach' template at the Holodeck to fish some holo-fish."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS )
++=======
+ 	name = "Эксперимент по скану голорыбы"
+ 	description = "Чтобы разблокировать настройку \"Рандомизатор\" для рыболовного портала, потребуется голографическая рыба."
+ 	performance_hint = "Загрузите шаблон \"Пляж\" на Голодэке, чтобы половить голорыбу."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 4"
 +	description = "An experiment requiring lotsa fish species to unlock the 'Hyperspace' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (4)"
+ 	description = "Эксперимент, требующий много видов рыб, чтобы разблокировать настройку \"Гиперпространство\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 3250)
++>>>>>>> origin/translate
  • code/modules/experisci/experiment/types/scanning_vatgrown.dm
++<<<<<<< HEAD
 +/datum/experiment/scanning/cytology
 +	name = "Cytology Scanning Experiment"
 +	exp_tag = "Cytology Scan"
++=======
+ /datum/experiment/scanning/random/cytology
+ 	name = "Эксперемент по скану цитологии"
+ 	description = "Базовый эксперимент для сканирования атомов, выращенных в чашке петри."
+ 	exp_tag = "Скан цитологии"
+ 	total_requirement = 1
+ 	possible_types = list(/mob/living/basic/slime)
+ 	traits = EXPERIMENT_TRAIT_DESTRUCTIVE
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +/datum/experiment/scanning/cytology/serialize_progress_stage(atom/target, list/seen_instances)
 +	return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", seen_instances.len, required_atoms[target])
 +
 +/datum/experiment/scanning/cytology/slime
 +	name = "Vat-Grown Slime Scan"
 +	description = "Seen the slimes in the xenobiology pens? They spawned when our researchers donked a moldy bread slice into the vat. Cultivate another one and report the results."
 +	performance_hint = "Swab the slime cell lines from a moldy bread or take a biopsy sample of existing slime. And grow it in the vat."
 +	required_atoms = list(/mob/living/basic/slime = 1)
 +
 +
++=======
+ /datum/experiment/scanning/random/cytology/serialize_progress_stage(atom/target, list/seen_instances)
+ 	return EXPERIMENT_PROG_INT("Скан образцов [initial(target.name)], выращенных в лаборатории", \
+ 		traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target])
++>>>>>>> origin/translate
  • tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
++<<<<<<< HEAD
 +    <Section title="Research Tree" fill scrollable>
 +      <Box textAlign="center" fontSize="32px">
 +        <span style={hereticYellow}>DAWN</span>
 +      </Box>
 +      <Stack vertical>
 +        {knowledge_tiers.length === 0
 +          ? 'None!'
 +          : knowledge_tiers.map((tier, i) => (
 +              <Stack.Item key={i}>
 +                <Flex
 +                  justify="center"
 +                  align="center"
 +                  backgroundColor="transparent"
 +                  wrap="wrap"
 +                >
 +                  {tier.nodes.map((node) => (
 +                    <Flex.Item key={node.name}>
 +                      <Button
 +                        color="transparent"
 +                        tooltip={`${node.name}:
 +                          ${node.desc}`}
 +                        onClick={
 +                          node.disabled || node.finished
 +                            ? undefined
 +                            : () => act('research', { path: node.path })
 +                        }
 +                        width={node.ascension ? '192px' : '64px'}
 +                        height={node.ascension ? '192px' : '64px'}
 +                        m="8px"
 +                        style={{
 +                          borderRadius: '50%',
 +                        }}
 +                      >
 +                        <DmIcon
 +                          icon="icons/ui_icons/antags/heretic/knowledge.dmi"
 +                          icon_state={
 +                            node.disabled
 +                              ? 'node_locked'
 +                              : node.finished
 +                                ? 'node_finished'
 +                                : node.bgr
 +                          }
 +                          height={node.ascension ? '192px' : '64px'}
 +                          width={node.ascension ? '192px' : '64px'}
 +                          top="0px"
 +                          left="0px"
 +                          position="absolute"
 +                        />
 +                        <DmIcon
 +                          icon={node.icon_params.icon}
 +                          icon_state={node.icon_params.state}
 +                          frame={node.icon_params.frame}
 +                          direction={node.icon_params.dir}
 +                          movement={node.icon_params.moving}
 +                          height={node.ascension ? '152px' : '64px'}
 +                          width={node.ascension ? '152px' : '64px'}
 +                          top={node.ascension ? '20px' : '0px'}
 +                          left={node.ascension ? '20px' : '0px'}
 +                          position="absolute"
 +                        />
 +                        <Box
 +                          position="absolute"
 +                          top="0px"
 +                          left="0px"
 +                          backgroundColor="black"
 +                          textColor="white"
 +                          bold
 +                        >
 +                          {!node.finished &&
 +                            (node.cost > 0 ? node.cost : 'FREE')}
 +                        </Box>
 +                      </Button>
 +                      {!!node.ascension && (
 +                        <Box textAlign="center" fontSize="32px">
 +                          <span style={hereticPurple}>DUSK</span>
 +                        </Box>
 +                      )}
 +                    </Flex.Item>
 +                  ))}
 +                </Flex>
 +                <hr />
 +              </Stack.Item>
 +            ))}
 +      </Stack>
 +    </Section>
++=======
+     <Stack.Item grow>
+       <Section title="Изученные знания" fill scrollable>
+         <Stack vertical>
+           {(!learnedKnowledge.length && 'Пусто!') ||
+             learnedKnowledge.map((learned) => (
+               <Stack.Item key={learned.name}>
+                 <Button
+                   width="100%"
+                   color={learned.color}
+                   content={`${learned.hereticPath} - ${learned.name}`}
+                   tooltip={learned.desc}
+                 />
+               </Stack.Item>
+             ))}
+         </Stack>
+       </Section>
+     </Stack.Item>
+   );
+ };
+ 
+ const KnowledgeShop = (props) => {
+   const { data, act } = useBackend<KnowledgeInfo>();
+   const { learnableKnowledge } = data;
+ 
+   return (
+     <Stack.Item grow>
+       <Section title="Возможные знания" fill scrollable>
+         {(!learnableKnowledge.length && 'Пусто!') ||
+           learnableKnowledge.map((toLearn) => (
+             <Stack.Item key={toLearn.name} mb={1}>
+               <Button
+                 width="100%"
+                 color={toLearn.color}
+                 disabled={toLearn.disabled}
+                 content={`${toLearn.hereticPath} - ${
+                   toLearn.cost > 0
+                     ? `${toLearn.name}: ${toLearn.cost}
+                   очко${toLearn.cost !== 1 ? 'в' : ''}`
+                     : toLearn.name
+                 }`}
+                 tooltip={toLearn.desc}
+                 onClick={() => act('research', { path: toLearn.path })}
+               />
+               {!!toLearn.gainFlavor && (
+                 <BlockQuote>
+                   <i>{toLearn.gainFlavor}</i>
+                 </BlockQuote>
+               )}
+             </Stack.Item>
+           ))}
+       </Section>
+     </Stack.Item>
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +        <KnowledgeTree />
++=======
+         <Stack vertical height="100%">
+           <Stack.Item fontSize="20px" textAlign="center">
+             Доступные <span style={hereticBlue}>очки знаний</span> :{' '}
+             <b>{charges || 0}</b>&nbsp;.
+           </Stack.Item>
+           <Stack.Item grow>
+             <Stack height="100%">
+               <ResearchedKnowledge />
+               <KnowledgeShop />
+             </Stack>
+           </Stack.Item>
+         </Stack>
++>>>>>>> origin/translate
  • tgui/packages/tgui/interfaces/QuantumConsole.tsx
++<<<<<<< HEAD
 +                disabled={!ready || !generated_domain}
 +                onClick={() => act('stop_domain')}
 +                tooltip="Begins shutdown. Will notify anyone connected."
 +              >
 +                Stop Domain
 +              </Button.Confirm>
++=======
+                 content="Остановить домен"
+                 disabled={!ready || !generated_domain}
+                 onClick={() => act('stop_domain')}
+                 tooltip="Начинает отключение. Уведомит всех подключенных."
+               />
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +          {!!is_modular && ' (Modular)'}
 +          {!!has_secondary_objectives && ' (Secondary Objective Available)'}
 +          {!!announce_ghosts && ' (Ghost Interaction)'}
++=======
+           {!!is_modular && ' (Модульное)'}
+           {!!has_secondary_objectives && ' (Доступны дополнительные задачи)'}
++>>>>>>> origin/translate

1 similar comment
Copy link

github-actions bot commented Jul 9, 2024

This pr causes following conflicts on translate branch:

  • code/datums/mutations/speech.dm
++<<<<<<< HEAD
 +	text_gain_indication = span_notice("You feel Swedish, however that works.")
 +	text_lose_indication = span_notice("The feeling of Swedishness passes.")
 +	var/static/list/language_mutilation = list("w" = "v", "j" = "y", "bo" = "bjo", "a" = list("å","ä","æ","a"), "o" = list("ö","ø","o"))
++=======
+ 	text_gain_indication = span_notice("Ты ощущаешь себя шведом, что бы это ни значило.")
+ 	text_lose_indication = span_notice("Ты перестаешь ощущать себя шведом.")
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	text_gain_indication = span_notice("You feel...totally chill, man!")
 +	text_lose_indication = span_notice("You feel like you have a better sense of time.")
++=======
+ 	locked = TRUE
+ 	text_gain_indication = span_notice("Ты чувствуешь себя...максимально расслабленным, чувак!")
+ 	text_lose_indication = span_notice("Ты чувствуешь, что твоё восприятие времени стало лучше.")
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/items/keyring.dm
++<<<<<<< HEAD
 +		to_chat(user, span_notice("You use [src], to link [reference_resolved] and [target] together."))
++=======
+ 		to_chat(user, span_notice("Используя [src], вы соединяете [link] с [target]."))
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/knowledge/side_blade_rust.dm
++<<<<<<< HEAD
 +	name = "Lionhunter Rifle Ammunition"
 +	desc = "Allows you to transmute 3 ballistic ammo casings (used or unused) of any caliber, \
 +		including shotgun shot, with any animal hide to create an extra clip of ammunition for the Lionhunter Rifle."
 +	gain_text = "The weapon came with three rough iron balls, intended to be used as ammunition. \
 +		They were very effective, for simple iron, but used up quickly. I soon ran out. \
 +		No replacement munitions worked in their stead. It was peculiar in what it wanted."
++=======
+ 	name = "Lionhunter Rifle Ammunition (free)"
+ 	desc = "Позволяет трансмутировать 3 баллистические гильзы (использованные или неиспользованные) любого калибра, \
+ 		включая дробь, со шкурой любого животного, чтобы создать дополнительную обойму боеприпасов для винтовки Lionhunter."
+ 	gain_text = "К оружию прилагались три грубых железных шара, предназначенных для использования в качестве боеприпасов. \
+ 		Они были очень эффективны для простого железа, но быстро расходовались. Вскоре они у меня закончились. \
+ 		Никакие запасные боеприпасы не помогали. Винтовка была своеобразна в том, чего она хотела."
++>>>>>>> origin/translate
  • code/modules/antagonists/heretic/magic/flesh_ascension.dm
++<<<<<<< HEAD
 +	invocation = "REALITAS EXSERPAT!!"
++=======
+ 	invocation = "РЕАЛЬНОСТЬ РАЗРУШЬСЯ!"
++>>>>>>> origin/translate
  • code/modules/bitrunning/objects/netpod.dm
  • code/modules/bitrunning/server/_parent.dm
++<<<<<<< HEAD
 +		. += span_infoplain("- Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.")
 +		upgraded = TRUE
 +
 +	if(servo_bonus > 0.2)
 +		. += span_infoplain("- Its manipulation potential is increasing rewards by [servo_bonus]x.")
 +		. += span_infoplain("- Injury from unsafe ejection reduced [servo_bonus * 100]%.")
 +		upgraded = TRUE
 +
 +	if(!upgraded)
 +		. += span_notice("Its output is suboptimal. Improved components will grant domain information, reduce cooldowns and increase rewards.")
++=======
+ 		. += span_infoplain("- Вместимость охладителя уменьшает время задержки на [(1 - capacitor_coefficient) * 100]%.")
+ 
+ 	if(servo_bonus > 0.2)
+ 		. += span_infoplain("- Потенциал манипуляторов увеличивает награду на [servo_bonus]x.")
+ 		. += span_infoplain("- Повреждения, получаемые при небезопасном выходе, уменьшены на [servo_bonus * 100]%.")
++>>>>>>> origin/translate
  • code/modules/bitrunning/virtual_domain/domains/pirates.dm
++<<<<<<< HEAD
 +	name = "Corsair Cove"
 +	announce_to_ghosts = TRUE
++=======
+ 	name = "Бухта корсаров"
++>>>>>>> origin/translate
  • code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm
++<<<<<<< HEAD
 +	name = "Syndicate Assault"
 +	announce_to_ghosts = TRUE
++=======
+ 	name = "Нападение Синдиката"
++>>>>>>> origin/translate
  • code/modules/client/preferences/clothing.dm
++<<<<<<< HEAD
 +	priority = PREFERENCE_PRIORITY_BODY_TYPE
 +	main_feature_name = "Jumpsuit"
++=======
+ 	main_feature_name = "Комбинезон"
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	priority = PREFERENCE_PRIORITY_BODY_TYPE
 +	main_feature_name = "Undershirt"
++=======
+ 	main_feature_name = "Одежда"
++>>>>>>> origin/translate
  • code/modules/experisci/experiment/types/scanning_fish.dm
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 2"
 +	description = "An experiment requiring more fish species to be scanned to unlock the 'Chasm' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (2)"
+ 	description = "Эксперимент, требующий отсканировать больше видов рыб, чтобы разблокировать настройку \"Бездна\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 3"
 +	description = "An experiment requiring even more fish species to be scanned to unlock the 'Ocean' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (3)"
+ 	description = "Эксперимент, требующий отсканировать еще больше видов рыб, чтобы разблокировать настройку \"Океан\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Holographic Fish Scanning Experiment"
 +	description = "This one actually requires holographic fish to unlock the 'Randomizer' setting for the fishing portal."
 +	performance_hint = "Load in the 'Beach' template at the Holodeck to fish some holo-fish."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS )
++=======
+ 	name = "Эксперимент по скану голорыбы"
+ 	description = "Чтобы разблокировать настройку \"Рандомизатор\" для рыболовного портала, потребуется голографическая рыба."
+ 	performance_hint = "Загрузите шаблон \"Пляж\" на Голодэке, чтобы половить голорыбу."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 500)
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +	name = "Fish Scanning Experiment 4"
 +	description = "An experiment requiring lotsa fish species to unlock the 'Hyperspace' setting for the fishing portal."
 +	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS )
++=======
+ 	name = "Эксперимент по скану рыбы (4)"
+ 	description = "Эксперимент, требующий много видов рыб, чтобы разблокировать настройку \"Гиперпространство\" для рыболовного портала."
+ 	points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 3250)
++>>>>>>> origin/translate
  • code/modules/experisci/experiment/types/scanning_vatgrown.dm
++<<<<<<< HEAD
 +/datum/experiment/scanning/cytology
 +	name = "Cytology Scanning Experiment"
 +	exp_tag = "Cytology Scan"
++=======
+ /datum/experiment/scanning/random/cytology
+ 	name = "Эксперемент по скану цитологии"
+ 	description = "Базовый эксперимент для сканирования атомов, выращенных в чашке петри."
+ 	exp_tag = "Скан цитологии"
+ 	total_requirement = 1
+ 	possible_types = list(/mob/living/basic/slime)
+ 	traits = EXPERIMENT_TRAIT_DESTRUCTIVE
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +/datum/experiment/scanning/cytology/serialize_progress_stage(atom/target, list/seen_instances)
 +	return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", seen_instances.len, required_atoms[target])
 +
 +/datum/experiment/scanning/cytology/slime
 +	name = "Vat-Grown Slime Scan"
 +	description = "Seen the slimes in the xenobiology pens? They spawned when our researchers donked a moldy bread slice into the vat. Cultivate another one and report the results."
 +	performance_hint = "Swab the slime cell lines from a moldy bread or take a biopsy sample of existing slime. And grow it in the vat."
 +	required_atoms = list(/mob/living/basic/slime = 1)
 +
 +
++=======
+ /datum/experiment/scanning/random/cytology/serialize_progress_stage(atom/target, list/seen_instances)
+ 	return EXPERIMENT_PROG_INT("Скан образцов [initial(target.name)], выращенных в лаборатории", \
+ 		traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target])
++>>>>>>> origin/translate
  • tgui/packages/tgui/interfaces/AntagInfoHeretic.tsx
++<<<<<<< HEAD
 +    <Section title="Research Tree" fill scrollable>
 +      <Box textAlign="center" fontSize="32px">
 +        <span style={hereticYellow}>DAWN</span>
 +      </Box>
 +      <Stack vertical>
 +        {knowledge_tiers.length === 0
 +          ? 'None!'
 +          : knowledge_tiers.map((tier, i) => (
 +              <Stack.Item key={i}>
 +                <Flex
 +                  justify="center"
 +                  align="center"
 +                  backgroundColor="transparent"
 +                  wrap="wrap"
 +                >
 +                  {tier.nodes.map((node) => (
 +                    <Flex.Item key={node.name}>
 +                      <Button
 +                        color="transparent"
 +                        tooltip={`${node.name}:
 +                          ${node.desc}`}
 +                        onClick={
 +                          node.disabled || node.finished
 +                            ? undefined
 +                            : () => act('research', { path: node.path })
 +                        }
 +                        width={node.ascension ? '192px' : '64px'}
 +                        height={node.ascension ? '192px' : '64px'}
 +                        m="8px"
 +                        style={{
 +                          borderRadius: '50%',
 +                        }}
 +                      >
 +                        <DmIcon
 +                          icon="icons/ui_icons/antags/heretic/knowledge.dmi"
 +                          icon_state={
 +                            node.disabled
 +                              ? 'node_locked'
 +                              : node.finished
 +                                ? 'node_finished'
 +                                : node.bgr
 +                          }
 +                          height={node.ascension ? '192px' : '64px'}
 +                          width={node.ascension ? '192px' : '64px'}
 +                          top="0px"
 +                          left="0px"
 +                          position="absolute"
 +                        />
 +                        <DmIcon
 +                          icon={node.icon_params.icon}
 +                          icon_state={node.icon_params.state}
 +                          frame={node.icon_params.frame}
 +                          direction={node.icon_params.dir}
 +                          movement={node.icon_params.moving}
 +                          height={node.ascension ? '152px' : '64px'}
 +                          width={node.ascension ? '152px' : '64px'}
 +                          top={node.ascension ? '20px' : '0px'}
 +                          left={node.ascension ? '20px' : '0px'}
 +                          position="absolute"
 +                        />
 +                        <Box
 +                          position="absolute"
 +                          top="0px"
 +                          left="0px"
 +                          backgroundColor="black"
 +                          textColor="white"
 +                          bold
 +                        >
 +                          {!node.finished &&
 +                            (node.cost > 0 ? node.cost : 'FREE')}
 +                        </Box>
 +                      </Button>
 +                      {!!node.ascension && (
 +                        <Box textAlign="center" fontSize="32px">
 +                          <span style={hereticPurple}>DUSK</span>
 +                        </Box>
 +                      )}
 +                    </Flex.Item>
 +                  ))}
 +                </Flex>
 +                <hr />
 +              </Stack.Item>
 +            ))}
 +      </Stack>
 +    </Section>
++=======
+     <Stack.Item grow>
+       <Section title="Изученные знания" fill scrollable>
+         <Stack vertical>
+           {(!learnedKnowledge.length && 'Пусто!') ||
+             learnedKnowledge.map((learned) => (
+               <Stack.Item key={learned.name}>
+                 <Button
+                   width="100%"
+                   color={learned.color}
+                   content={`${learned.hereticPath} - ${learned.name}`}
+                   tooltip={learned.desc}
+                 />
+               </Stack.Item>
+             ))}
+         </Stack>
+       </Section>
+     </Stack.Item>
+   );
+ };
+ 
+ const KnowledgeShop = (props) => {
+   const { data, act } = useBackend<KnowledgeInfo>();
+   const { learnableKnowledge } = data;
+ 
+   return (
+     <Stack.Item grow>
+       <Section title="Возможные знания" fill scrollable>
+         {(!learnableKnowledge.length && 'Пусто!') ||
+           learnableKnowledge.map((toLearn) => (
+             <Stack.Item key={toLearn.name} mb={1}>
+               <Button
+                 width="100%"
+                 color={toLearn.color}
+                 disabled={toLearn.disabled}
+                 content={`${toLearn.hereticPath} - ${
+                   toLearn.cost > 0
+                     ? `${toLearn.name}: ${toLearn.cost}
+                   очко${toLearn.cost !== 1 ? 'в' : ''}`
+                     : toLearn.name
+                 }`}
+                 tooltip={toLearn.desc}
+                 onClick={() => act('research', { path: toLearn.path })}
+               />
+               {!!toLearn.gainFlavor && (
+                 <BlockQuote>
+                   <i>{toLearn.gainFlavor}</i>
+                 </BlockQuote>
+               )}
+             </Stack.Item>
+           ))}
+       </Section>
+     </Stack.Item>
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +        <KnowledgeTree />
++=======
+         <Stack vertical height="100%">
+           <Stack.Item fontSize="20px" textAlign="center">
+             Доступные <span style={hereticBlue}>очки знаний</span> :{' '}
+             <b>{charges || 0}</b>&nbsp;.
+           </Stack.Item>
+           <Stack.Item grow>
+             <Stack height="100%">
+               <ResearchedKnowledge />
+               <KnowledgeShop />
+             </Stack>
+           </Stack.Item>
+         </Stack>
++>>>>>>> origin/translate
  • tgui/packages/tgui/interfaces/QuantumConsole.tsx
++<<<<<<< HEAD
 +                disabled={!ready || !generated_domain}
 +                onClick={() => act('stop_domain')}
 +                tooltip="Begins shutdown. Will notify anyone connected."
 +              >
 +                Stop Domain
 +              </Button.Confirm>
++=======
+                 content="Остановить домен"
+                 disabled={!ready || !generated_domain}
+                 onClick={() => act('stop_domain')}
+                 tooltip="Начинает отключение. Уведомит всех подключенных."
+               />
++>>>>>>> origin/translate
++<<<<<<< HEAD
 +          {!!is_modular && ' (Modular)'}
 +          {!!has_secondary_objectives && ' (Secondary Objective Available)'}
 +          {!!announce_ghosts && ' (Ghost Interaction)'}
++=======
+           {!!is_modular && ' (Модульное)'}
+           {!!has_secondary_objectives && ' (Доступны дополнительные задачи)'}
++>>>>>>> origin/translate

@dj-34
Copy link
Collaborator

dj-34 commented Jul 9, 2024

ххахаххаха

@Gaxeer Gaxeer merged commit e7346a3 into master Jul 9, 2024
21 of 29 checks passed
@Gaxeer Gaxeer mentioned this pull request Jul 9, 2024
Gaxeer added a commit that referenced this pull request Jul 9, 2024
## About The Pull Request

Fix translate after #333
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.