forked from tgstation/tgstation
-
Notifications
You must be signed in to change notification settings - Fork 49
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
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…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:
…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:
This pr causes following conflicts on translate branch:
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< HEAD
+ invocation = "REALITAS EXSERPAT!!"
++=======
+ invocation = "РЕАЛЬНОСТЬ РАЗРУШЬСЯ!"
++>>>>>>> origin/translate
++<<<<<<< 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
++<<<<<<< HEAD
+ name = "Corsair Cove"
+ announce_to_ghosts = TRUE
++=======
+ name = "Бухта корсаров"
++>>>>>>> origin/translate
++<<<<<<< HEAD
+ name = "Syndicate Assault"
+ announce_to_ghosts = TRUE
++=======
+ name = "Нападение Синдиката"
++>>>>>>> origin/translate
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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> .
+ </Stack.Item>
+ <Stack.Item grow>
+ <Stack height="100%">
+ <ResearchedKnowledge />
+ <KnowledgeShop />
+ </Stack>
+ </Stack.Item>
+ </Stack>
++>>>>>>> origin/translate
++<<<<<<< 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
This pr causes following conflicts on translate branch:
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< HEAD
+ invocation = "REALITAS EXSERPAT!!"
++=======
+ invocation = "РЕАЛЬНОСТЬ РАЗРУШЬСЯ!"
++>>>>>>> origin/translate
++<<<<<<< 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
++<<<<<<< HEAD
+ name = "Corsair Cove"
+ announce_to_ghosts = TRUE
++=======
+ name = "Бухта корсаров"
++>>>>>>> origin/translate
++<<<<<<< HEAD
+ name = "Syndicate Assault"
+ announce_to_ghosts = TRUE
++=======
+ name = "Нападение Синдиката"
++>>>>>>> origin/translate
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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
++<<<<<<< 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> .
+ </Stack.Item>
+ <Stack.Item grow>
+ <Stack height="100%">
+ <ResearchedKnowledge />
+ <KnowledgeShop />
+ </Stack>
+ </Stack.Item>
+ </Stack>
++>>>>>>> origin/translate
++<<<<<<< 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
|
ххахаххаха |
PhantornRU
approved these changes
Jul 9, 2024
dj-34
approved these changes
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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
About The Pull Request
Merge upstream [09.07.2024]