mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-01 20:11:52 +00:00
ebfd39179dc1b8ff0f15ffcf95b22eedfaac07de
963 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
97a1d7a81f |
Make butt sprites overridable for downstream (#84100)
## About The Pull Request Allows changing the spritesheet for downstreams ## Why It's Good For The Game Small code cleanup and lets downstreams do more butts for other species. |
||
|
|
b6369a47b4 |
Mouse drag & drop refactored attack chain (#83690)
## About The Pull Request
Mouse drag & drop has been refactored into its own attack chain. The
flowchart below summarizes it

Brief summary of each proc is as follows
**1. `atom/MouseDrop()`**
- It is now non overridable. No subtype should ever touch this proc
because it performs 2 basic checks
a) Measures the time between mouse down & mouse release. If its less
than `LENIENCY_TIME`(0.1 seconds) then the operation is not considered a
drag but a simple click
b) Measures the distance squared between the drag start & end point. If
its less than `LENIENCY_DISTANCE`(16 pixels screen space) then the drag
is considered too small and is discarded
- These 2 sanity checks for drag & drop are applied across all
operations without fail
**2. `atom/base_mouse_drop_handler()`**
- This is where atoms handle mouse drag & drop inside the world. Ideally
it is non overridable in most cases because it also performs 2 checks
- Is the dragged object & the drop target adjacent to the player?.
Screen elements always return true for this case
- Additional checks can be enforced by `can_perform_action()` done only
on the dragged object. It uses the combined flags of
`interaction_flags_mouse_drop` for both the dragged object & drop target
to determine if the operation is feasible.
We do this only on the dragged object because if both the dragged object
& drop target are adjacent to the player then `can_perform_action()`
will return the same results when done on either object so it makes no
difference.
Checks can be bypassed via the `IGNORE_MOUSE_DROP_CHECKS` which is used
by huds & screen elements or in case you want to implement your own
unique checks
**3. `atom/mouse_drop_dragged()`**
- Called on the object that is being dragged, drop target passed here as
well, subtypes do their stuff here
- `COMSIG_MOUSEDROP_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
**4. `atom/mouse_drop_receive()`**
- Called on the drop target that is receiving the dragged object,
subtypes do their stuff here
- `COMSIG_MOUSEDROPPED_ONTO` is sent afterwards. It does not require
subtypes to call their parent proc
## Why It's Good For The Game
Implements basic sanity checks across all drag & drop operations. Allows
us to reduce code like this
|
||
|
|
0d50c2f9e8 |
new keywords for paperwork (#83737)
## About The Pull Request Adds new keywords for fields on paper: %d or %date to set the current in-game date %t or %time to set the current server time (because no one uses station time)   ## Why It's Good For The Game Entering dates and times into documents is very frustrating. This makes it faster and easier ## Changelog 🆑 add: Added new keywords (%d, %date, %t, %time) for fields /🆑 |
||
|
|
ff6b41aa07 |
Afterattack is dead, long live Afterattack (#83818)
## About The Pull Request - Afterattack is a very simple proc now: All it does is this, and all it's used for is for having a convenient place to put effects an item does after a successful attack (IE, the attack was not blocked)  - An overwhelming majority of afterattack implementations have been moved to `interact_with_atom` or the new `ranged_interact_with_atom` I have manually tested many of the refactored procs but there was 200+ so it's kinda hard ## Why It's Good For The Game Afterattack is one of the worst parts of the attack chain, as it simultaneously serves as a way of doing random interactions NOT AT ALL related to attacks (despite the name) while ALSO serving as the defacto way to do a ranged interaction with an item This means careless coders (most of them) may throw stuff in afterattack without realizing how wide reaching it is, which causes bugs. By making two well defined, separate procs for handing adjacent vs ranged interactions, it becomes WAY WAY WAY more easy to develop for. If you want to do something when you click on something else and you're adjacent, use `interact_with_atom` If you want to do something when you click on something else and you're not adjacent, use 'ranged_interact_with_atom` This does result in some instances of boilerplate as shown here:  But I think it's acceptable, feel free to oppose if you don't I'm sure we can think of another solution ~~Additionally it makes it easier to implement swing combat. That's a bonus I guess~~ ## Changelog 🆑 Melbert refactor: Over 200 item interactions have been refactored to use a newer, easier-to-use system. Report any oddities with using items on other objects you may see (such as surgery, reagent containers like cups and spray bottles, or construction devices), especially using something at range (such as guns or chisels) refactor: Item-On-Modsuit interactions have changed slightly. While on combat mode, you will attempt to "use" the item on the suit instead of inserting it into the suit's storage. This means being on combat mode while the suit's panel is open will block you from inserting items entirely via click (but other methods such as hotkey, clicking on the storage boxes, and mousedrop will still work). refactor: The detective's scanner will now be inserted into storage items if clicked normally, and will scan the storage item if on combat mode /🆑 |
||
|
|
9087058694 |
Makes the Clown Stamp give out clown cells (#83585)
## About The Pull Request
This PR makes it so swabbing the clown's stamp also gives clown cells
for Cytology.
## Why It's Good For The Game
Right now for these cell lines you either need to swab the clown's
shoes, clothes or mask - items that many clowns won't be too happy to
part with, even if for a few seconds. Furthermore it means you only get
3 tries to get the cell line you want, alongside having a chance of
having all of the cell lines rather than just two (making the process a
lot more harder if i does happen).
Letting the stamp give out cells both makes getting a single petri dish
faster ("Clown give me the stamp" "K") but also means if you're going
for one specific cell line you have more chances to get it, making the
whole process of getting experimental clowns faster and more reliable
overall.
## Changelog
🆑
qol: Swabbing the clown's stamp also gives clown cells.
🆑
|
||
|
|
9975eabef6 |
Stamp papers quickly with a right click (#82993)
## About The Pull Request Right clicking a paper with a stamp will quickly place down the stamp ## Why It's Good For The Game  ## Changelog 🆑 qol: You can now quickly stamp papers with a right click /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
a21742ff60 |
Adds ALLOW_RESTING to a bunch of items (#82761)
## About The Pull Request Allows you to alt-click a bunch of items while resting. Fixes #82788 ## Why It's Good For The Game Some of these, such as storage, are bugfixes. You shouldn't need to be standing up to configure a spray can, or change the direction of your bedsheet Others are just sensible changes. ## Changelog 🆑 Melbert fix: You can open bags with alt click while resting again qol: Many items which previously required you to stand to alt-click now don't, such as bedsheets and spray cans /🆑 |
||
|
|
d280c9ccce | Makes it EVEN EASIER to work with atom item interactions ft. "Leaf and Branch" & "Death to Chains" (#82625) | ||
|
|
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. /🆑 |
||
|
|
5e568288f4 |
Refactor renaming UNIQUE_RENAME items from the pen to an element (#82491)
## About The Pull Request So a bit ago someone in code_general wanted to make plushies renamable, but learnt that just adding the `UNIQUE_RENAME` flag wouldn't work as pens would murder the plushie and only THEN let you rename it. I noted refactoring both pens and plushies to use the new `item_interaction(...)` procs would Just Solve This, but, well, they didn't really have any coding experience. But, hey, renaming being hardcoded to the pens has annoyed me ever since I laid my eyes upon the hot mess that is paperwork code. So here we are! ### We're making it an element. There's not really much to this, this is mostly the same code but moved to an element and with some minor cleanups. First, we move it all from `/obj/item/pen` to a new element we called `/datum/element/tool_renaming`. With this, instead of having it proc on `/obj/item/pen/afterattack(...)`, we register it to proc on the `COMSIG_ITEM_INTERACTING_WITH_ATOM` signal. |
||
|
|
430896b5cf |
Blueprints tgui (#82565)
## About The Pull Request Blueprints now use a TGUI panel instead of the old HTML one. Also did general code improvement and maintaining to blueprints in general and also destroyed the ``areaeditor`` level, repathing it to just 'blueprints'. Also adds a sound when you look at structural data cause why not Video demonstration: https://github.com/tgstation/tgstation/assets/53777086/861773fd-3d57-472d-bc94-d67b0d4f1dbd The 4 blueprint types:  ## Why It's Good For The Game Another HTML menu dead underground. This is more responsive and doesn't require constant updating to see which area you're in, feels less OOC (instead of saying "the blueprints say", just say it, you ARE the blueprints). Like, come on  Look at all this wasted space  ## Changelog 🆑 refactor: Blueprints now use TGUI. qol: Blueprints can now be used while lying down. /🆑 |
||
|
|
9723b4b317 |
Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
|
||
|
|
1443ef79d3 |
Replaces a number of deciseconds into SECONDS (#82436)
## About The Pull Request Using these search regexes: Number ending in 0: `do_after\((\w+), (\d+)0,` Replace: `do_after($1, $2 SECONDS,` Single digit number: `do_after\((\w+), [1-9],` replace: `do_after($1, 0.$2 SECONDS,` Double: `do_after\((\w+), (\d)([1-9]),` Replace: `do_after($1, $2.$3 SECONDS,` ## Why It's Good For The Game Code readability |
||
|
|
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 |
||
|
|
e2dda1cea5 |
Allows faxing of paintings (#82384)
## About The Pull Request Adds painting canvases to the allowed list of fax machine input/outputs. ## Why It's Good For The Game A picture is worth 1000 words; now you can depict the captain as the soyjack and yourself as the chad. They're flat means of visual communication... I will admit it's maybe a stretch that you could fit the larger canvases in but let's imagine that the machine folds and unfolds them. ## Changelog 🆑 add: You can now fax painted canvases in order to send memes to each other. /🆑 |
||
|
|
466b3df048 |
Refactor removing unused defines. (#82115)
## About The Pull Request Refactors a lot of the unused defines. ## Why It's Good For The Game Refactors a lot of the unused defines. ## Changelog Nothing player facing --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
0946e65da3 |
Hand label refactor / Adds hand label visuals (#82112)
## About The Pull Request Inspired by #82099 - Hand labels now has a small visual associated. - Hand labels now function like stickers, meaning burning temperatures will remove hand labels from objects. - General refactor of hand labels. Hand labeler now uses the new interaction functions. Labels are now objects.  ## Why It's Good For The Game I thought it'd be a nice small touch to show visually when things are labelled, so you can tell at a glance rather than needing to examine (or hover) it. If people preferred or used the invisible labels for certain gimmicks, I can add a translucent label option as well. Maybe one that requires plastic to print. ## Changelog 🆑 Melbert qol: Hand labels now have a visual effect associated, and are also affected by heat / can be cleaned off like stickers. refactor: Refactored hand labels. They're objects now! /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
0005e914f3 |
Placing things in a paperbin actually plays sounds. (#81974)
## About The Pull Request In contrast to my previous pr: Really just changes the `user.transferItemToLoc(...)` used for transferring paper to the bin to have a `silent = FALSE` parameter. Also did it for pens for good measure, though I believe most pens don't have such sounds yet. ## Why It's Good For The Game Placing paper on a table makes sounds, placing paper in a bin makes no sound. This feels awkward. This changes that to actually make a sound. Also adds `silent = FALSE` to placing pens on it for good measure, though most pens don't have such sounds yet. ## Changelog 🆑 sound: Placing paper in a paperbin is no longer silent. /🆑 |
||
|
|
ef714c1c34 |
Overlay Lighting Color/Intensity Pass (#81425)
## About The Pull Request I was looking at screenshots of the game and realized we had a lot of light sources that were really... flat. Medium intensity, not colored at all, cringe. So I went over all the uses of overlay styled lighting (since I've done matrix lighting already) and gave them more unique features. Colors that match the sprite they're used with, intensity to produce vibes, that sort of thing. It's kinda impossible to go one by one cause there's a LOT. I may have gone a bit overboard with a few, I'm messing around with some things like giving bots colors based off their department, etc. We'll see how this all turns out. Oh also I tweaked how the cone of overlay lighting is drawn. It seemed a bit too present to me so I dropped the alpha down from like 200 to 120 at max (so it's roughly half of the mask's alpha so it's less overwhelming ## Why It's Good For The Game Lighting should be impactful, subtle and colorful <details> <summary> Old Lights </summary>           </details> <details> <summary> New Lights </summary>           </details> ## Changelog 🆑 add: Tweaked the saturation, color and intensity of a bunch of lights /🆑 |
||
|
|
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> |
||
|
|
f2e973a951 |
Photocopier butt sprites refactor (#81693)
## About The Pull Request - Butt sprite pngs put into a single .dmi - All living mobs can have butt sprites defined [maybe even ghosts in the future?] - Human butt sprites are based on the chest bodypart instead of species - having a human chest and felinid tail shows felinid sprite - Added fuzzy moth butt sprite from Paradise - Butt sprites use defines ## Why It's Good For The Game Cleaner code, more realistic and logical for humans on the chest rather than species, moth player flavor, butt sprites did not need to be separate pngs at all, and gives felinid tails some more "value" ## Changelog 🆑 refactor: Butt sprites are based on the chest bodypart for humans, instead of the species image: Moths have their own special butt sprites /🆑 |
||
|
|
aace5f46f4 |
You can do more things while floored (#81641)
## About The Pull Request While on the floor, you can: - Use the UIs of Atmos machinery (except thermomachine and bluespace gas vendor), Holopads, Crayons (spray cans too), radios, and Disposal bins - Close extinguisher cabinets with Right-Click - Click and drag yourself onto a photocopier to climb onto it. I also changed all instances of ``ui_status`` to have all the args it's being passed, I was messing with it a bit but it's gonna be for a later PR. ## Why It's Good For The Game It's an extra layer of harmless realism, also nice QoL for people who do not have functional legs and do not have a wheelchair. ## Changelog 🆑 qol: You can use atmos machines, holopads, crayons, spray cans, and disposal bins while floored. fix: You can close extinguisher cabinets while floored. fix: You can climb onto a photocopier from the floor. /🆑 |
||
|
|
8d14688256 |
Fixes some issues with paper planes (#81453)
## About The Pull Request 1. paper's examine was defined twice, which made spacemandmm throw a minor notice about 2. paper's altclick had a second arg for some item, which would never be the case because that's not a real arg 3. there was a check for src's type, now just removed to the type's altclick 4. some papercode was sitting in paper plane code file, now moved the rest is misc changes such as replacing camelCase and using SECONDS. ## Why It's Good For The Game None of this is player-facing but it's updating some rather old code to more modern code standards. ## Changelog Nothing player-facing. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
70651816c2 |
Fixes complex lights not handling moving well, renames lighting defines (#81423)
## About The Pull Request [Fixes static lights not moving]( |
||
|
|
4495ea2e4d |
Refactors how machines are deconstructed (#81291)
## About The Pull Request This refactors how machines are deconstructed in the following ways - You can no longer override `obj/machinery/deconstruct()`. If you want customized behaviour then override `on_deconstruction()` instead. This comes with the added benifit of no longer needing to check for the `NO_DECONSTRUCTION` flag because the machine base proc does that for us & if it finds that flag it won't proceed to call `on_deconstruction()` meaning no machine will have a chance to spawn anything which is the current behaviour. This is required to make #81290 work for all machines at least so that machine can send the `COMSIG_OBJ_DECONSTRUCT` signal without subtypes overriding & forgetting to call the parent proc - `dump_contents()` only gets called when the machine is deconstructed not destroyed thus not leaving behind any of its contents inside. Fixes https://github.com/tgstation/tgstation/pull/81290#issuecomment-1925752583 ## Changelog 🆑 fix: machines that should not drop contents when deleted no longer do. refactor: refactors how machines are deconstructed. report bugs on github. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
002051a3d5 |
ArcMining Pr Beta: Version 1.2 (#78524)
This one's not like the last one, so much so that I'm not even going to outsource the PR description to a robot this time! Basically, **You should read the PR body before assuming that everything is the same as last time. It's not.** ## Video Summary Click the link below to see a video summary of the main features of this pull request. https://youtu.be/Aho2omR0mjY?feature=shared ## About The Pull Request This pull request serves as a large rework of minerals produced by mining, and by extension mining itself. I'll try and list each change and it's associated nuance here. ### Ore Vents The biggest addition to the game with ArcMining is **Ore Vents**. Ore vents spawn as a ruin on the map, placing a randomized ore vent onto map generation. Ore vents spawn in 3 different sizes, **Small, Medium, and Large**. These vents will pick from a pool of materials they can generate, and will hang out across the map. A player can use a mining scanner to discover an ore vent, granting a small quantity of **mining points** to begin with. Once scanned, ore vents will show what minerals that ore vent will generate after they're fully tapped. Scanning the vent again will trigger the extraction process. A small drone will fly down, called the NODE drone, and buckle onto the vent. Your job during wave defense is to protect the drone and to defeat waves of randomly spawning mobs (dependent on if you're on lavaland or on icebox). The quantity, duration, and time between waves is scaled to the size of the vent you're protecting. Starting by scanning and protecting lower tier vents earlier in the shift is a safer bet than doing a large vent in the first few minutes. The drone has 500 health, and can take a good few hits, but leaving it alone will cause it to meet an unfortunate end quite quickly. Cooperation can be your best asset, as mining with allies can greatly help with wave defense, and mineral points are granted to anyone who helps with defending the ore vent equally (So 500 * size tier, regardless of how much help you receive). Once complete, the ore vent will have a mining machine constructed on top of it, and will start to dredge up **Boulders** from the earth automatically. More on boulders later. Ore vents can be located based on your mining scanner, and will provide an appropriate audio cue based on if the ore vent has been discovered or not, and once processed will no longer alert you to it's presence. **Each station comes with a free vent that produces exclusively iron and glass, free of charge.** This is to help with shifts where the station may not have shaft miners to produce minerals, and to provide the station with a baseline amount of minerals where none may exist otherwise. ### Mineral Generation Mineral generation has been completely reworked. Previously, Mineral Generation had a flat 13% spawn rate in-game. Once minerals spawned, they would also have a chance to propagate their minerals to nearby tiles, resulting in a rather massive pool of minerals that could spawn throughout lavaland on the whole. This tweaks that, by making minerals in walls spawn based on their proximity to ore vents on maps that use cave generation. Both the probability, and quantity of ores spawning in walls is scaled based on distance, with ore vents looking like large caches of ores found in walls. This makes following ores found in walls and checking their quantity of minerals spawned a good indicator of how close you are to a nearby vent in-round. This means you can collect some points form both discovering ore vents first, as well as collecting their surrounding ores, turn those in for mining points, and then trading them in for gear upgrades to more effectively take on ore vents. As a result of tweaking the balance of this, the total amount of ores spawned in walls overall has been decreased. However, by making more of the process time based, we still result in a mostly balanced finished product. ### Boulder Processing On station, there are now three new machines. These are the BRM, the Refinery, and the Smelter. - The BRM acts as a teleporter. Instead of needing to carry boulders back to the station, you can activate the BRM, and it will automatically pick boulders to teleport back to itself. You can use this to teleport boulders dredged up from lavaland onto the station for processing. **The BRM will only lock on to boulders that are resting on an ore vent.** Moving boulders back by hand will mean you'll have to haul it back by hand. - The refinery processes the non-metallic materials out of boulders. This process sends the materials straight to the ORM, and collects mining points from the ores smelted in the machine. Swiping with an ID card lets you withdraw those points for your own personal account, but remember that these points are for your whole team to share from. The **Mining points obtained from this process is only 75% of the amount an equivalent amount of ores would provide.** - The smelter works nearly identically, however the smelter produces metallic materials out of boulders instead. - Once a boulder has had all of it's materials extracted, it's broken down and deleted from the line. Otherwise, the boulder is spat out for the next machine to process it (either the refinery or smelter). - Once there's no minerals left in a boulder of any type, the refinery or smelter will break the boulder down. - Boulders **do not stack onto tiles with each other**, so they'll block each other when pulled or when moving on a conveyor belt. Boulders can also be processed by hand. Using a mining tool on a boulder with right click will allow you to break down a boulder into it's composite ores, but limits you to a maximum of 10 ore per boulder, where the full amount can be extracted using the proper processing machines. Also, processing by hand does deal small amounts of stamina damage over time, do breaking a full large boulder can be particularly taxing. Additional Boulder Processing Machines can be built, with the BRM board being obtained from the Protolathe, while the Smelter and Refinery boards being obtainable from the Autolathe instead. A _boulder processing beacon_ can also be obtained from the mining points vendor as a reward to assist with boulder processing. Boulder processing beacons can be used to spawn in a new BRM, refinery, and smelter on the tile the user is standing on, however **you'll still need to link them to the ORM**! All three machines can be upgraded with Stock Parts, allowing for **more boulders to be processed at a time**. It does not, however, increase the amount of minerals received from boulders, or points earned. ### Mining Borg Tweaks Mining borgs have been given some minor adjustments to compensate for the changes to mining. Their mineral scanner, which now has an active component to gameplay, is now a module as opposed to built into the mob. This module allows for the same ability to discover and start waves of monsters to fight. Mining modules will find that their PKA now has a total of 90% mod capacity as compared to the 80% they had before, to allow for more robust defense of ore vents. In addition, all borgs and AIs can interact with the BRM for boulder collection. ### Mining Mech Tweaks Mining Mechs have had their utility tweaked as a result of these changes as well. Mineral scanners to be used on mining mechs now have a larger radius by comparison to their handheld cousins. Similarly, it now has an active scanning button, which will actively discovery nearby ore vents. To begin wave defense, you will need to hop out and scan a second time however, so that you can properly accept the risks of drawing a horde of bloodthirsty wildlife towards you and your companions. Mechs can also manually process boulders, similar to mining tools using their drill. ### Golem Tweaks Golems, being more gentle and less aggressive than humans, while being made out of LITERAL ROCKS, have a greater need to secure access to ores and minerals to eat. As such, they have adapted to be able to do two new things: - Golems may now right click ore vents to be able to manually haul a boulder out of the vent. This costs a hefty amount of stamina, but it allows for golems to avoid combat during regular gameplay. - Golems may now left click a boulder with an open hand in order to manually process a boulder like a pickaxe. While not faster, it is consistent and prevents golems from starving if they have access to a vent, but no ores, somehow. ### Gulag Tweaks The labor camp, being a camp for rehabilitation and ~~excessive manual labor~~ has been tweaked. Boulders now replace the random minerals located on their island, and to acquire their prizes inside, much be excavated and then broken out of the rock. Now YOU TOO can excavate minerals and become a true mineral hero by working your way to freedom. ### Mining Point Changes As a result of fewer mining points being available across the map due to the new ore spawning mechanics, and the shift in how and when ores will be coming in, almost every progress based mining point cost has been reduced by around 10-20%. Many numbers are still subject to change at present, but the idea is that core progress unlocks should be made a bit more available earlier in the round before players can start to solo or duo larger or more difficult ore vents, after which they'll be rolling in ores. ### Rarities Every once in awhile, an unusual boulder will get hauled up from the mineral rich depths of lavaland. These **Artifact boulders** can occasionally produce rare items, but for now they've mostly just been pulling up **Strange objects** for science. Nanotrasen Natural Sciences department will reward you extra points to be collected by boulder processing machines for successfully extracting one. In the future, this opens up a passive reward space that mining can reward to the station, like providing cytology DNA samples, ancient seeds, or other artifacts. ### Misc notes - Boulders can be stored in all varieties of ore boxes (ground, mech) should you choose, however as mentioned it's best to leave them where they spawn and teleport them to the station for convenience. - Maps that are not subject to cave generation will find that they are largely untouched in terms of mineral balance. - Future or existing ruins can now be tweaked to have a mineral balance cost, as the ore vent ruin does. This will allow us to spawn in more interesting ruins for pre-made combat challenges. - There are unique ore vents that spawn across the map, that will summon a boss mob relevant to that map. If the boss mob is defeated, that vent will spawn large boulders pulling from every possible ore type that can spawn. Not for the faint of heart! - Similarly, the number of ore vents and mineral budget is now adjustable in the cave generation procs, so maps may spawn with more or less ore vents as desired for balance. - Artifact boulders opens up a LOT of room for possible future content like archaeology, xenoarch, artisci, and other design spaces! - Megafauna STILL SPAWN ON THE MAP. They just happen to spawn in addition to boss ore vents. - **I'll add more to this as I get asked questions and remember things, this is a huge PR and I'm confident I've missed at least something** ## Why It's Good For The Game I outlined a lot of this in #78040, so I'll try and keep this relatively snappy this time, while noting that I've made some concessions to make the whole system a lot more playable while not trying to break out design decisions that are at the end of the day, better for the game and the overall resource balance in round. Minerals are a very poorly balanced system, and have been since their inception many years ago. We heavily rely on mineral balance in round, and yet we've really only balanced it by introducing so much supply that there's no equivalent exchange for materials that doesn't just heavily flood the exchanged material. For example, items printed from materials that are otherwise considered "rare" on master exist in such quantities and they'll never practically run out in our allotted 90 minute time slot design. This PR adjusts how ores spawn to a point where we can minimize the amount of ores that need to exist on the map for mining to be able to progress, while still providing enough resources for the station that it covers the needs of the station adequately. Miners will need to be more strategic about what resources they've collected, and be able to make decisions about which vents are worth the risk of attempting to fight, how to prepare for a wave defense, and when to head back up for upgrades, while finally giving them at least some kind of incentive to work together and use different equipment. Resonators make cleaning up the caves around vent easy, sandbags set up easy defenses for your vent, mechs can serve as a wider range radar while mining, all while still providing a new gameplay loop to mining. By limiting the amount of ores that can enter the round from the massive, massive amounts that were coming into the round beforehand (see #78346 ), we can make ore processing more meaningful by adding more gameplay to the processing of minerals. I have some plans for that, however this PR already got bloated really REALLY badly due to scope creep and the number of intersecting systems that rammed into each other to make this PR possible. So that'll be next. Plus, as I've mentioned, we open up places for ore processing to find fossils, relics, and other things that can implemented down the line. Overall, I don't expect this PR to save or kill ore balance, but we gain a LOT more control over it through the use of our mining defines attached to this PR, and at the end of the day, that's a great place to start off of. ## Changelog 🆑 add: Added ore vents. Scanning them with mining scanners shows what minerals they contain. Scan again to fight off a horde of beasts as your drone assistant excavates the vent, so the ore vent will produce mineral boulders! bal: Ores that spawn in walls now spawn based on their proximity to ore vents, with their chance to spawn and their minerals contained scaling from low to high. add: Added the BRM, Refinery, and Smelter. These pieces of equipment are used to process ore boulders into minerals for the station. Stock Part upgrades allow more boulders to be processed at one time. They collect mining points as well, to be redeemed with an ID card swipe. add: Boulders are teleported to the station via the BRM if left untouched. Boulders can also be cracked open for a reduced amount of ore using pickaxes or golems hands. add: All stations come equipt with a pre-excavated ore vent, which produces a basic supply of iron and glass only. Scan other vents for your critical resources! add: Look there's a shit ton of changes on mining, for more detail check out the Pull Request: https://github.com/tgstation/tgstation/pull/78524. sound: New sounds and noises for your high octane factorio-like gameplay! image: All new boulder sprites for the new minerals and rocks added to the mining gameplay loop, as well as mining machines! image: Overlays appear over vents when scanned to let you know their contents at a glance when actively scanned with any mining scanners. /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
fec7ccc6fd |
The Coupon Master PDA app (#80240)
## About The Pull Request This PR adds a new PDA program to the supply category, which allows users to redeems coupons for various cargo packs (mostly goodies), like the ones also found at the bottom of cig packs. How it works is fairly simple: - Once installed, the modular computer subsystem will periodically, at a 3-5 minutes interval, generate a coupon code datum associated to a plain text code, which is sent out to everyone with the program installed. - The user can then open the program and insert the text into an input box to redeem the coupon code, which is then associated with their bank account. - He will then have to find a photocopier, and tap it with the PDA to print the coupon. Only one coupon can be printed. Photocopier fees apply, so it'd cost 5 creds to the average assistant to print the coupon. - He can then insert the coupon in a cargo console and order/reuest the associated pack (same deal as cig coupons). - Some coupon codes however, especially those with juicer discounts, will expire after a while if not printed. Albeit mostly innocuous, the program provides negative Detomatix resistance, slowly fills the computer file storage with trash files with each redeemed coupon, and halves the download speed of new apps. Not really the cleanest ware out there. This PR also extends coupons to several non-goody packs, since they have been privately buyable for over the last couple years now. Some packs get discounts less frequently however, with those in the uncommon category being roughly 1 in a 12 chance and the rare being 1 in 50. Here's a screenshot of the UI (outdated, I've reduced the height from 500 to 400 and the notice box tip to specify the right click):  Fun fact: Right now, the odds of a 75% discount coming from the Coupon Master for the 1.000.000 credits bycycle pack are roughly 0.0012%, while that of a 50% for the same pack, from a cig pack coupon are 0.0042%. ## Why It's Good For The Game These last couple days I've been wanting to test myself at making simple UIs, as well as contributing to the modular computers feature, which has started to become pretty neat ever since PDAs were reworked into a subtype of it. Beside, coupons are a very small feature limited to the bottom of cigarette packs (also possibly cursed) in the current state of affairs. Cargo is filled with packs that are niche or fluff. Modular computers also has those little things that, while interesting, do not contribute a whole lot. Maybe this is one of them, but I guess free* coupons are always a big W. ## Changelog 🆑 add: Added the 'Coupon Master' program for the PDA. Install it to receive periodical, redeemable coupons for several cargo packs. Requires NTnet connection and the messenger enabled to work. add: Coupons are no longer only limited to goodies, but may also apply discount to some other packs as well. /🆑 <sup>*minus the photocopier fee</sup> --------- Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> |
||
|
|
71a1fee2f1 |
Explodes device.dmi (#80025)
## About The Pull Request I woke up today and thought 'what would be easy thing to do today so I can say I've done something?'. Then I remembered I saw several gangtool usages the time I split radio up, and I could remedy those. 7 hours later, device.dmi is split in a folder of its own, and I've also given unique sprites to door remotes and landing desginators. ## Why It's Good For The Game The device.dmi was kind of a mess. ## Changelog 🆑 /🆑 |
||
|
|
1e76fd70b4 |
Attack chain refactoring: Broadening tool_act into item_interact, moving some item interactions to... atom/item_interact / item/interact_with_atom (#79968)
## About The Pull Request Implements half of this (with some minor changes):  The ultimate goal of this is to split our attack chain in two: - One for non-combat item interactions - Health analyzer scanning - using tools on stuff - surgery - Niche other interactions - One for combat attacking - Item hit thing, item deal damage. - Special effects on attack would go here. This PR begins this by broadining tool act into item interact. Item interact is a catch-all proc ran at the beginning of attack chain, before `pre_attack` and such, that handles the first part of the chain. This allows us to easily catch item interaction and cancel the attack part of the chain by using deliberate bitflag return values, rather than `TRUE` / `FALSE`*. *Because right now, `TRUE` = `cancel attack`, no matter what, which is unclear to people. Instead of moving as much as possible to the new proc in this PR, I started by doing some easy, obvious things. More things can be moved in the future, or technically they don't even need to move in a lot of cases. ## Changelog 🆑 Melbert refactor: Refactored some methods of items interacting with other objects or mobs, such as surgery and health analzyers. Report if anything seems wrong /🆑 |
||
|
|
5ce9d5806d |
Scopes NODECONSTRUCT_1 from flags_1 to obj_flags (#80104)
This flag only worked on the `/obj/structure` and `/obj/machinery` level, so let's rescope it from `flags_1` and put it where it belongs - `obj_flags`. Bitflag operators should be scoped to their subtype specific bitfield, not really useful to have this take up a spot on the `/atom` level if absolutely nothing other than `/obj`s use it. |
||
|
|
9ec97d594c |
Retools renamedByPlayer into TRAIT_WAS_RENAMED (#80013)
## About The Pull Request On the tin, this lived on the `/obj` level and polluted a lot of stuff even though only a very small fraction of stuff actually leveraged it. Let's make it a trait for that boolean-like behavior so I can be happier scrolling through view-variables with less non-necessary things. I wish we could tie it to unique sources but that whole drinking glass thing makes me suspicious of weirder things so I think the way we do it (source being a `REF()` to the thing itself) is probably fine enough for the time being. ## Why It's Good For The Game Same behavior one can expect but just a bit cleaner on the backend. ## Changelog Nothing that particularly concerns players. |
||
|
|
837ddf7d00 |
Standing on structures such as crates, tables and bed will now look like it. (#79797)
## About The Pull Request From the creator of 'cosmetic' elements such as footstep_override and immerse... I've made an element called elevation that nudges mobs a few pixels up while standing on things like tables, crates and beds. Screenshots of many clones of the same character standing on different objects:  ## Why It's Good For The Game It makes it look like the mob is actually standing on an elevated surface. ## Changelog 🆑 add: Standing on structures such as crates, tables and bed will now look like it. /🆑 |
||
|
|
c670e5d921 |
[NO GBP] Makes dart insert projectile var modification code slightly better (#79886)
## About The Pull Request Ninja told me that I shouldn't use a signal to get the variable modifiers that a dart insert applies to its projectile. When I asked if using a callback passed as an initialization param was okay, Potato told me it was better. ## Why It's Good For The Game Less code smells. ## Changelog No player-facing changes. |
||
|
|
376781879c |
Different pen types have unique behavior when used in foam darts. (#79587)
## About The Pull Request This PR makes the following changes: - Refactors inserting items into foam darts into a component on items that can be inserted into darts - Adds the aforementioned component to pens - Provides an inspection tip for how to modify a foam dart - Gives different pen types specific behavior when used in a foam dart Pens typically give a foam dart 5 brute and 50% embed chance (affected by falloff). The following types of pens give the specified properties (usually directly derived from the pen's stats and additional functions): - Red pen (and four-color pen set to red): Slightly faster dart - Captain's fountain pen: Slightly faster dart, and 75% base embed chance - Sleepypen: Tries to inject its reagents into the hit mob, but doesn't penetrate thick clothing like syringe guns do - Energy Dagger: 35 brute, 100% base embed chance, and slightly faster dart - Survival Pen: Mines rocks on impact - Fine Tip Pen (if someone somehow manages to get one): 100 bare wound bonus and 9000 demolition modifier ## Why It's Good For The Game Expands the emergent gameplay possibilities of using pens in foam darts. While there are balance risks involved with traitors being able to buy the equivalent of reusable 45u syringe shots and 35 brute bullets, you are not likely to get your pen back once it hits its target, unless you somehow have the recall spell and have bound the pen to it. There are probably more TC-efficient ways to achieve comparable projectile weaponry, but foam dart guns have an air of subtlety to them... at least until your skin is pierced by a pointy writing implement that may also be something more deadly. If maintainers still have balance concerns, please let me know. ## Changelog 🆑 add: Certain types of pens now function like you expect they would when inserted into a foam dart qol: Examining a foam dart closely will show you how to modify it, or what it is modified with /🆑 |
||
|
|
0dce537fc9 |
Add error logging for when send_fax_to_area is given a non-existent area (#79670)
## About The Pull Request `send_fax_to_area` had no handling for when the currently loaded map does not have the area passed to it, leading to a runtime when the fax item is force moved to nullspace where the fax currently exists. This PR just adds some extra map logging to make mappers aware of the map error and then it early returns, hopefully leaving the fax machine to GC. This is intentionally not a ST because mapping logs are much quieter than an ST and there are some realistic cases where the currently loaded map does not have a given area. ## Why It's Good For The Game Fixes #79668 fastest fingers in the west ## Changelog 🆑 fix: Fixes a runtime when the radioactive nebula trait runs with a map that has no virology area. /🆑 |
||
|
|
130b3dfa64 |
Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request More code improvements for reagent holder. As you can see it removes a lot more code than it adds so code savings are significant. This does not touch on any floating point arithmetic, all that is behind us, this focuses on removing redundant procs and merging existing procs to achieve the same functionality so if you do see any changes in reagent related behaviour it's not intentional and should be reported as a bug here. The following code changes can be summarized into points. **1. Removes procs `get_master_reagent_id()` & `get_master_reagent_name()`** Both of these procs have the exact same functionality as `get_master_reagent()` with the only exception of returning a different value. Instead we can just call `get_master_reagent()` directly and infer the name & type of it ourselves rather than creating a wrapper proc to do it for us, therefore reducing overall code **2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`** The proc `remove_all_type()` is highly inefficient, it first uses a for loop to look for the reagent to remove & then it again calls `remove_reagent()` on the reagent once it has found it. We can just embed this functionality directly into `remove_reagent()` by simply adding an additional parameter `include_subtypes`. This way the operation is faster, and we reduce the code to get the job done. Also now `remove_reagent()` will return the total volume of reagents removed rather that a simple TRUE/FALSE **3. Removes & Merges `trans_id_to()` proc into `trans_to()`** Both these procs have the same job of transferring either a single reagent or all reagents. `trans_id_to()` is a scaled down version of `trans_to()` because - It does not have any `method` var. This means if you want to transfer a single reagent to a mob/organ or any other object it does not have the functionality to expose the target to that transferred reagent. - It does not have a `multiplier` var to scale reagent volumes - It does not have code to deal with organs or stop reactions i.e. it does not have the `no_react` var. We can overcome all these short comings by simply adding an extra var `target_id` to specify what specific reagent to transfer therefore attaining the same functionality while keeping the benefits of `trans_to()` proc therefore reducing overall code **4. Lowers plumbing reaction chamber tick usage for balancing ph.** Rather than invoking a while loop to balance ph it's much easier for the player to simply make the reaction chamber wait for e.g. add a reagent that will never come. This will make the chamber wait therefore giving the reaction chamber ample time to correctly balance the ph and then remove that reagent from the list therefore getting correct ph levels. No need to create code hacks when the player can do it themselves so the while loop has been removed ## Changelog 🆑 code: removed redundant procs `get_master_reagent_id()` & `get_master_reagent_name()` code: merged `remove_all_type()` proc with `remove_reagent()` now this proc can perform both functions. `remove_reagent()` now returns the total volume of reagents removed rather than a simple TRUE/FALSE. code: merged `trans_id_to()` proc with `trans_to()` now this proc can perform both functions refactor: plumbing reaction chamber will now use only a single tick to balance ph of a solution making it less efficient but more faster. Just make the reaction chamber wait for longer periods of time to accurately balance ph refactor: reagent holder code has been condensed. Report any bugs on GitHub /🆑 |
||
|
|
b5654d7203 |
Security Pen and Penlight improvement (#79299)
## About The Pull Request Improves penlight sprite and code. A new type of pen has been introduced - the Security Pen. This pen is red and can create a holograph around a person, similar to a medical penlight. The holograph prompts the person to surrender for 30 seconds, and the holograph itself is visible for 5. There is a 30-second cooldown between usage. Holosign itself does nothing except be visual, just like medical holosign **(DO NOT MISTAKE HOLOSIGNS FOR HOLOBARRIERS)** https://github.com/tgstation/tgstation/assets/42353186/1ee5f794-7218-4e52-b04f-3ebb50bd224a Now every Security member spawns with a Security Pen in their PDA. Now you can print Security Pens at Security Techfab, and Penlights at Medical Techfab. ## Why It's Good For The Game The only way to prompt someone to perform the surrender emote is by holding them up with a gun. However, this mechanic can be quite unreliable, even after updates, especially if the person is moving. As a result, many players are unaware of how to prompt the surrender emote or even about its existence, so they don't know they can trigger it themselves by typing "*surrender". This enables non-lethal arrests without stun batons or other tools. Sprites are a significant improvement as the previous penlight sprites were outdated. ## Changelog 🆑 qol: There is now a more convenient way to prompt surrender to emote - the Security Pen. Each officer is equipped with one in their PDA. Simply click someone with it to prompt a 30-second surrender. They are printable at Security Techfab as well. qol: Penlights now are printable at Medical Techfab. image: Penlights got a new cleaner sprite to replace its ancient one code: The code for Penlight's holographic sign has been improved. /🆑 |
||
|
|
0de1982756 |
Intercom Resprite and Tweaks (#78366)
## About The Pull Request Changes the sprites of the Station Intercom, Command Intercom, and Prison Intercom to the next ones:    Now Station Intercom and Command Intercom descriptions are changed to tell more about their real functionality. Command Intercom now has High-Volume settings like heads headsets. There is now a memo with frequencies of every channel on the station, the memo is placed near the Command Intercom and in the Telecommunications Room. ## Why It's Good For The Game Intercoms are part of the "old wall-mount" sprites that were never touched, besides the brief addition of overlays. Replacing them to design more familiar of other wall-mounts will make it less ancient. Making the Command Intercom and Prison Intercom look unique ensures players (especially new ones) can distinguish them by just glancing without needing to examine them. The Command Intercom having a High-Volume setting makes it even more unique as an item that is only met in one room at the station, also makes any Command orders given through an intercom (during Telecomunnications outages) more noticeable. The description change gives more useful information about Station Intercom and Command Intercom. Now players (especially new ones) can understand that Station Intercoms are usable during telecommunications outages, and Command Intercoms can be set to any frequency. The memo will help players (especially new ones) understand what numbers they should input to access certain channels using Command Intercom, as right now, the only way to find out the frequencies is through wiki or directly checking servers. <!-- 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 🆑 qol: The Command intercom now has a High-Volume setting like command headsets qol: A memo telling frequencies of station radio channels are now present near the Command intercom and T-Comms room image: Station, Command, and Prison intercoms have received new sprites spellcheck: Station and Command intercom descriptions have been changed to tell about their functionality /🆑 |
||
|
|
93ec5a72f7 |
A comprehensive refactor / cleanup of bullet_hit and on_hit to cut out a single bad species / mob proc (#79024)
## About The Pull Request
- Refactored `bullet_act`. Adds `should_call_parent` and refactors
associated children to support that.
- Fixes silicons sparking off when hit by disabler fire.
- Desnowflakes firing range target integrity and cleans up its
bullet-hole code a bit.
- Cleans up changeling tentacle code a fair bit and fixes it not taking
off throw mode if you fail to catch something.
- The Sleeping Carp deflection is now signalized
- Nightmare projectile dodging is now signalized and sourced from the
Nightmare's brain rather than species
- Refactored how cardboard cutouts get knocked over to be less
snowflaked / use integrity
- Also adds projectile `on_hit` `should_call_parent` and cleans up a bit
of that, particularly their arguments.
- On hit arguments were passed wrong this entire time, it's a good thing
nothing relied on that.
## Why It's Good For The Game
This is cringe.
|
||
|
|
0f898b1b4a |
Saggy fax (#78962)
 ## About The Pull Request Makes faxes display with vertical offset when on a table. ## Why It's Good For The Game Looks nice ## Changelog 🆑 fix: The crew is instructed to place fax machines properly in the center of a table without hanging. /🆑 |
||
|
|
3d46a23eb7 |
Paper bins behave properly when dumping their contents. (#78702)
## About The Pull Request Fixes #78696 `dump_contents()` for paper bins was never updated to match the refactor in #69586. This meant that it didn't work at all, dumping only initialized sheets of paper and not removing references to them from the bin itself. Most tangibly, this means that cutting open a natural bundle of paper deletes all of the paper along with the object. The paper bundle problem is now fixed. I don't know if there's actually any way for a regular paper bin to dump its contents, but it works properly regardless. ## Why It's Good For The Game Dumping the contents out of something should dump the contents out of that thing. ## Changelog 🆑 fix: Cutting open a hand-pressed paper bundle no longer deletes all of the paper. /🆑 |
||
|
|
99950517aa | Quick Harddel Fixeees (#78253) | ||
|
|
8464ef9727 |
Fixes Multitool Buffer Clearing and Adds Multitool Linking Balloon Alerts (#78309)
## About The Pull Request I was working on a feature that required the buffer of a multitool to be cleared out after linking two devices, when I noticed it wasn't possible to clear the multitool's buffer. The change to multitools in #77639 made it impossible to set the buffer of a multitool to null without destroying the stored object, yet many objects still tried to have the multitool clear it's buffer after a successful linkage. This creates a new proc, clear_buffer() dedicated just to clearing the buffer of a multitool. Also made all of the multitool linkage messages balloon alerts. If there's any issues or things I can improve please let me know, I'm a bit new to BYOND and DM but I'm working on learning so I can make some more ambitious projects! _(I think I got the signaling right)_ ## Why It's Good For The Game Some objects aren't meant to be saved in the multitool's buffer after the initial linking, this should fix that. Also balloon alerts are nice. ## Changelog 🆑 fix: Nanotrasen has finally recalled their faulty multitools and replaced them with working ones! The multitool's buffer now properly clears itself. qol: Moved multitool link messages to balloon alerts /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
a77ac3e4f1 |
Adds a new component so that items that are "attached" to walls will now drop/deconstruct on turf destruction. (#77417)
## About The Pull Request Adds a new component, called wall_mounted, which applies on the wallframe objects on construction, as well as a number of wall frame objects and structures to cover mapped in, roundstart objects of the like. I might have forgotten a few, but this covers the vast majority that players will run into in a given round. This will cover wall destruction, turf explosion, the whole nine yards, and call that object/structure/machine's deconstruct proc. We have some special handling for intercoms as well since they're apparently items. So most basic case is this: You have a wall. that wall holds a sign. If you examine the wall, it tells you that the wall is currently supporting the **Example Sign**. It tells you that if the wall is damaged or destroyed, the sign will **fall off the wall.** So, if you were to welder, bomb, or hulk your way through that wall, it would call the deconstruct() proc on that sign, and fall off the wall, leaving an item sign at the foot of the wall. ## To-Do - [x] Stop breaking all wallmounts when operating shuttles (Signal conflict with COMSIG_TURF_CHANGED 😔) - [x] Confirm that the ~~deconstruct~~ designated proc of each wallmount falling is sane for the intended object - [x] Clean up the contents of the wall_mounted component to reduce copy-paste on object init. - [x] Add it to more stuff that may just not have a directional helper? - [x] ~~Change how APC construction is handled to make it easier!~~ - [x] ~~Don't accidently nerf malf AI into the ground I guess~~ ## Why It's Good For The Game Closes #22283. Helps close more of #47526. Closes #54983. Closes https://github.com/wall-nerds/wallening/issues/90. All of these objects are "wall mounts". It stands to reason that they're mounted to the walls they appear to be attached to. This attempts to rectify them by giving them a turf link to the turf they're mounted to, and then upon changes to that turf, dropping or breaking that object. It'll need a little more polish to get to 100%, since I can see a few more issues to iron out first, but I'm dropping this here for now to get some feedback and put some fire under me to get this completed. ## Changelog 🆑 add: Wall mounted objects (Things like APCs, Air Alarms, Light switches, Signs, Posters, Newscasters, you name it) will now fall to the ground and break or deconstruct when their attaching wall is changed or broken. /🆑 |
||
|
|
009af8c2ce |
[TEST-MERGE FIRST] Wound refactor number two: Full synthetic support (#78124)
## About The Pull Request Heavily refactors wounds AGAIN. The primary thing this PR does is completely change how wounds are generated and added - while the normal "hit a guy til they bleed" stuff works about the same, asking for a specific type of wound, say, like how vending machines try to apply a compound fracture sometimes, isnt going to work if we ever get any non-organic wounds, which the previous refactor allowed. With this PR, however... * You can now ask for a specific type of wound via get_corresponding_wound_type(), which takes wound types, a limb, wound series, etc. and will try to give you a wound fitting those specifications - but also, a wound that can be applied to a limb. * This will allow for a vending machine to apply a compound fracture to a human, but a collapsed superstructure (assuming my synth wounds go in) to a robot There are now new "series types" and "wound specific types" that allow us to designate what series are "mainline" and randomly generatable, and what are "alternate types" and must be generated manually - you can see the documentation in wounds.dm. The behavior of limping and interaction delays has been abstracted to datum/wound from bone wounds to allow just, general ease of development Pregen data now allows for series-specific wound penalties. Example: You could set a burn wound's series wound penalty to 40, which would make wound progression in the burn category easier - but it would not make it any easier to get a slashing wound. As it stands wound penalties are for wounds globally Scar files are now picked in a "priority" list, where the wound checks to see if the limb has a biostate before moving down in said list. Example: Wounds will check for flesh first, if it finds it - it will use the flesh scar list. Failing that, they then check bone - if it uses that, it will use the bone scar list. This allows for significantly more modular scars that dont even need much proc editing when a new wound type is added Misc changes: most initial() usage has been replaced by singleton datums, wound_type is now wound_types and thus wounds can accept multiple wound types, wounds can now accept multiple tool behaviors for treatment, wounds now have a picking weight so we can make certain wounds rarer flatly, This PR also allows for wounds to override lower severity wounds on generation, allowing eswords to jump to avulsions - but in spirit of refactoring, this has been disabled by default (see pregen data's competition_mode var). ## Why It's Good For The Game Code quality is good! Also, all the changes above allow wounds to be a MUCH more modular system, which is one of its biggest problems right now - everything is kinda hardcoded and static, making creative work within wounds harder to do. ## Changelog 🆑 refactor: Refactored wounds yet again fix: Wounds are now picked from the most severe down again, meaning eswords can jump to avulsions fix: Scar descs are now properly applied /🆑 |
||
|
|
3c0159b143 |
replaces surgical and coroner duffels with surgery trays and medical carts, resprites razor (#77975)
## About The Pull Request replaces all instances of surgical duffels with surgery trays, and all coroner duffels with morgue surgical trays. they contain about the same items, with surgical trays/carts also having bone gel and tape, since their list of holdable items is much more limited. the surgery tray is a diagetic storage unit that displays any surgery tool it's holding in a small, almost world-state esque form on top of it. it can be carried around by dragging it on to yourself, but it will slow you down like an unzipped duffel would. it can also be deployed by activating it, and pulled around, but it will roll noisily in the process. currently, all tool tiers are supported - from alien, to advanced, to cruel, to normal.  here you can see just a few of the possible combinations of tools - default, default morgue, advanced, and alien. but any combination of these tools should work together somewhat cleanly, as you can see here:  also adds a medical razor variant, because otherwise they wouldn't fit with the look of the other tools on the tray, before and after here:  ## Why It's Good For The Game having constantly visible tool storage like this means you don't have to worry about the one tool you need from the bag being stolen - if it is, you can see it before an operation starts, and plan around that! it also gives a little flexibility to mappers - if they'd like a more mobile cart for their medbay, or if they'd like the somewhat stationary tray. it also plain looks cool, and isn't quite as clunky as a duffelbag would be. ## Changelog 🆑 add: adds medical carts and surgery trays image: gives the surgery razor a unique sprite /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: JohnFulpWillard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
69f51c6c65 |
Fixes typo 'transfered', olive oil reaction repath (#78064)
## About The Pull Request Transferred. ## Why It's Good For The Game How did this get to be in 71 files?! This bothers me. Also changes 'quality_oil' typepath in the reactions to 'olive_oil' to match its rename post-foodening. ## Changelog N/A |
||
|
|
554edc60e9 |
[TEST-MERGE FIRST] Allows all limbs to be dismembered and significantly refactors wounds (#77813)
## About The Pull Request **_THIS PR UPDATES THE SCAR VERSION - ALL EXISTING SCARS WILL BE WIPED_** Expands the wound system functionality to support any type of limb at all. To do this, wounds have been significantly refactored. For starters, wounds now use limb biotype instead of wound type for determining what they can be applied to. They also use singleton instances for most "can we apply this" checks instead if copy pasted initial(). Wounds now use a "wound series" instead of wound_type for determining the, well, series. Previously, all WOUND_BLUNT wounds were considered bone wounds, making it impossible to have multiple WOUND_BLUNT wounds at once. Now, its based on wound series - bone wounds are of the blunt bone wound series, and use the typical logic. One change that results from this is the ability for everything with a jointed limb to get a dislocation. Yes, this includes things like prosthetics. On the note of external and internal biotypes: Exterior are bones, Interior is flesh. Interior protects exterior from slash until its mangled, at which point it either exposes exterior to slash or allows dismemberment if theres no exterior. Basically - it acts the exact same way, except its not hardcoded, and its more modular. A lot, lot more changes were made - I cant name them all, but if youre interested, you can read up. Wounds have more procs, more modularization, and less hardcoding. Sadly, scars have been updated in such a way so that the wound version must be updated. Scars will be deleted. ## Why It's Good For The Game As it stands, half the limbs in the game can't be dismembered. This changes that, allowing every single limb to be dismembered. The two dismemberment critera are now: 1. If able to get mangled flesh or bone, it can be dismembered once it gets mangled flesh and bone (or JUST flesh if it only has a internal biostate, vice vers afor bone if external only) 2. If it cant be dismembered by the above, it will have a chance to dismember when at or above 80% of its total max damage Finally, code being better is usually a good thing. ## Changelog 🆑 balance: Prosthetics and slimepeople can now have limbs dismembered balance: Slimepeople can now receive slash wounds, but cannot bleed balance: Most limbs can now be dislocated refactor: Scar backend reworked, scars will be wiped as they update to the new format /🆑 |
||
|
|
b77c1c85ea |
MODLink System (+ NWTLMM) (#77639)
## About The Pull Request A pact made with `@Kapu1178` Small changes you should not care about: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module Admins can now Shear matrices of objects in Modify Transform Multitool buffers have been a little refactored to use a setter proc that saves them from causing hard dels Cooler stuff: A revival and remake of [Nobody Wants To Learn Matrix Math](https://github.com/tgstation/tgstation/pull/59103), this time with additional tooling for quick matrix calculations.  The MODLink system, available through every MODsuit and MODLink scryers (a neck item obtainable from advanced modsuit research or charliestation) Let's you make a holographic call with any other MODLink user, where you can chat in realtime and see what's up with em   ## Why It's Good For The Game Adds a fun way for the crew to communicate with each other that can be done in real-time with relative privacy compared to radio. ## Changelog 🆑 Fikou, Armhulen, Sheets (+rep for Mothblocks and Potato) fix: RD MODsuit outfit (admin only) no longer has a beret that blocks the activation of the suit fix: The beret used by death squad officers no longer is blocked from being put on a hat stabilizer module admin: Admins can now Shear matrices of objects in Modify Transform admin: Admins now have access to Test Matrices in the VV dropdown, an all-in-one tool for editing transforms. add: MODLink system, available through scryers (from RnD and Charlie Station) and through MODsuits. Lets you call people with holographs! /🆑 |
||
|
|
1be27a4ffe |
Dunking handle_atom_del() in the trash bin. (#77339)
Whatever you do, if it warrants the use of something like `handle_atom_del`, chances are `Exited` can do it better, as most of these cases involve movables that shouldn't be moved out of their loc (`Destroy` forcefully moves movables to nullspace) without calling specific procs, and for the remaining few, `handle_atom_del` doesn't even cover the eventuality of a movable being deleted outside the source atom, so it's quite garbage. Beside, I feel confident in saying `handle_atom_del()` is older than the DCS, an echo on the workarounds done at the time. |