mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
master
400
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
cc3348551b |
botanic trays transfer soil properly again (#96435)
## About The Pull Request After #96352 got merged, the actual interaction for dumping a bag of soil/vermaculite/etc. into a hydroponics tray broke because the current_soil (and subsequently soil flags) weren't being transferred properly. This fixes that by adjusting transfer_soil() to return the placed/moved soil, allowing us to grab the soil flags and whatnot. ## Why It's Good For The Game I think dumping soil into the tray should probably work right. ## Changelog 96352 didn't have a changelog so maybe this one shouldn't either. --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
61f9d011bf |
"Conserved Genetics" - A trait to prevent cross-pollination instability change in plants with the gene. (#96402)
## About The Pull Request Cross-pollination has a lot of potential for fun, but the aspect of instability loss and gain in plants makes me experience great suffering. Therefore, it has been suggested that I can get rid of this great pain by just preventing it with a plant trait! Magnificent! Grass was chosen to receive this trait because of its.. _checks notes_ "[remarkable conservation of gene content and gene order](https://pmc.ncbi.nlm.nih.gov/articles/PMC33824/)"! How wonderful! I hope I'm interpreting that correctly! ## Why It's Good For The Game The trait allows for botanists to achieve a finer control over which plants are altered during cross-pollination, preventing undesired instability loss or gain. With this, the experience of setting up trays next to each other comes with fewer pains, and enables more sophisticated cross-poll. setups as one wishes, preventing undesired mutations or reagent changes. ## Changelog 🆑 add: Adds "Conserved Genetics", a plant trait which prevents the plant from having its instability be altered by cross-pollination. /🆑 |
||
|
|
e1c581e13a |
Post-merge code cleanup for botanic trays (#96352)
## About The Pull Request Melbert has tasked me to handle fixing and cleaning up a few things from #96236 after I merged it before they could review it a second time, plus a few things I've noticed on my own (changing the name and desc is best handled by the update_name and update_desc proc respectively, and soil shouldn't process while inside trays). |
||
|
|
606ec48bd7 |
Botanic trays: the hydroponics without hydro! (soil but better) (#96236)
## About The Pull Request 🚨THIS IS AN ADVANCED VERSION OF #96227 WITH NEW FEATURES, CLOSE #96227 IF THIS IS MERGED 🚨 this pr adds botanic trays - you can get one by filling an empty hydroponic tray with any soil! the botanic tray acts like a pile of soil but it can be upgraded, has auto-grow and indicators. once you fill the tray there is no way back - it becomes botanic permanently (until you deconstruct it) <details> <summary> Sprites </summary> <img width="856" height="846" alt="image" src="https://github.com/user-attachments/assets/ca9e2a55-ba29-4d08-80e7-aa79e73bb79f" /> <img width="825" height="285" alt="image" src="https://github.com/user-attachments/assets/815e93c2-47cd-4540-86ae-0d2bd8efd325" /> Default on the left, reskin on the right sprites made by me (trays from #96227 made by kreks) (also works with old-designed tray mode) see #96227 for tray resprite old/new </details> ## Why It's Good For The Game soil is boring and almost no one uses it emissive is cool you can now see the type of soil in your tray even when the auto-growth is on ## Changelog 🆑 add: added botanic trays - hydroponic trays with soil instead of water, just fill a tray with any soil and done! image: resprited auto-growth mode and added emissives to it image: resprited hydroponic trays add: added old-designed mode for hydroponic trays - use a screwdriver or a plant analyzer on the circuit! image: added emissives to hydroponic tray indicators /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
1ba0d95d6f |
Plants no longer have pollen particles when they've died. (#96139)
## About The Pull Request Plants, after they have died, do not actively pollenate their neighbors in gameplay. However, they do still have pollen particles. This is definitely a visual oversight, and an easy fix. Now, after a planet calls `plantdies`, we remove it's pollen particles. ## Why It's Good For The Game Improves the visual consistency of hydroponics and better communicates when the mechanic is working as intended. ## Changelog 🆑 fix: Hydroponics trays will no longer produce pollen particles if the plant in the tray has died. /🆑 |
||
|
|
940d91bb62 |
[MDB IGNORE] Adds new features and tiles for lavaland biomes (#95955)
## About The Pull Request Adds new floor types and natural decor to both Siderite and Shale biomes, as well as makes flora and fauna spawns differ between said biomes. <img width="1216" height="997" alt="dreamseeker_uIv1OgVkpD" src="https://github.com/user-attachments/assets/327d9caa-a58c-4d70-acbe-477da69b4d71" /> --- Basalt biome now spawns more legions and goliaths, but less watchers and no brimdemons. You can rarely find new volcanic pore rocks which will spew out lava when destroyed. <img width="505" height="361" alt="dreamseeker_TA9rXzOgad" src="https://github.com/user-attachments/assets/fb19a60a-c927-441b-abad-161ce5022a60" /> Siderite biome has a lot of rock formations and may sometimes spawn new stalagmites. You can expect to see a ton of bileworms, raptors and watchers there. <img width="747" height="613" alt="dreamseeker_uZgRX8qqh3" src="https://github.com/user-attachments/assets/d356f1c6-371a-4b8b-899b-470edb0d2790" /> Shale is full of lobstrocities, goldgrubs and brimdemons, and home to a new glowgrowth "plant" - colony of bioluminescent fungi growing on natural air vents. <img width="274" height="220" alt="dreamseeker_EtxiS4X9M7" src="https://github.com/user-attachments/assets/cbefba67-b618-4a65-ad12-9ee5182b650c" /> While it cannot be planted by itself, it contains luminescent fluid inside which will grant whoever eats it minor night vision as long as it is inside their bloodstream (as well as cyan-glowing eyes) --- Ruins now properly respect their biome's rock (and now floor as well) type, since it was broken for some of them previously. <details> <summary>More images under the dropdown</summary> <img width="1216" height="997" alt="dreamseeker_fpXXV0Rt3D" src="https://github.com/user-attachments/assets/fa790ca1-7045-490e-bcb2-c1f9da9f277c" /> <img width="414" height="303" alt="dreamseeker_l6E8S2fzCe" src="https://github.com/user-attachments/assets/8b10dcca-c546-41ce-9363-a12b0f225881" /> <img width="784" height="587" alt="dreamseeker_RUWQo0unNp" src="https://github.com/user-attachments/assets/d7364abc-ec68-4daf-b3cb-a03b8ba7e5de" /> <img width="1216" height="997" alt="dreamseeker_zoltABvkBw" src="https://github.com/user-attachments/assets/324f50f8-83c9-4451-8eff-33ebf81c1d0d" /> <img width="1125" height="571" alt="dreamseeker_ky5qvl2XtC" src="https://github.com/user-attachments/assets/ff08d22f-fc15-4961-b76e-7c10d7814096" /> </details> Credit for original versions of new flora/feature sprites to SentryPrimis on the /tg/station discord ## Why It's Good For The Game Makes biomes more distinct and interesting, as well as gives them unique atmosphere, since right now they only differ in rock type and mineral distribution. ## Changelog 🆑 SmArtKar, SentryPrimis add: Siderite and Shale lavaland biomes now have unique floors, as well as flora, features and fauna! fix: Fixed some ruins generating with default basalt walls instead of their biome's walls /🆑 |
||
|
|
4eadf5caf7 |
The big tooltype_act de-cargo-cult-ing (#95408)
## About The Pull Request Removes a lot of cargo cult copypasta with `default_deconstruction_screwdriver`, `default_deconstruction_crowbar`, and to a lesser extent `default_pry_open` and `default_change_direction_wrench` ALL you gotta do now if you want your machine to have an openable panel or be deconstructible with a crowbar is this ```dm /obj/machinery/dish_drive/screwdriver_act(mob/living/user, obj/item/tool) return default_deconstruction_screwdriver(user, tool) /obj/machinery/dish_drive/crowbar_act(mob/living/user, obj/item/tool) return default_deconstruction_crowbar(user, tool) ``` `default_deconstruction_screwdriver` no longer directly sets `icon_state`, requiring the user pass in the open and closed icon states. Now, it just calls `update_appearance`, and everything that once passed the icon state now uses `base_icon_state` and `update_icon_state`. ## Why It's Good For The Game Many of these procs were terribly overcomplicated and difficult to work with for what should be a relatively simple action Streamlining it makes it easier for coders to understand and work with ## Changelog 🆑 Melbert refactor: A majority of machines had their screwdriver/crowbar/wrench interactions rewritten, report any oddities like being unable to open a machine's panel or deconstruct a machine /🆑 |
||
|
|
c1d19927f4 |
Hydroponics tray autogrow power use becomes more efficient with parts (#95521)
## About The Pull Request Using tgstation/tgstation#88555 as inspiration, makes it so upgrading the parts on a hydroponics tray reduces the power draw when using autogrow. Numbers now less subject to change, considering they're a bit less generous than before. Trays don't actually have passive power draw when not using autogrow, so this only affects botanists who really like CTRL-clicking their trays. | Parts Tier | Power Draw (With Autogrow) | | --- | --- | | T1 | 1 kW | | T2 | 500 W| | T3 | 333.33 W | | T4 | 250 W | ## Why It's Good For The Game Perhaps turning a handful of trays into a DIY power sink is not, in fact, the greatest of ideas. Incentivizes upgrading hydroponics trays instead of assuming the botanists are a ticking time-bomb for power issues if upgraded. (Note: botanists are probably still ticking time-bombs for other reasons.) ## Changelog 🆑 balance: Upgraded hydroponics trays now have reduced power draw with improved parts, in the wake of complaints from both engineering and botanical staff regarding exponentially increased short circuit frequency (and associated energy waste) in affected tray basins. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
38c8884d3c |
Adds a boolean type to circuits (#95487)
## About The Pull Request A substantial number of number circuit ports, input and output alike, effectively act as boolean flags. That is, they are either input ports that only care about whether the value is or is not zero, or they are output ports that can only output zero or one. This PR adds a boolean datatype, and converts all these ports to booleans. Anything can be connected to a boolean input port, effectively setting the port to the truthiness of the input. Booleans can be connected to number and signal ports, as they all use numbers as their underlying values. ## Why It's Good For The Game Having a proper boolean datatype makes the affected ports a bit more intuitive to compute with. ## Changelog 🆑 qol: Many circuit components have had ports that effectively act as boolean inputs or outputs converted into a new boolean datatype. /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> |
||
|
|
da62f88d29 |
Plant instability is not affected by instability (#95028)
## About The Pull Request Two notable changes - When states mutate due to instability, the instability stat itself is no longer affected, unless the plant is extremely unstable - Plants can no longer mutate their stats twice in one tick Minor changes - Just some minor code cleanup ## Why It's Good For The Game - Instability affecting instability is silly for two reasons: - It can create some very silly feedback loops where mutating a plant takes far longer than anticipated because it keeps nuking its own instability. - It's a "not very obvious" mechanic for newer players, leading to potential confusion where one may be doing everything correct, and yet observes the opposite result. - I don't know if this is an oversight. `hardmutate` is just `mutate` but with bigger stats, so having a rare chance of triggering both at once (leading a far greater stat jump than expected) seems wrong. I decided to axe it anyways for more smoother stat changes. - TL;DR plants can no longer lose 75 potency or 15 endurance per tick starting at 40 instab. Now 50 potency or 10 endurance. - This should lead to plants like Corn (which start at >=40 stab) being easier to grow, as they won't have a rare chance of nuking their potency or yield. https://github.com/tgstation/tgstation/blob/07bf0e493aae832369856825bdd00d7e278df467/code/modules/hydroponics/hydroponics.dm#L391-L396 ## Changelog 🆑 Melbert balance: Plant instability can no longer cause the value of the instability stat to change randomly unless instability is >=80 balance: Plants can no longer mutate their stats twice in one tick starting at 40 instability - though the degree to which stats mutate is still increased at the 40 mark, that is unchanged. /🆑 |
||
|
|
74983781a7 |
Buffs mutagen hydroponics application, adds some plant traits to interact with it (#94783)
## About The Pull Request Unstable Mutagen 1. Now consistently adds 0.1 instability per unit per tick (the same as L4Z) 2. No longer applies toxin damage directly 3. RNG roll now scales strength based on volume - 10u of mutagen = 1x effect modifier. 4. RNG instability roll now grants 2(*modifier) instability (down from 5) 5. RNG instability roll now also adds 1.5(*modifier) toxins 6. RNG instability roll now applies even if the tray is set to auto-grow 7. RNG health penalty now deals 5(*modifier) damage (down from 10) Uranium 1. Now consistently adds 0.05 instability per unit per tick (half as powerful as L4Z) 2. Now adds `0.5 * volume * toxpower` toxins, rather than `volume / toxpower` 3. No longer damages plant health directly 4. Has the same changes as Unstable Mutagen wrt RNG rolls New genes - Adds `Toxin Resistance`, which grants the plant immunity to health damage from high toxins in the tray. - Available in Death Berries, for which it is now their graft gene. - Adds `Toxin Adaptation`, which not only grants the plant immunity to health damage - Not available naturally (yet?), must be mutated (or found in strange seeds) Other Cleaned up a smidge of botany code while working in the area ## Why It's Good For The Game Unstable Mutagen is... ok. It's perfectly usable, but it requires a lot of work for something that you don't have easy access to. Best case it's only slightly (1.25x) better than L4Z alone. Gurus will make a mixture of L4Z, mutagen, and cryoxadone or multiver for maximum mutation speed, which is cool, but a little cheesy. As a consequence, Mutagen is USUALLY only used 1. as a noob trap and 2. to get Kudzu or spiders This makes me sad considering how it used to have legendary status for botany. So I kinda wanted to bring it back. The flat scaling makes it worst case AS GOOD AS L4Z. You are rewarded for getting something besides vendor chems. The RNG roll changes give it a bit of a boost, so it becomes "L4Z+ but with a minor downside". It also removes the cheese aspect, which I admit is kinda sad. Green = Mutagen Purple = l4z p = probability of RNG instability v = volume y = instability x = ticks <img width="1505" height="721" alt="image" src="https://github.com/user-attachments/assets/ea67d198-ea4f-44a7-9798-7d1bf0f3ef8b" /> 20u mutagen = 17 ticks for 100 instability + 25 toxins 20u l4z = 25ticks for 100 instability + 0 toxins Speed scales faster (1.25x faster at 10u, 1.5x faster at 20u, 1.75x faster at 30u) - but so does toxin accumulation TL;DR more mutagen = more mutation = more toxin Now you're wondering "Okay where does the gene changes come into play" Well I'm a big fan of fertilizers that require you use *botany* knowledge, not chem knowledge, *botany* knowledge to maximize their potential. For example, using Weed Adaptation for consequence-free Liquid Earthquake. I wanted do to that here, so I added these two genes that allow you to get no penalties for tray toxins, allowing "unchecked" use of mutagen (and such) for a clever botanist. ## Changelog 🆑 Melbert balance: Rebalanced Unstable Mutagen's / Uranium's botany use. It now always increases instability (on par with L4Z), and occasionally increases instability even more at the costs of some toxins. It also scales with volume add: Adds "Toxin Resistance" gene to botany which makes the plant immune to toxin damage. Given (and graftable from) Death Berries. add: Adds "Toxin Adaptation" gene to botany which makes the plant heal from toxin damage. Only in strange seeds (for now). code: Cleaned up a smidge of botany code /🆑 |
||
|
|
68153c2333 | Refactors faction lists to use getters and setters and be cached (#94490) | ||
|
|
3c5749f862 |
General maintenance for plumbing (#94427)
## About The Pull Request The overall behaviour of everything should stay the same but the memory & speed of these components has been slightly improved and when you scale that across large plumbing factories you get a substantial improvement. Here's a list of the most noticeable changes along with many others that aren't worth mentioning - Removed vars `use_overlays`, `turn_connects`, `recipient_reagents_holder` - `active` var is now replaced with a proc which simply returns is the machine wrenched or not - `turn_connects` has been removed because all machines have their pipes rotate when the machine is rotated. This also removed all the static icon states ending with `-s` from the `dmi` file thus reducing that file size as well - `extend_pipe_to_edge` var is directly integrated into `cut_overlays()` because it's use cases were limited such for showers & sinks - Simplified `Initialize()` a lot. Removed params `start`, `turn_connects`, `custom_receiver`, `extend_pipe_to_edge`. We now only pass `bolt_layer` making that proc faster & less convoluted - Replaced `set_recipient_reagents_holder()` proc with `recipient_reagents_holder()` which returns the reagent holder for holding reagents instead of storing it in the component. This removes the need to hook a qdel signal on the holder & we don't need to keep track of it - Merged a ton of procs to reduce overhead & reduce file size - Plumbing ducts creating the network at mapload is faster without using recursion and the timer subsystem - Deconstructing plumbing ducts is faster in reconstructing the network without using recursion and the timer subsystem This makes managing plumbing code less convoluted & overall better for the foreseeable future. See the lines of code removed vs added and still preserves behaviour ## Changelog 🆑 qol: added examines & screentips for ducts & stack of ducts qol: you can wrench a stack of ducts on the ground to create a pipe refactor: plumbing code has been improved overall. Report bugs on github sprite: removed unused static(does not rotate with machine) icon states for plumbing connections /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
0190e64654 |
Converts simple rotation into a bespoke element (#94582)
## About The Pull Request <img width="579" height="67" alt="image" src="https://github.com/user-attachments/assets/d7a4427e-2a6e-44d3-94ba-c90a2d474984" /> Simple rotation components number in the 8-9k range per round, and each contains a needless callback datum as well. These do not need to hold any state and can be bespoke elements, and the proc to do things post_rotation can just be a normal atom proc. <details><summary>Still works as you'd expect, including items that have flag requirements like the wrench</summary>   </details> ## Why It's Good For The Game Makes a heavily used element much more lightweight, saves a few mb of memory. ## Changelog 🆑 refactor: simple rotation component has been refactored into an element Please report any bugs to github. /🆑 |
||
|
|
7754938c72 |
Makes a bunch of lists lazy (#94239)
## About The Pull Request Empy lists. There are a lot of 'em. <img width="981" height="512" alt="image" src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e" /> Going through ways to reduce memory I found a few easy ones here. Wires, the edible component, the seethrough component. None of these are really a concern when it comes to needing lists in memory for performance reasons. Wires aren't going to be cut most of the time for each door. A lot of food does not have any junkiness. Seethrough component lies dormant most of the round. Etc. Making lists lazy in these cases should be a no brainer. Everything I tested still seems to work exactly the same. ## Why It's Good For The Game Frees memory that is just taking up space a lot of the time. ## Changelog Not player-facing, this is all under-the-hood stuff. |
||
|
|
348789fa8d |
The Renamening- upgrades UNIQUE_RENAME and moves a lot of renaming implementations under it (#93115)
## About The Pull Request Moves a lot of the unique renaming implementations described in #82664 to the functions given by the `obj_flag` `UNIQUE_RENAME`. `UNIQUE_RENAME` has been given new properties to account for non-standard renaming, these being the `RENAME_NO_DESC` flag that prevents changing the description, the `nameformat()` and `descformat()` procs that, when modified, allow for applying naming formats(i.e. "Body Bag - [input]"), as well as other post-renaming handling such as changing the name of the output plant of a renamed seed, the `rename_checks()` proc that allows for unique naming prevention(such as a locked personal closet), and the `rename_reset()` proc to clean up other possible renamed variables potentially changed in `nameformat()` and `descformat()`. This also adds `/datum/element/tool_renaming` to crayons, which will let them rename anything that has `UNIQUE_RENAME`. I looked through everything with that flag, and I didn't see anything that I don't think should be renameable by a crayon(except things that shouldn't be renamable with pens), so it shouldn't fuck anything up. ## Why It's Good For The Game moves all of the non-honorable mentions in #82664 to the same renaming system, and also moves all of the honorable mentions save for: - plaques, as they only get renamed once and wouldn't benefit from `UNIQUE_RENAME` imo - books, because they're far more than just renaming, and are persistent - paintings, because they're persistent - photos, because they're not normal renaming and they're persistent - endoskeletons, because they're done with a multitool in UI - cardboard IDs, because they're far more than just renaming Additionally, this fixes: - Implanter renaming didn't work because a ! was missing - Clown borg picket sign renaming didn't work because they didn't use the correct arguments This'll make it easier to make renameable objects in the future, as well. ## Changelog 🆑 fix: fixes implanter renaming not working fix: fixes clownborg picket sign renaming not working code: brought most unique renaming implementations under UNIQUE_RENAME /🆑 |
||
|
|
def17fd90a |
Rare Earths! Advanced soils for botany. (#92513)
## About The Pull Request This PR adds 4 new types of soil and a holder item; the soil sack, to contain and transport said soils. <img width="496" height="378" alt="bild" src="https://github.com/user-attachments/assets/57f42a9c-c731-4195-91df-b4456ec45e7b" /> Two of the new soils + the regular old soil are available in the premium section of the nutrimax. All 5 soil types are available from cargo. It also adds two new plant traits; soil lover and semiaquatic, that allows coders to confer maluses to plants growing in trays or soil respectively. Potatoes, sweet potatoes, carrots, parsnips, cahn'roots, white and red beets currently have soil lover, reducing their produced yield by 30% and their potency randomly between 20-80% if grown hydroponically. Rice has semiaquatic which increases the amount of weeds gained by 50% if grown in soil rather than hydroponically. ## Advanced soil types ### Vermaculite #### Stats Max Nutrients: 20u Max Water: 150u #### Special Effects Multigraft: Up to 3 grafts can be cut from a plant planted in vermaculite. Graft Medium: Graft cuttiongs can be directly placed into vermaculite to create a new plant vegetatively. ### Hydrogel Beads #### Stats Max Nutrients: 15u Max Water: 300u #### Special Effects Hydroponic + Soil: Both water loving and soil loving plants can grow without maluses. Super Water: Water consumption rate is decreased by 50% ### Korta Coir #### Stats Max Nutrients: 20u Max Water: 100u #### Special Effects Fast Mushrooms: Mushrooms mature(and age) 40% faster if planted in this soil. ### Worm Castings #### Stats Max Nutrients = 35u Max Water = 200u #### Special Effects Slow Release: If the nutrients run out, 1u nitrogen will be automatically added to the nutient pool. Worm Habitat: Composting veggies in this soil has a chance to produce an extra slimy worm. ### Soil Sacks Use them on the floor to place a soil at that location. You can reverse this process by right clicking a soil with a shovel. The sacks are huge items that deals stamina damage, but have slowdown when carried. They can be wielded to remove slowdown, double the damage output and gain 25% block chance. They have unique normal and wielded inhands for each sack type. #### Price List **Soil** Nutrimax: 50 cr Cargo: 400 cr / 5 sacks **Vermaculite** Nutrimax: 100 cr Cargo: 400 cr / 3 sacks **Hydrogel** Nutrimax: 100 cr Cargo: 400 cr / 3 sacks **Coir** Nutrimax: N/A Cargo: 600 cr / 3 sacks **Worm Castings** Nutrimax: N/A Cargo: 800 cr / 3 sacks #### Misc Soil Changes Soil now have a new armour type and are generally much harder to destroy by shooting or bashing them. Fixed a bug where weeds would instantly reduce yield to 3 instead of lowering it by 1-2 per cycle. ## Why It's Good For The Game I have long been a fan of using soils in botany, they are the cheapest and easiest way to make new trays and enable many interesting strategies. The default soil is fine for what is but it kinda sucks, not only having low stats but also missing autogrow, a feature botanist have grown completely addicted and dependent on. When self sustaining trays were removed and autogrow added, it was intended as a way to keep a couple of plants alive while you ran out to do errands or grab a drink. However, the feature has devolved into basically a shift start self sustaining for all your trays and standard practice is using it on every single tray that currently is not trying to mutate. This has resulted in certain core botany mechanics like water and pests being made totally irrelevant, shrinking design space a lot. Rather than just reaching for the stick, I thought it would be fun to instead offer them a carrot in the form of an expanded toolset of soils with unique effects that cannot be replicated by trays. These new soils offer niche benefits that enable advanced botany gameplay and provides a framwork for deepening plant / tray interactions in the furture. ## Changelog 🆑 add: Added 4 new types of soil add: Added soils sacks to the nutrimax add: Added soil sack crates to cargo. balance: Soil now has higher armor values. balance: Rice now gets more weeds if grown in soil. balance: Carrots, potatoes, beets and their mutations now get reduced yield and potency if grown hydroponically. fix: Weed overgrowth no longer instantly sets yield to 3. /🆑 |
||
|
|
2bcafecefb |
Fix poppy plant interaction breaking spades (#92960)
## About The Pull Request This unassuming line was added in the middle of tray attackby to allow for sharp objects to extract poppy sap https://github.com/tgstation/tgstation/blob/71c49cb4d1024515c98fe6de531620010cdf4334/code/modules/hydroponics/hydroponics.dm#L941-L945 Unfortunately, spades are sharp, and the shovel interaction followed lower in the chain. This also isn't proper use of `interact_with_atom` so we can fix two birds with one stone here. Now, poppy seeds hook the `COMSIG_ATOM_ITEM_INTERACTION` signal on the tray when planted, so we can run snowflake checks on the seed itself. ## Changelog 🆑 Melbert fix: Spades work on trays again qol: Poppy seeds now give better feedback when unable to harvest qol: Poppy seeds now have an immutable gene indicating they can be sliced for sap del: Lilys and Geraniums can no longer be tapped for sap /🆑 |
||
|
|
50499dba9a |
Adds opium and meth rocks! (#92699)
## About The Pull Request <img width="612" height="185" alt="dreamseeker_SNMvxqCRiR" src="https://github.com/user-attachments/assets/1d3103e9-edc1-4e50-8793-c8c2ace53aea" /> This is a small expansion to narcotics, their production, and presence in the game! For my esteemed Terry and Manuel/Sybil sector colleagues I've added: - 2 new solid drug items: **crystal meth and opium**! - A **precipitation reaction** for meth after it's been cooled, producing a solid crystal form, 2u sulfuric acid, 10u meth. **Above 90% purity, the meth will gain an increasingly blue tint!** - A production method for opium! Slice a well developed poppy pod with any sharp item, **before it's fully mature and flowered** to extract a small amount of opium to enjoy! It's a small container for morphine. Can be pressed together to combine the concentrations up to 10u, as each extraction contains trace amounts. Scales off poppy's potency. - Populated narcotics/contraband spawners with new items, and items that really should have been on there. - Added a brand new smoking apparatus, the glass pipe! Can be crafted. Fixed the transparent pixel. - **Fixed methsplosions so that now spacemen can finally smoke meth without exploding!!!** Omegaweed too. Normal methsplosions are untouched! - **Expanded the ability for players to insert all drug items into pipes**, so now players can smoke moon rocks, SaturnX, and my new items! Previously, only 'dried' items were. - Fentanyl patch box for narcotics spawner, also for a new ruin I've made. - **Expanded these changes to the black market uplink.** <img width="640" height="256" alt="demo" src="https://github.com/user-attachments/assets/c8a0eb2c-b0fa-4e70-b6c1-2e741cd170a2" /> Now, players can precipitate meth into a solid form, and produce opium. I added a lot of these substances and the ones that didn't exist into spawners that they were partially in, or could reasonably be in. The opium poppy extraction required a new variable that can be used for similar interactions too. Crystal sprites are transparent, smoked sprite has a nice little animation and glow. These items are now on the black market uplink, in both expensive dealer shipments of varying rarities for different narcotics, as well as personal use quantities on a different rotation, at a steeper price. Expanded randomized spawners to give the black market and ruins more teeth and edge, without adding another weapon. Credit to the moon rock guy, I'm just happy I made your stuff smokable!! <img width="219" height="201" alt="dreamseeker_N8x9bsN3kS" src="https://github.com/user-attachments/assets/64d23c27-92b9-423b-91ac-903b8476d0b4" /> tl;dr added opium and meth ## Why It's Good For The Game For **too long**, narcotics, chems and stims have been mere integers or buffs/debuffs in pills or syringes, so I introduced two new methods for making them and populated niche, criminal vectors with them. These are real items now, with more interactions. Allowing these to be smoked also allowed moon rocks and SaturnX to be smoked too, including them into this and enticing players to have another reason to make them as well. Buffs with drawbacks, addictions and problems are actually great. It's a new venue for flavor. I've put thought into the balance for addition and quantity. It'll add a criminal, or exotic tone to a round, provide new business opportunities, and new access to stims and chems without going over the top. Perhaps something peaceful antagonists can do. More proverbial floor pills give security or command something to selectively enforce, and absolutely provide novel opportunities for medical staff! Also, methsplosions now don't happen in cigarette items! You can smoke omegaweed without fucking dying! ## Changelog 🆑 add: Added meth, opium, and their production! Also added to black market uplink. add: Added a craftable glass pipe. add: Added to contraband spawners. qol: Can now insert any drug item into a pipe. fix: Spacemen can now smoke meth without exploding!! /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com> |
||
|
|
d2b92afe55 |
Plant Analyzer UX Revamp (#92667)
## About The Pull Request <img width="1300" height="706" alt="image" src="https://github.com/user-attachments/assets/c7971eab-6af3-4fea-94f5-b76104696b73" /> 1. Chems are no longer hidden in an icon's tooltip. There is a separate tab for chems. Right clicking to do a chem scan will pull up the chem tab, but you can also just use the two buttons at the top - Closes #91172 2. You no longer need to repeatedly scan a tray to update the UI. Standing adjacent to a scanned tray will update it regularly. 3. Units have been redefined from pure seconds to minutes/seconds where applicable. 4. The report has been swapped around, with tray on top and plant on bottom. 5. The nutrient bar is now colored based on contents of the tray. It no longer has a tooltip listing the tray's contents, that's now in the chemicals tab. 6. Auto-grow, pollinating, and yield modifier icons have been brought center below the tray, instead of in the top right section. They now change color to make it more apparent at a glance. 7. Traits have been moved from icons to a collapsible list at the bottom of the UI, and are now printed entirely. They still have tooltips explaining what they do. 8. Grafted gene was moved center below the plant, and is now printed entirely. 9. Mutations have been moved to a collapsible list center below the plant. 10. Plants now indicate if they are dead in the UI. 11. Scanning produce now lists all the chemicals inside it on top of all the chemicals it produces. - Closes #89443, Closes #90793 12. Restores lost behavior of seed unique data - Closes #90706 Also 13. Added Hydroponics to Runtime station 14. Added screentip for dumping reagents from hydro-trays ## Why It's Good For The Game While I was initially supportive of the move to a plant analyzer UI it was undeniable it was a huge UX stepdown from printing results to chat. This PR aims to bring back some of those lost UX features by making more information visible at a glance (instead of requiring memorization of mystery meat icons or hovering over many elements to find information hidden in tooltips) I know it's a little bit of a mess with the colors and layout, I planned on doing a whole custom css and layout and such but I kinda just wanted to get it out. ## Changelog 🆑 Melbert qol: Plant analyzer: Scanning a tray will regularly update the UI with the tray's information while you stand adjacent to it, no longer requiring you re-scan the tray to update it. qol: Plant analyzer: UI is now split between chems and stats - RMB will open directly to the chem tab. qol: Plant analyzer: UI received several UX changes - listing out more information at a glance, rather than behind tooltips or icons fix: Plant analyzer: Chem scanning plants now shows the plant's current chemical contents once again (on top of their genes) fix: Plant analyzer: Unique seed data (kudzu mutation, replica pod dna) is shown again qol: Added hydroponics to runtime station qol: Added screentip to hydroponic trays for clearing reagents /🆑 |
||
|
|
a9f9675e6b |
Replaces all public botany trays with Soil again, and removes sinks from botany/public garden (#92519)
## About The Pull Request This PR replaces all Garden trays with Soil. This PR removes all sinks from botany/garden area <img width="837" height="806" alt="image" src="https://github.com/user-attachments/assets/23325df3-4542-4d6e-9886-ff4463e3bbfd" /> <img width="1104" height="727" alt="image" src="https://github.com/user-attachments/assets/d0e6fd97-9688-4e27-bf9b-f92b77a799fb" /> <img width="787" height="658" alt="image" src="https://github.com/user-attachments/assets/11595356-ad6f-47ba-a3ca-9a0f0c90306e" /> <img width="809" height="464" alt="image" src="https://github.com/user-attachments/assets/f0c66277-7ab9-40a7-b5a7-8df4e8c452d6" /> <img width="658" height="686" alt="image" src="https://github.com/user-attachments/assets/1bddf9c2-dccd-4971-bf31-32a5673f258e" /> <img width="588" height="729" alt="image" src="https://github.com/user-attachments/assets/13534fd0-6bd1-48ab-bad4-15117cb95b31" /> ## Why It's Good For The Game Public garden always had soil as a baseline because it like a more garden feel, where hydrononics have a more industrialized feel with the trays, this is why i put soil back in all public gardens. i also removed the sinks from botany and public gardens because its a lame infinite water source why bother putting water tanks down if you put like 2-3 sinks in the same area 🆑 Ezel balance: Removes Sinks from botany/garden balance: Replaces all Garden trays with soil /🆑 |
||
|
|
750ee12f3c |
Adds Anti-Weed (#92043)
## About The Pull Request Adds Anti-Cannabis, or "Anti-Weed", a mutation of Cannabis which contains Naloxone, Antihol, and Diphen-Synaptizine These three chemicals will purge like 90% of all addictive substances and their side effects (at the cost of negative mood and some tox damage)  ## Why It's Good For The Game I thought it'd be really funny if a botanist offers you a smoke, you get super high, and then to help they offer you another smoke ## Changelog 🆑 Melbert add: Anti-cannabis mutation /🆑 |
||
|
|
613581897e |
/obj/item/clothing/head/mob_holder -> /obj/item/mob_holder (#91893)
## About The Pull Request title ## Why It's Good For The Game it inherits a lot of behavior from clothing which leads to lots of bugs when it isn't actually clothes, for example: shredded overlays. this should be better. probably fixes a bunch of bugs ## Changelog 🆑 code: mob holders are no longer subtypes of clothes, report any issues /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
6edc6d616a |
Removes un-needed calls to RefreshParts() (#91564)
|
||
|
|
5261efb67f |
Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request Melee attack chain now has a list passed along with it, `attack_modifiers`, which you can stick force modifiers to change the resulting attack This is basically a soft implementation of damage packets until a more definitive pr, but one that only applies to item attack chain, and not unarmed attacks. This change was done to facilitate a baton refactor - batons no longer hack together their own attack chain, and are now integrated straight into the real attack chain. This refactor itself was done because batons don't send any attack signals, which has been annoying in the past (for swing combat). ## Changelog 🆑 Melbert refactor: Batons have been refactored again. Baton stuns now properly count as an attack, when before it was a nothing. Report any oddities, particularly in regards to harmbatonning vs normal batonning. refactor: The method of adjusting item damage mid-attack has been refactored - some affected items include the Nullblade and knives. Report any strange happenings with damage numbers. refactor: A few objects have been moved to the new interaction chain - records consoles, mawed crucible, alien weeds and space vines, hedges, restaurant portals, and some mobs - to name a few. fix: Spears only deal bonus damage against secure lockers, not all closet types (including crates) /🆑 |
||
|
|
a708c8e8da |
snails (#90505)
## About The Pull Request adds snails to the game  these are harmless critters you can find in maints. they love eating all variety of fruits, and are gravitated towards snail people, where they'll dance around them. you can also pick them up and put them on your head. finally, you can also grab them and put them in hydrotrays (they will swim around in it very slowly). they'll help ur plants grow as they act as natural weed-repellants, as they'll eat weeds that grow in trays.  ## Why It's Good For The Game there's not that many mobs you can usually find in maints, currently there's only mice and cockroaches, this helps expand the pools a bit. ## Changelog 🆑 add: adds snails to the game. (keep them away from salt!) /🆑 |
||
|
|
339616ae78 |
You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request People can now pet held mothroaches and pugs if they want to, or use items on them, hopefully without causing many issues. After all, it only took about a couple dozen lines of code to make... ...Oh, did the 527 files changed or the 850~ lines added/removed perhaps catch your eye? Made you wonder if I accidentally pushed the wrong branch? or skewed something up big time? Well, nuh uh. I just happen to be fed up with the melee attack chain still using stringized params instead of an array/list. It was frankly revolting to see how I'd have had to otherwise call `list2params` for what I'm trying to accomplish here, and make this PR another tessera to the immense stupidity of our attack chain procs calling `params2list` over and over and over instead of just using that one call instance from `ClickOn` as an argument. It's 2025, honey, wake up! I also tried to replace some of those single letter vars/args but there are just way too many of them. ## Why It's Good For The Game Improving old code. And I want to be able to pet mobroaches while holding them too. ## Changelog 🆑 qol: You can now interact with held mobs in more ways beside wearing them. /🆑 |
||
|
|
d3d3a12540 |
The big fix for pixel_x and pixel_y use cases. (#90124)
## About The Pull Request 516 requires float layered overlays to be using pixel_w and pixel_z instead of pixel_x and pixel_y respectively, unless we want visual/layering errors. This makes sense, as w,z are for visual effects only. Sadly seems we were not entirely consistent in this, and many things seem to have been using x,y incorrectly. This hopefully fixes that, and thus also fixes layering issues. Complete 1:1 compatibility not guaranteed. I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming inside apply_overlays), and this is still included in the PR to flash out possible issues in a TM (Plus I will need someone to grep the runtimes for me after the TM period to make sure nothing was missed). After this is done I'll remove all these extra checks. Lints will probably be failing for a bit, got to wait for [this update](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d) to them to make it into release. Or just unlint the lines, though that's probably gonna produce code debt ## Why It's Good For The Game Fixes this massive 516 mess, hopefully. closes #90281 ## Changelog 🆑 refactor: Changed many of our use cases for pixel_x and pixel_y correctly into pixel_w and pixel_z, fixing layering issues in the process. /🆑 --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: SmArtKar <master.of.bagets@gmail.com> |
||
|
|
eb2796831b |
[MDB Ignore] Refactors pills, patches, and generalizes stomach contents, nothing to see here. (#89549)
## About The Pull Request Currently patches are a subtype of pills, and while they have the ``dissolveable`` var set to FALSE, barely anything checks it (because people don't expect patches to be pills in disguise) so we end up patches being dissolveable and implantable, which is far from ideal. Both have been moved into an ``/obj/item/reagent_containers/applicator`` class, which handles their common logic and helps handling cases where either one fits. As for gameplay changes: * Pills no longer dissolve instantly, instead adding their contents to your stomach after 3 seconds (by default). You can increase the timer by dropping sugar onto them to thicken their coating, 1s per 1u applied, up to a full minute. Coating can also be dissolved with water, similarly -1s per 1u applied. Pills with no coating will work like before. * Patches now only take half as long to apply (1.5s), but also slowly trickle in their reagents instead of instantly applying all of them. This is done via embedding so you could theoretically (if you get lucky) stick a ranged patch at someone, although they are rather quick to rip off. The implementation and idea itself are separate, but the idea for having a visual display has been taken from https://github.com/Monkestation/Monkestation2.0/pull/2558.  * In order to support the new pill mechanics, stomachs have received contents. Pills and items that you accidentally swallow now go into your stomach instead of your chest cavity, and may damage it if they're sharp, requiring having them surgically cut out (cut the stomach open with a scalpel, then cauterize it to mend the incision). Or maybe you can get a bacchus's blessing, or a geneticist hulk to gut punch you, that may also work. Alien devour ability also uses this system now. If you get a critical slashing wound on your chest contents of your cut apart stomach (if a surgeon forgot to mend it, or if you ate too much glass shard for breakfast) may fall out. However, spacemen with the strong stomach trait can eat as much glass cereal as they want. Pill duration can also be chosen in ChemMaster when you have a pill selected, 0 to 30 seconds.  ## Why It's Good For The Game Patches and pills are extremely similar in their implemenation, former being a worse version of sprays and pills, with only change being that pills cannot be applied through helmets while patches and sprays ignore both. This change makes them useful for separate cases, and allows reenactment of some classic... movie, scenes, with the pill change. As for stomach contents, this was probably the sanest way of implementing pill handling, and everything else (item swallowing and cutting stomachs open to remove a cyanide pill someone ate before it dissolves) kind of snowballed from there. I pray to whatever gods that are out there that this won't have some extremely absurd and cursed interactions (it probably will). ## Changelog 🆑 add: Instead of dissolving instantly, pills now activate after 4 seconds. This timer can be increased by using a dropper filled with sugar on them, 1s added per 1u dropped. add: Patches now stick to you and slowly bleed their reagents, instead of being strictly inferior to both pills and sprays. add: Items that you accidentally swallow now go into your stomach contents. refactor: Patches are no longer considered pills by the game refactor: All stomachs now have contents, instead of it being exclusive to aliens. You can cut open a stomach to empty it with a scalpel, and mend an existing incision with a cautery. /🆑 |
||
|
|
0495a19beb |
Refactor for reagent signals (#88909)
## About The Pull Request Refactors the way we listen for reagent changes. The changes made can be listed as points **1. Removes `COMSIG_REAGENTS_PRE_ADD_REAGENT`** Used to stop new reagents from being added to the holder, its only application is with the BRPED to stop inserting reagents into beakers/cells stored inside it. Rather than using this signal a cleaner solution is to simply remove the component part's reagent holders' flags which allow us to insert reagents into it(i.e. `REFILABLE`, `INJECTIBLE`, `DRAINABLE`) and restore them back when that part is removed thus achieving the same results. Thus `add_reagent()` is now slightly faster because it no longer uses this signal **2. Removes every other signal used by the reagent holder** Removes pretty much every other signal used by `holder.dm` which are `COMSIG_REAGENTS_[NEW_REAGENT, ADD_REAGENT, DEL_REAGENT, REM_REAGENT, CLEAR_REAGENTS]` While yes, it is true that all these signals are unique & serve a specific purpose the problem is no object in code respects their uniqueness & instead clumps them up all together & hooks them onto one proc to listen for "reagent changes". You see this code pattern repeated in so many places https://github.com/tgstation/tgstation/blob/9277364ef6449262e2c693ff6817925e074c47ce/code/modules/power/power_store.dm#L105 Not only does this look ugly but it also has a memory overhead (4 to 5 signal slots all performing the same action which is a lot compared to the solution i implemented below). Bonus is that "none" of the parameters passed to this proc are used so they go to waste as well. So after removing a ton of code we need something that can still make the code function which brings us to point 3 **3. Adds a new signal `COMSIG_REAGENTS_HOLDER_UPDATED` to rule them all** So if all objects in game are listening for "reagent changes"[adding/removing, reagents] then we need to look at the proc that is always called during these changes & that is none other than `update_total()` so we let that send out a signal and cause all objects to hook onto this 1 signal instead of 4 to 5 signals as explained in point 2 ## Why It's Good For The Game This section isn't necessary but i want us to better appreciate both the code & performance benifits of this PR. 1. First of all its waaaay less code and signals to worry about. Just look at the number of lines of code removed compared to added. Nothing more to say 2. Overhead of `RegisterSignal` compared to `RegisterSignals` is less for obvious reasons 3. `remove_all` is significantly faster as it no longer calls `remove_reagent()`[which in turn calls `update_total()` & `handle_reactions()` per call & uses a for loop so its a nested for loop of doom] for every reagent it removes, instead it does the work by itself & calls the above 2 procs just once 4. Usually when a reagent is deleted it calls `COMSIG_REAGENTS_REM_REAGENT` & `COMSIG_REAGENTS_DEL_REAGENT`. So if you have a holder with like 3 reagents upon transferring/deleting them you get a total of 6 signal calls!!. Now it's just 3(when using `trans_to`) and just 1 when using `remove_all/clear_reagents`. Need i say more no ## Changelog 🆑 fix: hydrophonics circuit component actually sets output level when reagents are changed in the tray refactor: refactors how code listens for reagent changes. Report bugs on github /🆑 |
||
|
|
f625b502bb |
Plant Analyzer UI (#88998)
## About The Pull Request <img alt="KvBypdgg5S" src="https://github.com/user-attachments/assets/97fc809d-f8ae-48c3-b095-8909ff9f5222" /> <img alt="XIZEXhftqE" src="https://github.com/user-attachments/assets/c769957e-94f9-41ae-9782-c685f3cf0e71" /> <img alt="mqOQUslfxP" src="https://github.com/user-attachments/assets/66397673-d5c7-447e-b994-71643f8e7fe2" /> Made the plant analyzer output the scan data into UI instead of spamming it into the chat. ## Why It's Good For The Game There is too much data to show it properly in a text chat. Botanists' chat is usually spammed with the scanning results, so it is hard to find anything in the message history unless you filter the scan data into a separate tab. The new UI also has some explanation of plant stats useful for noobs. ## Changelog 🆑 qol: Added UI for plant analyzer del: Plant analyzer no longer spams scan data into the chat (except, it still works for pod people as before) /🆑 |
||
|
|
7d9386bdce |
Turtles (#87493)
## About The Pull Request adds turtles to the game! but these aren't your typical turtles.  these are flora-turtles, with giant trees growing on their shells. These trees can emit fields which affects nearby hydroponic plants. Initially, the trees start out as young buds, from there the tree can evolve into different types depending on what you feed the turtle. Feeding them pesticides causes the tree to blossom to be purple. this tree's fields will help kill some pests and weeds in nearby plants. Feeding them nutrients gives you the green tree, the fields will heal nearby plants Feeding them mutators like uranium or left 4 zed gives you the yellow tree. the fields increase instability of plants The turtle will emit these fields every once in a while, ONLY when its feeling happy. therefore you'll have to pet it, clean it and feed it every once in a while to keep it satisfied. You can view the turtle's happiness by shift clicking it. https://github.com/user-attachments/assets/a47136a1-06a1-419e-acc2-2f6f4468e296 The turtle only eats seeds. after eating a seed, itll process it and spit out its corresponding fruit! (for example, feeding it an apple seed gives you an apple). itll also sometimes playfully headbutt your legs and it loves going around smelling the scent from nearby plants you can get these turtles by fishing the hydroponics tray or by ordering them through cargo. ## Why It's Good For The Game adds a new fun way for botanists to take care of their plants. While these turtles alone arent enough to fully replace plant dedicated nutrients, they add small extra support. ## Changelog 🆑 add: adds flora-turtles. obtainable through cargo or by fishing from the hydroponics tray /🆑 |
||
|
|
a2d463cdd8 |
Guncode Agony 4.4: Armor as an argument (#88143)
## About The Pull Request Lil cleanup/tweak I couldn't do in the main PR because it conflicted before and i forgot after. Yes this works with overrides that don't have the arg, yes I tested it. ## Why It's Good For The Game Don't run armor code thrice please thank you ## Changelog 🆑 code: Projectile impacts no longer fetch mobs' armor values thrice /🆑 |
||
|
|
742729fa0a |
Converts most common particle sources to use our new pooling system (#88048)
## About The Pull Request Closes #83370 Converted most cases where we could benefit from using shared particles (aka when there's probably more than 3 uses of that particle in a round) to use the new shared particle system. Should provide significant clientside performance in particle-heavy areas like botany (or sometimes kitchen) ## Changelog 🆑 refactor: Converted most common particle sources to use our new pooling system. /🆑 |
||
|
|
0b99107cc2 |
Guncode Agony 3: Projectile code cleanup (#87628)
## About The Pull Request
Massive cleanup/pseudo-refactor of projectile and projectile-adjacent
code. One letter variables, weird logic, some runtimes, all of that.
Atomized in a separate PR from the actual refactor so we don't end up
with a 5k line PR.
## Why It's Good For The Game
Makes the code possible to work with before I nuke pixel_move and kevinz
units™️
|
||
|
|
9a7dbd61ee | Fix for sprite not updating properly when planting a new seed (#86876) | ||
|
|
33efb200ed |
Implement fix for hydroponics tray allowing autogrow while no power (#86723)
## About The Pull Request Fixes #83539. The code was structured in such a way that the check for power usage did not work correctly, and this allowed for someone to double press ctrl click on the hydroponics tray while there is no power, turning it on forever regardless. ## Why It's Good For The Game Fixes a bug that allows autogrow to be turned on with no power. ## Changelog 🆑 fix: fixed a bug that allows autogrow to be turned on with no power. /🆑 |
||
|
|
8d0e6734fe |
Fish (ya know, from fishing) is now edible (#86110)
## About The Pull Request Fish (the item that you catch with a fishing rod) now has an edible component attached to it, making it possible to eat them if you really have to, at the cost of eventually killing and deleting the fish, however, you normally shouldn't. Along with the seafood and meat foodtypes flags, it possess the gore and raw foodtypes too, making them pretty awful to eat unless you're a (non-vegan) lizard, felinid, or wearing the strange bandana*, which can only be found in the cqc kit case. Furthermore, it carry diseases like the ones from food left on the floors for too long, so a strong stomach is required to safely eat it even if you actually like it, dummy... UNLESS you fry or grill it, thus killing the diseases (as well as the fish) and removing both the gore and raw food types, then it becomes an actually ok meal... UNLESS you're dumb enough to eat a pufferfish, a donkfish or a slimefish. That is more or less the general rule. A few fish stray for it. For example, lavaloops are never raw (still gorey). The skeleton fish are never edibles, and holodeck fish is, well, holographic and thus disappears if you try to eat it. *the strange bandana is a reference to MSG, and this is a reference to the MGS3 fish eating animation. This is WIP btw, I'll have to test it and add some then polish it. ## Why It's Good For The Game Whole unprocessed fish should be technically edible, even if not safe to eat nine times out of ten. Also I kinda need this if I want to add a tasty fishing spot to the kitchen deepfriers. ## Changelog 🆑 add: Whole, unprocessed fish is now edible. However it's pretty much reccomended to grill or fry it for over 30 spess seconds before attempting to eat it. fix: germ-covered, dirty food no longer tries to infect you through contact. /🆑 |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
e12519edb7 |
Gives upgraded hydro trays to the terrarium lavaland spawn vault (#85350)
## About The Pull Request This gives deluxe hydroponics trays to the lavaland seed vault mob spawn area, which are just trays with t4 parts. ## Why It's Good For The Game Gives better trays to the seed vault, which will let them hydroponic just a little harder. ## Changelog 🆑 Bisar qol: The preserved terrarium vault now has tier 4 hydroponics trays, making volume based tray chemistry take less time. /🆑 |
||
|
+16 |
4b4e9dff1d |
Wallening [IDB IGNORE] [MDB IGNORE] (#85491)
## What's going on here Kept you waitin huh! This pr resprites most all walls, windows and other "wall adjacent" things to a 3/4th perspective, technical term is "tall" walls (we are very smart). If you're trying to understand the technical details here, much of the "rendering tech" is built off the idea of split-vis. Basically, split a sprite up and render it on adjacent turfs, to prevent seeing "through" walls/doors, and to support seeing "edges" without actually seeing the atom itself. Most of the rest of it is pipelining done to accommodate how icons are cut. ## Path To Merge Almost* all sprites and code is done at this point. There are some things missing both on and off the bounty list, but that will be the case forever unless we force upstream (you guys) to stop adding new shit that doesn't fit the style. I plan on accepting and integrating prs to the current working repo <https://github.com/wall-nerds/wallening> up until a merge, to make contribution simpler and allow things like bounties to close out more easily This pr is quite bulky, even stripping away map changes it's maybe 7000 LOC (We have a few maps that were modified with UpdatePaths, I am also tentatively pring our test map, for future use.) This may inhibit proper review, although that is part of why I am willing to make it despite my perfectionism. Apologies in advance. Due to the perspective shift, a lot of mapping work is going to need to be done at some point. This comes in varying levels of priority. Many wallmounts are offset by hand, some are stuck in the wall/basically cannot be placed on the east/west/north edges of walls (posters), some just don't look great good in their current position. Tests are currently a minor bit yorked, I thought it was more important to get this up then to clean them fully. ## What does it look like?       ## Credits <details> <summary>Historical Mumbojumbo</summary> I am gonna do my best to document how this project came to be. I am operating off third party info and half remembered details, so if I'm wrong please yell at me. This project started sometime in late 2020, as a product of Rohesie trying to integrate and make easier work from Mojave Sun (A recently defunct fallout server) with /tg/. Mojave Sun (Apparently this was LITERALLY JUST infrared baron, that man is insane) was working with tall walls, IE walls that are 48px tall instead of the normal 32. This was I THINK done based off a technical prototype from aao7 proving A it was possible and B it didn't look like dogwater. This alongside oranges begging the art team for 3/4th walls (he meant TGMC style) lead to Rohesie bringing on contributors from general /tg/, including actionninja who would eventually take over as technical lead and Kryson, who would define /tg/'s version of the artstyle. Much of the formative aspects of this project are their work. The project was coming along pretty well for a few months, but ran into serious technical issues with `SIDE_MAP`, a byond map_format that allows for simpler 3/4th rendering. Due to BULLSHIT I will not detail here, the map format caused issues both at random with flickering and heavily with multiz. Concurrent with this, action stepped down after hacking out the rendering tech and starting work on an icon cutter that would allow for simpler icon generation, leaving ninjanomnom to manage the project. Some time passed, and the project stalled out due to the technical issues. Eventually I built a test case for the issues we had with `SIDE_MAP` and convinced lummox jr (byond's developer) to explain how the fuckin thing actually worked. This understanding made the project theoretically possible, but did not resolve the problems with multi-z. Resolving those required a full rework of how rendering like, worked. I (alongside tattle) took over project development from ninjanomnom at this time, and started work on Plane Cube (#69115), which when finished would finally make the project technically feasible. The time between then and now has been slow, progressive work. Many many artists and technical folks have dumped their time into this (as you can see from the credits). I will get into this more below but I would like to explicitly thank (in no particular order) tattle, draco, arcanemusic, actionninja, imaginos, viro and kylerace for keeping the project alive in this time period. I would have curled up into a ball and died if I had to do this all myself, your help has been indispensable. </details> <details> <summary>Detailed Credits</summary> Deep apologies if I have forgotten someone (I am sure I have, if someone is you please contact me). I've done my best to collate from the git log/my memory. Thanks to (In no particular order): Raccoff: Being funny to bully, creating threshold decals for airlocks aa07: (I think) inspiring the project ActionNinja: Laying the technical rock we build off, supporting me despite byond trying to kill him, building the icon cutter that makes this possible ArcaneMusic: Artistic and technical work spanning from the project's start to literally today, being a constant of motivation and positivity. I can't list all the stuff he's done Armhulen: Key rendering work (he's the reason thindows render right), an upbeat personality and a kick in the ass. Love you arm Azlan: Damn cool sprites, consistently Ben10Omintrix: You know ben showed up just to make basic mobs work, he's just fuckin like that man BigBimmer: A large amount of bounty work, alongside just like, throwing shit around. An absolute joy to work with Capsandi: Plaques, blastdoors, artistic work early on CapybaraExtravagante: Rendering work on wall frames Draco: SO MUCH STUFF. Much of the spritework done over the past two years is his, constantly engaged and will take on anything. I would have given up if not for you Floyd: Early rendering work, so early I don't even know the details. Enjoy freedom brother Imaginos16: A guiding hand through the middle years, handled much of the sprite review and contribution for a good bit there Iamgoofball: A dedication to detail and aesthetic goals, spends a lot of effort dissecting feedback with a focus on making things as good as they can be at the jump Infrared: Part of the impetus for the project, made all the xenomorph stuff in the MS style Jacquerel: A bunch of little upkeep/technical things, has done so much sprite gruntwork (WHY ARE THERE SO MANY PAINTING TYPES) Justice12354: Solved a bunch of error sprites (and worked out how to actually make prs to the project) Thanks bro! Kryson: Built the artstyle of the project, carrying on for years even when it was technically dying, only stopping to casually beat cancer. So much of our style and art is Kryson KylerAce: Handled annoying technical stuff for me, built window frame logic and fully got rid of grilles. LemonInTheDark: Rendering dirtywork, project management and just so much fucking time in dreammaker editing sprites Meyhazah: Table buttons, brass windows and alll the old style doors Mothblocks: Has provided constant support, gave me a deadline and motivation, erased worries about "it not being done", gave just SO much money to fill in the critical holes in sprites. Thanks moth MTandi: Contributed art despite his own blackjack and hookers club opening right down the road, I'm sorry I rolled over some of your sprites man I wish we had finished earlier Ninjanomnomnom: Consulted on gags issues, kept things alive through some truly shit times oranges: This is his fault Rohesie: Organized the effort, did much of the initial like, proof of concept stuff. I hope you're doin well whatever you're up to. san7890: Consulting on mapper UX/design problems, being my pet mapper Senefi: Offsetting items with a focus on detail/the more unused canidates SimplyLogan: Detailed map work and mapper feedback, personally very kind even if we end up talking past each other sometimes. Thank you! SpaceSmithers: Just like, random mapping support out of nowhere, and bein a straight up cool dude Tattle: A bunch of misc project management stuff, organizing the discord, managing the test server, dealing with all the mapping bullshit for me, being my backup in case of bus. I know you think you didn't do much but your presence and work have been a great help Thunder12345: Came out of nowhere and just so much of the random bounties, I'm kind of upset about how much we paid him Time-Green: I hooked him in by fucking with stuff he made and now he's just doin shit, thanks for helping out man! Twaticus: Provided artistic feedback and authority for my poor feeble coder brain, believed in the project for YEARS, was a constant source of ❤️ and affirmation unit0016: I have no god damn idea who she is, popped out of nowhere on the github one day and dealt with a bunch of annoying rendering/refactoring. Godspeed random furry thank you for all your effort and issue reports Viro: A bunch of detailed spriting moving towards 3/4ths, both on and off the wallening fork. If anyone believed this project would be done, it was viro Wallem: Artistic review and consultation, was my go-to guy for a long time when the other two spritetainers were inactive Waltermeldon: Cracked out a bunch of rendering work, he's the reason windows look like not dogwater. Alongside floyd and action spent a TON of time speaking to lummox/unearthing how byond rendering worked trying to make this thing happen ZephyrTFA: Added directional airlock helpers, dealt with a big fuckin bugaboo that was living in my brain like it was nothing. Love you brother And finally: The Mojave Sun development team. They provided a testbed for the idea, committed hundreds and hundreds of hours to the artstyle, and were a large reason we caught issues early enough to meaningfully deal with them. Your work is a testament to what longterm effort and deep detailed care produce. I hope you're doing well whatever you're up to. Go out with a bang! </details> ## Changelog 🆑 Raccoff, aa07, ActionNinja, ArcaneMusic, Armhulen, Azlan, Ben10Omintrix, BigBimmer, Capsandi, CapybaraExtravagante, Draco, Floyd, Iamgoofball, Imaginos16, Infrared, Jacquerel, Justice12354, Kryson, KylerAce, LemonInTheDark, Meyhazah, Mothblocks, MTandi, Ninjanomnom, oranges, Rohesie, Runi-c, san7890, Senefi, SimplyLogan, SomeAngryMiner, SpaceSmithers, Tattle, Thunder12345, Time-Green, Twaticus, unit0016, Viro, Waltermeldon, ZephyrTFA with thanks to the Mojave Sun team! add: Resprites or offsets almost all "tall" objects in the game to match a 3/4ths perspective add: Bunch of rendering mumbo jumbo to make said 3/4ths perspective work /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: = <stewartareid@outlook.com> Co-authored-by: Capsandi <dansullycc@gmail.com> Co-authored-by: ArcaneMusic <hero12290@aol.com> Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com> Co-authored-by: SomeAngryMiner <53237389+SomeAngryMiner@users.noreply.github.com> Co-authored-by: KylerAce <kylerlumpkin1@gmail.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: Runi-c <5150427+Runi-c@users.noreply.github.com> Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com> Co-authored-by: tattle <article.disaster@gmail.com> Co-authored-by: Senefi <20830349+Peliex@users.noreply.github.com> Co-authored-by: Justice <42555530+Justice12354@users.noreply.github.com> Co-authored-by: BluBerry016 <50649185+unit0016@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com> Co-authored-by: Rob Bailey <github@criticalaction.net> Co-authored-by: MMMiracles <lolaccount1@hotmail.com> |
||
|
|
460a2d8a92 |
Botany reagent cross pollination code improvement and fix (#85329)
## About The Pull Request fixes #83852 Rewrites the code responsible for the pollination reagent selection logic making it more readable and self contained, fixes a bug where plants would repeatedly select reagents they already have for pollination ## Why It's Good For The Game Better code, fixes a bug that would cause reagent cross pollination to take forever in plants with many reagents. ## Changelog 🆑 fix: plants no longer select reagent genes they already have while cross pollinating code: improves reagent cross pollination code 🆑 --------- Co-authored-by: RafRoq <rafael.roquec@gmail.com> Co-authored-by: Rafael <34388545+RafRoq@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
5f80128fa9 |
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑 |
||
|
|
258bd5cda4 |
Hydroponic trays take in reagents proportionally from plumbing mech (#84714)
## About The Pull Request - Fixes #84699 The issue isn't with reagents getting transferred one at a time. Yes this happens inside plumbing machinery and it isn't an issue there because they are not processed but simply stored(until all reagents can get there) until it is transferred to another machine that requests it. This however is a problem with hydroponic trays which both store & process those reagents. So when 1 reagent comes into the tray & if the tray gets full before the other reagents can get there it leads to missing fertilizers/nutrients in the tray causing problems in plant growth & such. For e.g. if your ducts have reagents like 3u sodium, 7u ash & 5u water & the tray has space for only 10u reagents. Using round robin it takes in 3u sodium + 7u ash = 10u reagents. The 5u water is left out cause the 10u request is complete causing the plants to dehydrate & die. Now trays are reverted to use the old "proportional method" of transferring reagents leading to trays getting all their nutrients from plumbing ducts. So using the old technique we get sodium + ash + water = 10u i.e. all reagents in the tray so the plants are happy Additionally bottler also uses the old "proportional method" of transferring reagents so it pumps out all reagents into the beaker ## Changelog 🆑 fix: hydroponic trays take in all reagents "proportionally" from plumbing ducts without leaving any behind fix: plumbing bottler pumps out all reagents "proportionally" into output beakers /🆑 |
||
|
|
c49ba598fc |
Fixes some objects not being pulled with ctrl-click (#84190)
## About The Pull Request Fix for a bug where using ctrl-click to try to pull the bluespace gas sender and hydroponics tray isn't working. Seems to be broken since the ctrl-click refactor. Fixes #84222 ## Changelog 🆑 fix: Fixed ctrl-click not dragging the bluespace gas sender or hydroponics trays. /🆑 |
||
|
|
47be0bffc2 |
Ctrl click refactor (#83784)
## About The Pull Request Same idea as #82656 but for ctrl click & ctrl shift click cause why not - Does your signal & `can_perform_action()` checks using `interaction_flags_click` flags before delegating the event down to `ctrl_click()` proc. - The one new change now is that `ctrl_click()` proc is now blocking, meaning returning `CLICK_ACTION_SUCCESS` or `CLICK_ACTION_BLOCKING` will stop the object from getting grabbed/pulled. So remember to return these values if you want to stop the grab action or return `NONE` if you want to process the click but still want the object to get grabbed as well ## Changelog 🆑 refactor: Ctrl click & Ctrl shift click has been refactored. Please report bugs on GitHub /🆑 |
||
|
|
8e3f635b98 |
Alt click refactor (#82656)
## About The Pull Request Rewrites how alt click works. Based heavily on #82625. What a cool concept, it flows nicely with #82533. Fixes #81242 (tm bugs fixed) Fixes #82668 <details><summary>More info for devs</summary> Handy regex used for alt click s&r: `AltClick\((.*).*\)(\n\t.*\.\.\(\))?` `click_alt($1)` (yes I am aware this only copies the first arg. there are no other args!) ### Obj reskins No reason for obj reskin to check on every single alt click for every object. It applies to only a few items. - Moved to obj/item - Made into signal - Added screentips ### Ventcrawling Every single atmospherics machine checked for ventcrawling capability on alt click despite only 3 objects needing that functionality. This has been moved down to those individual items. </details> ## Why It's Good For The Game For players: - Alt clicking should work more logically, not causing double actions like eject disk and open item window - Added context menus for reskinnable items - Removed adjacency restriction on loot panel For devs: - Makes alt click interactions easier to work with, no more click chain nonsense and redundant guard clauses. - OOP hell reduced - Pascal Case reduced - Glorious snake case ## Changelog 🆑 add: The lootpanel now works at range. add: Screentips for reskinnable items. fix: Alt click interactions have been refactored, which may lead to unintentional changes to gameplay. Report any issues, please. /🆑 |
||
|
|
227cdd2c7c |
[NO GBP] Patches & renaming for NO_DECONSTRUCTION flag (#82547)
## About The Pull Request 1. Renames `NO_DECONSTRUCTION` -> `NO_DEBRIS_AFTER_DECONSTRUCTION`. As the name suggests when the object is deconstructed it won't drop any items/debris. After my last refactor for this flag it now serves a new purpose so its name has been changed to match that 2. Fixes objects that are now using `NO_DECONSTRUCTION` incorrectly. Some of these changes include - Removing the flag in objects where there are no means to deconstruct them (e.g. jukebox, hydroponics soil, flora etc) - Replacing the flags old purpose by overriding its tool procs so that it regains its old behaviour(e.g. You once again cannot deconstruct ctf reinforced tables, survival pods, indestructible windows etc) ## Changelog 🆑 code: renamed `NO_DECONSTRUCTION` to `NO_DEBRIS_AFTER_DECONSTRUCTION` so its name matches its intended purpose fix: fixes some items that incorrectly used `NO_DECONSTRUCTION` prior to its refactor, meaning makes some objects non deconstructable again /🆑 |
||
|
|
6dc40ca522 |
Standardizes object deconstruction throughout the codebase. (#82280)
## About The Pull Request When it comes to deconstructing an object we have `proc/deconstruct()` & `NO_DECONSTRUCT` Lets talk about the flag first. **Problems with `NO_DECONSTRUCTION`** I know what the comment says on what it should do https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/__DEFINES/obj_flags.dm#L18 But everywhere people have decided to give their own meaning/definition to this flag. Here are some examples on how this flag is used **1. Make the object just disappear(not drop anything) when deconstructed** This is by far the largest use case everywhere. If an object is deconstructed(either via tools or smashed apart) then if it has this flag it should not drop any of its contents but just disappear. You have seen this code pattern used everywhere https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/constructable_frame.dm#L26-L31 This behaviour is then leveraged by 2 important components. When an object is frozen, if it is deconstructed it should just disappear without leaving any traces behind https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/datums/elements/frozen.dm#L66-L67 By hologram objects. Obviously if you destroy an hologram nothing real should drop out https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/modules/holodeck/computer.dm#L301-L304 And there are other use cases as well but we won't go into them as they aren't as significant as these. **2. To stop an object from being wrenched ??** Yeah this one is weird. Like why? I understand in some instances (chair, table, rack etc) a wrench can be used to deconstruct a object so using the flag there to stop it from happening makes sense but why can't we even anchor an object just because of this flag? https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/objects/objs.dm#L368-L369 This is one of those instances where somebody just decided this behaviour for their own convenience just like the above example with no explanation as to why **3. To stop using tools to deconstruct the object** This was the original intent of the flag but it is enforced in few places far & between. One example is when deconstructing the a machine via crowbar. https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/_machinery.dm#L811 But machines are a special dual use case for this flag. Because if you look at its deconstruct proc the flag also prevents the machine from spawning a frame. https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/machinery/_machinery.dm#L820-L822 How can 1 flag serve 2 purposes within the same type? **4. Simply forget to check for this flag altogether** Yup if you find this flag not doing its job for some objects don't be surprised. People & sometimes even maintainers just forget that it even exists https://github.com/tgstation/tgstation/blob/b5593bc6930cb60803214869a7b94c84e7baa02c/code/game/objects/items/piggy_bank.dm#L66-L67 **Solution** These are the main examples i found. As you can see the same flag can perform 2 different functions within the same type and do something else in a different object & in some instances don't even work cause people just forget, etc. In order to bring consistency to this flag we need to move it to the atom level where it means the same thing everywhere. Where in the atom you may ask? .Well, I'll just post what MrMelbert said in https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862 > ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION handling as it wants, Yup that's the ideal case now. This flag is checked directly in `deconstruct()`. Now like i said we want to give a universal definition to this flag and as you have seen from my examples it is used in 3 cases 1) Make an object disappear(doesn't dropping anything) when deconstructed 2) Stop it from being wrenched 3) Stop it from being deconstructed via tools We can't enforce points 2 & 3 inside `deconstruct()` which leaves us with only case 1) i.e. make the object disappear. And that's what i have done. Therefore after more than a decade or since this flag got introduced `NO_DECONSTRUCT` now has a new definition as of 2024 _"Make an object disappear(don't dropping anything) when deconstructed either via tools or forcefully smashed apart"_ Now i very well understand this will open up bugs in places where cases 2 & 3 are required but its worth it. In fact they could even be qol changes for all we know so who knows it might even benefit us but for now we need to give a universal definition to this flag to bring some consistency & that's what this PR does. **Problem with deconstruct()** This proc actually sends out a signal which is currently used by the material container but could be used by other objects later on. https://github.com/tgstation/tgstation/blob/3e84c3e6dad33c831ac259f52f2f023680e4899b/code/game/objects/obj_defense.dm#L160 So objects that override this proc should call its parent. Sadly that isn't the case in many instances like such https://github.com/tgstation/tgstation/blob/3e84c3e6dad33c831ac259f52f2f023680e4899b/code/game/machinery/deployable.dm#L20-L23 Instead of `return ..()` which would delete the object & send the signal it deletes the object directly thus the signal never gets sent. **Solution** Make this proc non overridable. For objects to add their own custom deconstruction behaviour a new proc has been introduced `atom_deconstruct()` Subtypes should now override this proc to handle object deconstruction. If objects have certain important stuff inside them (like mobs in machines for example) they want to drop by handling `NO_DECONSTRUCT` flag in a more carefully customized way they can do this by overriding `handle_deconstruct()` which by default delegates to `atom_deconstruct()` if the `NO_DECONSTRUCT` flag is absent. This proc will allow you to handle the flag in a more customized way if you ever need to. ## Why It's Good For The Game 1) I'm goanna post the full comment from MrMelbert https://github.com/tgstation/tgstation/pull/81656#discussion_r1503086862 > ...Ideally the .deconstruct call would handle NO_DECONSTRUCTION handling as it wants, but there's a shocking lack of consistency around NO_DECONSTRUCTION, where some objects treat it as "allow deconstruction, but make it drop no parts" and others simply "disallow deconstruction at all" This PR now makes `NO_DECONSTRUCTION` handled by `deconstruct()` & gives this flag the consistency it deserves. Not to mention as shown in case 4 there are objects that simply forgot to check for this flag. Now it applies for those missing instances as well. 2) No more copying pasting the most overused code pattern in this code base history `if(obj_flags & NO_DECONSTRUCTION)`. Just makes code cleaner everywhere 3) All objects now send the `COMSIG_OBJ_DECONSTRUCT` signal on object deconstruction which is now available for use should you need it ## Changelog 🆑 refactor: refactors how objects are deconstructed in relation to the `NO_DECONSTRUCTION` flag. Certain objects & machinery may display different tool interactions & behaviours when destroyed/deconstructed. Report these changes if you feel like they are bugs /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
9ac81e1a64 |
New station trait job: Human AI (#81681)
## About The Pull Request This PR does many things, I'll try to explain the basic/background stuff to the main thing first: 1. Adds a new remote that allows a human to function like an AI. It controls a fly that will fly around the station slowly, and when it reaches a machine then the person can interact with it as if they were an AI. This required changing a lot of silicon/AI checks with one that also checks for this remote, and some messing with shared ui state. 2. Moves req_access from the obj and bot to ``/atom/movable`` which lets it be shared between the two, no more copy-paste and one side lacking features/checks/signals the other has. 3. Adds a check for AI config for AI-related station traits, which was lacking prior Now for the good part... Adds a new station trait that replaces the AI with a Human. This person is equipped with an AI headset (including Binary), an advanced camera console, an omni door wand, the machine controller, and their laws. They are immune to the SAT's turrets (even if set to target borgs) and are slow outside of the SAT, mimicing the actions of the AI. They interact with the world through their advanced camera console, which allows them to do most AI stuff needed, and the holopad they can connect to without having to ring first (like Command can). They are given a paper with the laws they must follow, but since they are human they are able to bend it. Cyborgs that run the default lawset are "slaved" to them via an unremovable law 0, so the Human AI can bend the laws if they really need to (for their own survival n such), and make the cyborgs obey their commands above laws, but in general this shouldn't be a frequent occurrence. This does take into account the unique AI trait, so it's not guaranteed Asimov. When this station trait rolls, all Intellicards, AI uploads, and AI core boards are destroyed and are unresearchable. They can be spawned by admins in-game if necessary. Maybe in the future we can also exclude Oldstation from this but I haven't really decided. Extra perks: Human AI spawns with a Robotic voicebox (unless they are a body purist) and teleport blocking implant, so they can't use teleporters to bypass their on-station slowdown. They also have an infinite laser pointer that can be used to blind through their camera console. This is unfortunately nerfed from the recent borg balance PR that removed its stun. This was meant to be the alternative to no longer being able to permanently lock borgs down like AIs can (or more than one, for that matter). They aren't affected by Roburgers, Acid, and Fuel's toxicity. Bots salute them like they do Beepsky (which is now a trait) They spawn with SyndEye to replace the AI's tracking ability They do not have a bank account ### The machine remote The machine remote has a little fly in it that flies to the machines it is pointed to, working as the arms and legs of the Human AI. It scans the machine and punches in the action the AI does, and is how the AI accesses basically anything. This fly slowly moves from one machine to the next, and can be recalled with Alt Click. It works on machines and bots. ### Video (Low quality to fit Github) https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8 ## Why It's Good For The Game I've seen a funny screenshot one day of a person replacing the AI by using a bunch of door remotes, camera console, crew monitoring console, and a few other things. I've been thinking about that for a few years and really wanted to make it official if not easier to make possible, because it is an incredibly funny interaction. This makes it a reality, and while they aren't as powerful as regular AIs, I think it makes for better and funnier in-game moments. With the same weight as Cargorilla (1), I hope this wouldn't be rolling too often and ruin rounds, but instead show off the different capabilities that Humans and AIs can do, to do the job of an AI. You win some you lose some. ## Changelog 🆑 JohnFulpWillard, Tattax add: Adds a new station trait job: The Human AI. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |