* General maintenance for Lathes (#81244)
## About The Pull Request
1. **Qol Stuff**
- Screentips & examines for screwdriver, crowbar acts, multiool &
wirecutter Also for Alt click
- Techfabs can now also use the Mouse drag functionality to set drop
target for items
- Lathe printing animation now plays on loop instead of just flicking
once till printing is finished for more visual feedback
2. **Code Improvements**
- Merged `start_making()` with `do_make_item()`. That proc was like only
3 lines long and used only in 1 place so let's just move that code to
`ui_act()`
- Merged `user_print_item_id()` with `ui_act()`. Again was used only in
1 place so let's just move that code in to save some proc overhead
- Sets `processing_flags` for autolathe to `NONE` cause we don't use
`process()`
- Autodocs vars such as `hacked` , `shocked` etc & procs
- `maxmult` is now computed client side saving backend bandwidth,
`construction_time` is removed from lathes which did not use it
- Removed all usages of lathe taxes and their related vars, removed
engineering lathe no tax from ice moon, replaced with normal engineering
lathe
3. **Fixes**
- Lathe sheet insertion animations are now linked & work again for all
material types inserted via remote silo/local storage,
silver/titanium/plastic all play the same animation(that is
`protolathe_shiny` overlay). Other materials have their own respective
overlays
- Fixes#81243. Calling `update_static_data_for_all_viewers()` is too
expensive for the UI. We should instead use `SStgui.update_uis(src)`
which will report the `busy` status to the UI more immediatly
- Fixes#81236. Some problems with the params passed to the timer
callback. It should now print the correct number of requested items
- Fixes#81192. `design.materials` would runtime for custom material
items as they were list of texts not materials. We have to pass our
manually parsed list of materials for an specific item to ensure they
are set & used correctly. Same fixes apply for techfabs as well
## Changelog
🆑
qol: adds screentips & examines for screwdriver & crowbar acts & alt
click.
qol: techfabs can now use the mouse drop functionality to set drop
target.
qol: lathe printing animation plays on loop while printing rather than
flicking once for more visual feedback
fix: lathe sheet insertion animations are now linked & work again for
all material types inserted via remote silo/local storage
fix: printing custom materials items from autolathe works again.
fix: printing multiple items from lathes will actually print that
correct quantity of items requested.
fix: printing items the 2nd time around from lathes won't cause the UI
to reload each time.
code: autodoc for some vars & procs, merges procs.
refactor: Optimized code for autolathe & techfabs in general. Report
bugs on github
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* There we go
* aaaa
* Missed this little thingy
* There we go, should be clean af
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
You can now move and talk through statues and mannequins (#81188)
## About The Pull Request
I recently played a game where I rotated my skeleton model while
rotating my own character at the same time and it being in sync gave me
the realization on how cool it would be if the Coroner was able to
simply control the skeleton body.
I find skeleton displays very funny and I want to see more funny things
happen with them, so I thought this would be a good place to start, with
the benefits that it also works on mannequins and statues too so they
aren't left out.
Basically, while it is unanchored, if you have a statue/mannequin
grabbed, it will change its direction as you do, and speak the same
words you do. Your own messages can only be heard if the person is
directly next to you, revealing that it was you talking through it all
along.
I was originally gonna add this to the simple rotation component but
moved off when I decided to add talking through it, I left in the code
improvements I made to the component though since it is one of the
oldest components and hasn't been touched in a while.
Video demonstration (before I added the person also talking, just ignore
that missing)
https://github.com/tgstation/tgstation/assets/53777086/27242fc3-9649-418d-95cb-b31619319e97
While fixing the Toilet bong's rotation stuff I noticed a lot of it
wasn't up to proper code standards so I went over it and fixed issues I
had with it. It now doesn't give text saying you found something nasty
to species that still likes mice (like flypeople), and fixed its update
appearance to match the codebase standard set by the introduction of
``update_appearance`` many years ago.
## Why It's Good For The Game
It's a funny small idea I had and got inspired to add, it's a niche
mechanic that I think fits the aesthetic I am going for with Coroner and
also give a funny interaction with the human-like inanimate objects.
## Changelog
🆑
fix: Species that can eat mice don't get disgusted from seeing one in
the toilet bong.
add: Grabbing an unwrenched statue/mannequin/skeleton model will now
move its direction as you move yours, and you can talk through it.
/🆑
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Fixes surgeries runtiming constantly when having the surgery initator open, fixes some surgeries missing sounds (#81307)
## About The Pull Request
Fixes#79318
- See the issue for more information. I fixed the runtimes as expected,
and then removed `SURGERY_REQUIRE_LIMB` from some surgeries which don't
actually require a limb, such as implant removal, dissection, and living
revival. I could've easily missed some, and as a result some surgeries
are lost to the void and unselectable, but from what I could tell in
testing it seems... fine.
- Adds `SHOULD_CALL_PARENT` to surgery `can_start`. Cleans up some
surgery `can_start` overrides.
- Adds missing sounds to puncture repair surgery.
## Changelog
🆑 Melbert
fix: Fixed Puncture Repair surgery not having surgical sounds
fix: Fixed Surgery Initiator potentially showing invalid surgeries
/🆑
* Fixes surgeries runtiming constantly when having the surgery initator open, fixes some surgeries missing sounds
* Fixeed
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Material container drops sheets only on object deconstruct & not destroy. (#81290)
## About The Pull Request
- Fixes#81289
It has nothing to do with `dump_contents()` but with the material
container that drops its materials on `Destroy()` causing side effects.
Now it only drops sheets when an object is deconstructed but not
destroyed.
For this to work properly on all instances we have to ensure
`deconstruct()` is not overridden at least on machines for now, so they
can send `COMSIG_OBJ_DECONSTRUCT` signal. That comes in the next PR
## Changelog
🆑
fix: deleting objects with local material storage(autolathe, drone
dispenser etc) no longer drops sheets, they only drop materials when
deconstructed
/🆑
* Material container drops sheets only on object deconstruct & not destroy.
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Fixes burning a bible giving you an infinite amount of curses. (#81248)
## About The Pull Request
Burning a bible now gives you 1 curse, instead of INFINITY curses.
## Why It's Good For The Game
It looks like https://github.com/tgstation/tgstation/pull/78899 forgot
about bible curses.
I think this was an oversight.
## Changelog
🆑
fix: burning a bible no longer gives you INFINITY curses
/🆑
* Fixes burning a bible giving you an infinite amount of curses.
---------
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Kicks Martial Arts out of the attack chain (yippee), makes it use signals, plus a large clean up of existing martial arts (#81097)
- Kicks Martial Arts out of the attack chain.
- All Martial Arts attacks are now handled via unarmed attack or grab
signals
- This means all martial arts are now technically on the living level,
allowing any mob that can unarmed attack to martial arts. Sort of. YMMV.
- All martial arts block checking is now handled by the arts themselves,
meaning you can selectively decide for a martial arts strike to not be
blocked. Maybe good for the future.
- A comprehensive cleanup of all existing martial arts. Improving var
names, code, adding some missing animation calls, etc.
Fixes#74829
Untangles the mess that is martial arts, making it a lot easier to work
with the attack chain and making it overall a ton more consistent.
🆑 Melbert
refactor: Big martial arts refactor, they should now overall act a ton
more consistent. Also technically any mob can do martial arts. Let me
know if something is funky.
/🆑
---------
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Bit of reference handling for custom food holders (#81195)
## About The Pull Request
`ingredients` seems to hold a reference to all the food in our atom's
contents that are used to make up our custom food, but it doesn't clear
it anywhere.
So I implemented `Exited`, as well as cutting the list on component
`Destroy`.
* Bit of reference handling for custom food holders
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Remove unneeded 'a' from swabbing message. (#81118)
## About The Pull Request
When using the biopsy tool on something that doesn't have a swabbing
result it would say:
> "You do not manage to find a anything on [target]!".
The "find a anything on [target]" is incorrect and reads off, so this pr
just changes the respective statement in
`code/datums/components/swabbing.dm` to remove that a, becoming:
> "You do not manage to find anything on [target]!".
## Why It's Good For The Game
Minor grammar fix.
## Changelog
🆑
spellcheck: You no longer fail to find "a anything" when swabbing
something for cytology that doesn't have swabbing results.
/🆑
* Remove unneeded 'a' from swabbing message.
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
* Fixes a decal hard del (#81093)
## About The Pull Request
Attempting to fix this hard del here:

I think the cause is from the turf changing, which
`/datum/elements/connect_loc` does not seem to take into consideration.
Now it should.
Also cleans up the signals in `/datum/component/infective/` which may be
another potential cause of issues.
## Why It's Good For The Game
Code that cleans up after itself is nice.
## Changelog
🆑
fix: fixes a hard del with decals
/🆑
* Fixes a decal hard del
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* General maintainence for Ore Silo (#81016)
## About The Pull Request
1. **Qol**(Hopefully not an issue for feature freeze)
- Adds Screen tips & examines for screwdriver, crowbar & multitool acts
- Examining ore silo will now display its stored materials
- Location name is attached to the machine name and it greys out when
pausing the machine to make it more noticable that it is paused
- Made window wider
2. **Code Improvements**
- Auto docs procs & vars for ore silo log entry
- Fixed return values of all tool acts i.e. no more returning
`TRUE/FALSE` but the actual item interaction flags
- UI no longer computes `REF` for each machine which is expensive but
instead uses the index value in the list
- Moved global variables to their corresponding files
- Ore silo no longer starts processing round start. That proc just ended
itself anyway so why even bother registering
3. **Fixes**
- If a machine was disconnected via the ore silo UI, attempting to
reconnect that machine would cause a runtime at `RegisterSignal` in
`multitool_act` because it was already registered in `Initialize`. It
now unregisters the signal when disconnecting so that's fixed
- Each machine element in the UI does not have a unique key because it
used `key={machine.name}`. This meant after disconnecting a machine the
UI buttons would get grouped together and the pause & disconnect buttons
would not function properly. Now it uses `index` which is unique thus
fixing that problem
## Changelog
🆑
qol: added more screen tips & examines for ore silo, made UI wider,
attach location name to each machine & grey out paused machines to make
it more noticeable.
code: auto docs proc & vars for silo log entry. Fixed return values of
all tool acts
fix: ore silo UI now functions correctly after removing an entry from
the UI
fix: no runtimes when connecting a machine to silo that was previously
disconnected via the ore silo UI
/🆑
* General maintainence for Ore Silo
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
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.**
Click the link below to see a video summary of the main features of this
pull request.
https://youtu.be/Aho2omR0mjY?feature=shared
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.
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 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.
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 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 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.
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.
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.
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.
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.
- 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**
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
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.
🆑
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: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
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>
Integrated circuits for modular computers (#80530)
This PR integrates circuits for modular computers and a good bits of
their programs.
The peculiarity here is that modular computers have no fixed amount of
unremovable components (except the base one with just a couple ports for
now), instead, they're added and removed along with programs. With a few
exceptions (such as the messenger and signaler), for these program
circuits to work, their associated program has to be either open or in
the background.
For a reason or another, not all programs have a circuit associated to
them, still, however the programs with a circuit are still a handful.
They are:
- Nanotrasen Pay System
- Notepad
- SiliConnect
- WireCarp
- MODsuit Control
- Spectre Meter
- Direct Messenger*
- LifeConnect
- Custodial Locator
- Fission360
- Camera
- Status Display
- SignalCommander
*By the by, sending messages has a cooldown, so it shouldn't be as
spammy. If it turns out to not be enough, I can make it so messages from
circuit will be ignored by other messenger circuits.
The PR is no longer WIP.
I believe modular computers could make for some interesting setups with
circuits, since they're fairly flexible and stocked with features unlike
many other appliances, therefore also a speck more abusable, though
limits, cooldowns, logging and sanitization have been implemented to
keep it in check.
🆑
add: Modular Computers now support integrated circuits. What can be done
with them depends on the programs installed and whether they're running
(open or background).
add: Modular Consoles (the machinery) now have a small backup cell they
draw power from if the power goes out.
/🆑
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Minor Autolathe Refactor | Material Dupe-B-Gone (#80839)
## About The Pull Request
Refactors underlying autolathe code, mostly about how it prints items
Items are now printed sequentially
Items now have their custom materials set to the the materials actually
used to create them
Items are now printed based on their design construction time instead of
a default 3.2 seconds per item always
Closes https://github.com/tgstation/tgstation/issues/80755
## Changelog
🆑
fix: Autolathes no longer allow you to duplicate materials at higher
levels of stock parts
qol: Autolathes now show name instead of typepath when selecting a
custom material
qol: Autolathe now print out items one by one instead of waiting for all
of them to print at once
/🆑
* Minor Autolathe Refactor | Material Dupe-B-Gone
* mhm
* swap private procs on production procs to protected instead (#80972)
See title.
This was causing issues downstream
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Fix bugs regarding immobile shells. (#80976)
## About The Pull Request
In `shell.dm`:
When immobile shells were unsecured it would just directly set
`attached_circuit.on` to whatever the shell anchor state was, which
bypassed sending the signal `set_on()` sends. By instead using
`attached_circuit.set_on()` this state change should actually propagate
to the inner modules, rather than say letting an inner module with a
clock run regardless of the shell's anchor state.
Similarly, adding a circuit to an unsecured immobile shell would try to
set `attached_circuit.on` to the shell anchor state, but in addition to
not propagating to inner modules this simply did not work because the
`attached_circuit.set_shell(parent_atom)` called later would set it to
be on anyway. We resolve this by just, moving the state change until
*after* set_shell.
Finally removes the `attached_circuit.on = TRUE` from the
`remove_circuit()` proc, because
`attached_circuit.remove_current_shell()` immediately sets this to false
again anyway.
More related but separate bits probably tomorrow.
## Why It's Good For The Game
Makes immobile shells actually work only when anchored, and resolved
some related jank.
## Changelog
🆑
fix: Immobile shells no longer work regardless of anchor state if you
put the circuit in while it's unanchored.
fix: Immobile shells properly propagate their on/off state after
wrenching to inner modules.
/🆑
* Fix bugs regarding immobile shells.
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
* Fishing hook and reel line tweaks (also qol for the fish bounties) (#80599)
## About The Pull Request
This PR includes a series of small changes and additions to hooks and
reel lines, as well as the aforementioned bounties. My objective here is
to make the (base) hook and reel line feel more useful. Ditto with a few
other things.
Here's the list of changes:
- Almost all fishing rods come with a hook and reel line pre-installed.
The rod from the fishing toolbox comes with separate hook and reel line.
- Without a hook, you cannot fish. Without a reel line, the cast range
is reduced (from 5 to 3).
- Fishing with a reel line installed provides a mild boon to completion
speed by default.
- The sinewy reel line (craftable from lavaland mobs) can now be used to
fish on lava / liquid plasma, but it's a bit stiff and gives a mild
malus to completion speed.
- Unlike other hooks, the rescue and jawed hooks now allow you to cast a
line and reel in living mobs too, not only items. They even get a status
alert they can click to un-snag themselves, or move away far enough to
achieve the same effect.
- Master fishing rod buffed. It now comes with a flexible reel line and
weighted hook pre-installed, and can be cast further than other rods.
- On top of that, the jawed hook will slow down living mobs snagged by
it and is a bit harder to remove.
- when casting a line, it will now show the icon of the current hook as
projectile, not a generic one.
- Reeling now correctly checks movement resistance and anchorage.
- Reeling an object (or a mob) now plays a sound. Ditto for
installing/removing slotted items.
- A few balloon alert feedbacks.
- Minor code improvements.
- The jawed hook should look a smidge sharper.
- reel lines are now small items.
## Why It's Good For The Game
The base hook and reel line didn't do anything begin with, and you would
do just fine without them. In the end it's just a bit unintuitive for
them not to be a requirement.
Beside that, it makes sense for the rescue hook to be able to snag mobs,
so they may as well be used to drag people out of lava or liquid plasma.
As for the jawed hook, it always felt to me a bit underwhelming and a
bit of a filler I had cooked up on the moment. It really could have some
'tactical' utility in virtue of being one of those niche black market
items.
## Changelog
🆑
add: Most fishing rods come with a hook and line preinstalled. Fishing
toolboxes come with separate reel and lines as usual.
balance: Fishing hooks are now required to fish.
balance: Without a reel line, the range of fishing rods is reduced by
two tiles. Conversely, having one installed gives a mild buff to the
minigame completion speed.
balance: The craftable sinewy reel line can now be used to fish on lava
or liquid plasma, but it's a bit harder to use.
balance: The rare-to-find-in-maintenance master fishing rod now comes
with a flexible line and weighted hook preinstalled, and has better
range than other rods.
balance: Fishing reel lines are now small enough to fit pockets.
add: The rescue and jawed hook can now snag and reel in mobs, not only
items. The jawed hook also slows down when applied, a la beartrap.
qol: Fish bounties now accept filled (stasis) fish cases.
qol: Several balloon alerts for fishing rod interactions.
fix: Reeling in items (and mobs) now respects movement resistance and
anchorage.
fix: Fixed the fishing rod equipment UI being too small to fit its
components.
sound: Reeling in something now plays a sound.
/🆑
* Fishing hook and reel line tweaks (also qol for the fish bounties)
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Ice cream vat uses a radial menu (#80965)
## About The Pull Request
Removes the ice cream vat's html window for ice cream, reagents, and
cones and replaces it with a radial menu and the ability to simply
examine the machine to see its contents.
Soup and Salads currently allow you to see whats inside without the need
for science/bar goggles, so following that theme I thought it would make
more sense for it to also be the case here (and for feature parity with
previous behavior).
#### Controls
Left-click chooses ice cream flavor or ice cream cone
Right-click swaps between which one you will be choosing from
Left click with a beaker will put it inside to use for custom
ingredients
Right click with a beaker will transfer its reagents to the machine (any
that is used for making ice cream)
Dispensing custom ice cream takes from the beaker inside of the beaker
Video demonstration
https://github.com/tgstation/tgstation/assets/53777086/9ebdcb13-b29f-4b3c-9d5f-54be1f6da888
Custom Ice cream
https://github.com/tgstation/tgstation/assets/53777086/687af270-14e4-4851-bf1f-3c4da4aeb21f
## Why It's Good For The Game
The ice cream machine is genuinely confusing because of it's UI and
personally it was unironically the last kitchen tool I learned because I
just didn't think it was worth it. This makes it feel way better to use.
It also helps me with https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA which
I've been trying to chisel away at.
## Changelog
🆑
refactor: Ice cream vats now use a radial menu instead of an HTML one.
/🆑
* Ice cream vat uses a radial menu
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Makes lizard wine (and some other crafting menu drink recipe drinks) produce their intended reagents (#80874)
## About The Pull Request
Crafting recipes now have an arg that decides if crafting results will
retain their starting reagents, or have ingredient reagents transferred
into them.
So, previously, crafting a specialty drink (lizard wine, candycorn
liquor) from the crafting menu would immediately empty the new bottle's
reagents and replace it with the ethanol used in the recipe.
Now, recipes can be prevented from modifying their result's reagents by
setting unique_reagents to TRUE (False by default. I don't know what
recipes really use this functionality but I wanted to preserve it for
everything but the drink recipes it interferes with.)
Bonus: This changelog entry I found from 3 years ago, apparently fixing
this same issue.

## Why It's Good For The Game
Closes#80870.
Makes some more reagents accessible again.
## Changelog
🆑 Rhials
fix: Specialty drinks crafted in the crafting menu will now create the
intended reagents, instead of containing the reagents used to craft it.
/🆑
* Makes lizard wine (and some other crafting menu drink recipe drinks) produce their intended reagents
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
* Fixes the deployable component rotating things it isnt supposed to (#80877)
## About The Pull Request
Actually moves the rotation part of the code under the check for if the
component is supposed to rotate things
## Why It's Good For The Game
Despite setting the variable for rotating stuff to no, the component
would still rotate stuff, this is bad
## Changelog
🆑
fix: The deployable component will now actually stop rotating things
when the variable to not do that is set
/🆑
* Fixes the deployable component rotating things it isnt supposed to
---------
Co-authored-by: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com>
* Fix supermatter component runtime on non-supermatters (#80894)
## About The Pull Request
Used the wrong var for this istype check.
* Fix supermatter component runtime on non-supermatters
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Sec Biosuit craft, more bio-emergency supplies (#80622)
## About The Pull Request
Makes Security bio suit and bio hood craftable using a normal bio
suit/hood and helmet/armour vest.
Adds a box of sterile masks and latex gloves to the bio-emergency crate
from Cargo.
## Why It's Good For The Game
Security bio suit is the only one with different armour values, yet
there is only one for the entire Security department.
By giving them the ability to craft them we give more Security Officers
protection from disease without losing their red colour and armour
(which is worse in bio suits than on their armour vests). This makes
Security more likely to care about roleplaying during outbreaks, like
enforcing quarantines.
This isn't creating any new bio-suits, as to craft a Security bio-suit
you need to acquire a normal bio-suit and some spare armour.
Adding a box of sterile masks and latex gloves to the emergency
bio-emergency crate makes it more useful. There is only 1 box of sterile
gloves and 1 box of latex gloves on all of the stations at medbay at the
moment. This way they can get more sterile masks and latex gloves to
protect themselves from diseases, which is cool to see players caring
about not getting infected and being in fear.
* Sec Biosuit craft, more bio-emergency supplies
---------
Co-authored-by: DrTuxedo <42353186+DrDiasyl@users.noreply.github.com>
* Fixes another image harddel in station blueprints (and more) (#80780)
## About The Pull Request

Tin. Just more uncovering of some of these image harddels.
`blueprint_data` is a list of images.
I also went through the code and looked for any more instances of images
being qdeleted that I could find.
## Why It's Good For The Game
Hard dels begone
## Changelog
🆑
fix: fixes an /image harddel in station blueprints
code: cleaned up some more /image qdels
/🆑
* Fixes another image harddel in station blueprints (and more)
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* hygeienbots basic bots (#80435)
## About The Pull Request
turns hygenic bots into basic bots. also now PAIs and people can play as
hygeinebots. and they can wear hats
## Why It's Good For The Game
transforms hyginebots into basic bots. their old AI used to handle all
the logic. i moved some of the logic to the mob itself so players can
also clean (or burn) things. also this pr will add pathing limits to
bots, in the case the jps movement thinks it can reach something, but
actually cant, in which case the bot will give up the chase
## Changelog
🆑
refactor: hygeinebots are now basic bots. please report all the bugs
fix: fixes hygenebots not being able to patrol
add: hygeinebots can now be controlled by Players
/🆑
* hygeienbots basic bots
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Micro-optimize qdel by only permitting one parameter (#80628)
Productionizes #80615.
The core optimization is this:
```patch
- var/hint = to_delete.Destroy(arglist(args.Copy(2))) // Let our friend know they're about to get fucked up.
+ var/hint = to_delete.Destroy(force) // Let our friend know they're about to get fucked up.
```
We avoid a heap allocation in the form of copying the args over to a new
list. A/B testing shows this results in 33% better overtime, and in a
real round shaving off a full second of self time and 0.4 seconds of
overtime--both of these would be doubled in the event this is merged as
the new proc was only being run 50% of the time.
* Micro-optimize qdel by only permitting one parameter
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Fixes for mat container & ORM (#80573)
## About The Pull Request
- Fixes#80559
1) The ORM now hooks onto the local container only if off station. The
ui act if statement was also messed up but that's fixed now too.
2) Creates a dedicated signal for items inserted into the silo for
clarity & uses the helper proc defined inside remote materials for
inserting items so we don't have to specify the `context` manually.
3) Properly updates the auto Doc for the container signal defines
## Changelog
🆑
fix: Off station ORM's can redeem points again.
/🆑
* Fixes for mat container & ORM
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Fixes wallmounted lights falling on drag (#80609)
## About The Pull Request
Being able to move around lights when using the light debugger is
important
Can't just be qdeling em whenever you try
Closes https://github.com/tgstation/tgstation/issues/78662
## Changelog
🆑
fix: Dear mappers, the light debugger tool no longer deletes dragged
wall lights
/🆑
* Fixes wallmounted lights falling on drag
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Stops the automute from triggering for pet commands (#80421)
## About The Pull Request
Thanks goodness they've done the signal already for the deadchat control
component.
## Why It's Good For The Game
This will fix#78640.
## Changelog
🆑
fix: Regal rats (and others), won't be punished by the automute system
for repeating the same command several times.
/🆑
* Stops the automute from triggering for pet commands
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Removes material breakdown flags, traits & miscellaneous fixes. (#80389)
## About The Pull Request
1. Removes material breakdown flags i.e. all flags with the format
`BREAKDOWN_XXX`. These flags do nothing, there are no special checks to
transform materials based on these flags, they are passed around just
because certain procs require them for syntax purposes only.
Apparently there were plans to make these flags do something special
from the comment
302247c0d1/code/__DEFINES/construction/material.dm (L43)
But nobody got any ideas for years now. The only special thing we can do
with them now is remove them and reduce code clutter, so let's do that
The only flag that ever did something was the
`BREAKDOWN_INCLUDE_ALCHEMY` flag. This only worked when coupled together
with `TRAIT_MAT_TRANSMUTED` trait(which is only used by the reagent
metalgen) and when both this trait & flag are combined together... they
still do nothing
302247c0d1/code/game/atom/atom_materials.dm (L41-L42)
Yup they cancel out each other to prevent returning an empty list, the
traits only job was to prevent materials from being recycled (like why?
what's the benefit of that? nothing) and the flag was meant to bypass
this restriction so both the trait & the flag cancel out each other
therefore doing nothing meaningful. Best remove them both and call it a
day.
2. Fixes an error in displaying number of sheets inserted into a mat
container when that sheet is made up of alloy materials. it would count
as 2 or more because it would take the sum of total material amount
inserted and not the actual sheets. That's fixed now.
3. Remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag
4. Adds helper proc to insert materials via the remote material
component with proper context
## Changelog
🆑
fix: mat container displays correct number of sheets inserted for alloy
materials.
fix: remote materials now properly respect the `MATCONTAINER_NO_INSERT`
flag.
code: removes material breakdown flags and related traits.
code: adds helper proc to insert materials via the remote material
component with proper context.
/🆑
* Removes material breakdown flags, traits & miscellaneous fixes.
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* PDA update (Messenger works while dead, Microwave works, etc). (#80069)
This is an update that touches many more things all at once (compared to
my other PRs) meant to make PDAs in general feel more consistent and not
take away from one of the experiences we want to encourage: interaction
between players.
1. Replaced all checks of a 'pda' with a 'modular pc'. This means
technically (though not done in-game currently) other modpcs can hold an
uplink, and microwaves can charge laptops.
2. Speaking of microwave, they now don't break and require
deconstruction if the cell is removed mid-charge.
3. When a Mod PC is out of power, it will now allow the Messenger to
work (which now also doesn't consume any additional power), if the app
exists on the PC. Here's a video demonstration
https://github.com/tgstation/tgstation/assets/53777086/7ae12f81-a271-49b8-95fa-2ba54d2e2d1f
4. Flashlights can't be turned on while the cell is dead
5. I replaced a bunch of program vars with ``program_flags`` and renamed
``usage_flags`` to ``can_run_on_flags``.
6. Added a debug modPC that has every app installed by default. Mafia
had some issues in the past that were unknown because Mafia wasn't
preinstalled with any tablet so was never in create & destroy nor in any
other unit test. This was just an easy solution I had, but PDAs should
get more in-depth unit tests in the future for running apps n stuff- I
just wanted to make sure no other apps were broken/harddeling.
Currently when a PDA dies, its only use is to reply to PDA messages sent
to you, since you can still reply to them. Instead of just fixing it and
telling players to cope, I thought it would be nice to allow PDA
Messenger to still work, as it is a vital app.
You can call it some emergency power mode or whatever, I don't really
mind the reason behind why it is this way.
When I made cells used more on PDAs, my main goal was to encourage
upgrading your PDA and/or limiting how many apps you use at once, I did
not want this to hit on players who use it as a form of interaction.
This is the best of both worlds, I think.
The rest of the changes is just for modularity, if some downstream wants
to add tablets, phone computers, or whatever the hell else, they can
still get just as far as PDAs should be able to get to, hopefully.
🆑
add: PDAs with a dead power cell are now limited to using their
Messenger app.
fix: Microwaves now stop charging PDAs if the cell was removed
mid-charge.
fix: Microwaves can now charge laptops.
fix: PDA Flashlights can't be turned on while the PDA is dead.
fix: You can now hold a laptop up to a camera (if it has a notekeeper
app installed) like PDAs already could.
/🆑
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* ok
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Crafting now transfers reagents from ingredients to final product (#80391)
## About The Pull Request
- Fixes#80143
- Fixes#80381
Based on the ingredients required reagents of the final product can
differ. It now transfers the olive oil from the bottle to the toasted
seeds & the orange juice and grenadine reagent from the ingredients into
the kasei dango.
Snow cones are now also edible
## Changelog
🆑
fix: crafting now transfers reagents from ingredients to final product
making previously inedible foods (toasted seeds, kasei dango & snow
cones) edible. Other crafted food products/items now differ in reagents
based on the ingredients required.
/🆑
* Crafting now transfers reagents from ingredients to final product
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Fixes an inconsistency with ED-209's crafting recipe (#80364)
## About The Pull Request
Makes the ED-209 crafting recipe only take security helmets, just as the
Beepsky one does.
## Why It's Good For The Game
As it stands right now, any helmet can be used to assemble an ED-209.
This includes anything from your standard security helmet, to a hardhat,
an envirohelm, or even a cheap toy roman helmet. This makes it so you
need an actual security helmet, just like the Beepsky recipe does.
## Changelog
🆑
fix: ED-209s can no longer be crafted with most instances of helmet, you
need security ones just like Beepsky.
/🆑
* Fixes an inconsistency with ED-209's crafting recipe
---------
Co-authored-by: StaringGasMask <62149527+Exester509@users.noreply.github.com>
* Throwing a bee at someone injects reagents (#80354)
## About The Pull Request
Throwing a bee at someone injects that bee's reagents.
This has a larger code footprint than you might expect because venom
injection is done via an element which in turn gives a callback to a
component.
While I was touching that I also separated `COMSIG_MOVABLE_IMPACT` into
`COMSIG_MOVABLE_PRE_IMPACT` because a lot of effects trigger from
`COMSIG_MOVABLE_IMPACT` despite the fact that the throw impact can be
cancelled after the signal is sent.
I also added an inject check onto the venomous element for mob attacks,
so thick clothing can now protect you from venom injection.
I elected that Giant Spiders have big enough fangs to ignore this such
that this isn't a major balance change, as do moonicorns (that horn is
massive), Fire Sharks, and Clowns (no idea how they are applying chems
at all to be honest).
## Why It's Good For The Game
I thought about someone throwing a bee at someone like a little dart and
thought "hee hee"
## Changelog
🆑
add: If you throw a bee at someone it will hit them sting-first and
inject that bee's reagent
balance: Thick clothing can now protect you from the venom of bees,
snakes, frogs, and (small) spiders
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Throwing a bee at someone injects reagents
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Motorized Wheelchair improvements (#80045)
## About The Pull Request
This PR improves motorized wheelchairs in the following ways:
- On initialize, motorized wheelchairs will have the most basic possible
stock parts inserted. This resolves a bug where motorized wheelchairs
spawned by admins or other means (mail, mapping) were completely
worthless, as they had no stock parts in them and you could not insert
better ones. When crafted, these basic parts are deleted and replaced
with the correct ones.
- Power cells are now part of the motorized wheelchair recipe, instead
of being inserted after.
- When deconstructed or destroyed, motorized wheelchairs now drop their
power cell on the floor with everything else instead of deleting it from
existence.
- Miscellaneous old code has been tidied up, removing one-letter var
names, pointless code duplication, and the like.
## Why It's Good For The Game
I've been talking to Dalm about this, and wheelchairs are in dire need
of some improvements. Tidying up the mess that is the motorized
wheelchair seemed like a good place to start.
Firstly, it's good for motorized wheelchairs to function as expected
when not specifically crafted by hand. This is helpful to admins,
mappers, and anyone else who might have reason to make one of these
appear. It's also good that all the parts in the wheelchair drop on the
ground when destroyed, as there's no particular reason power cells
should be lost.
As for power cells being included in the recipe - it's not obvious at a
glance that you _need_ to insert a power cell after crafting, until you
try to drive your new wheelchair around. This extra step of annoyance is
now avoided by making it required to stick one in when you build the
thing.
## Changelog
🆑
fix: Motorized wheelchairs will no longer spawn in a bugged state where
they have no parts and can't be upgraded.
fix: Motorized wheelchairs will drop their power cell when destroyed or
deconstructed.
qol: Power cells are now inserted into motorized wheelchairs as part of
the crafting recipe, instead of as an extra step afterwards.
/🆑
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@ users.noreply.github.com>
* Motorized Wheelchair improvements
---------
Co-authored-by: lizardqueenlexi <105025397+lizardqueenlexi@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@ users.noreply.github.com>
* [NO GBP] Fixes runtime in mat container chat display (#80321)
## About The Pull Request
Forgot to format the chat in the right format when items are rejected by
the mat container. Rather than displaying the item is rejected it would
simply runtime & not display anything. That's fixed now
## Changelog
🆑
fix: items that are rejected by the mat container will display the chat
message saying that.
/🆑
* [NO GBP] Fixes runtime in mat container chat display
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* Mat container related refactors & patches (#80164)
## About The Pull Request
**1. Mat container `user_insert()` tweaks**
- Mat container will now skip over an item & its contents if that item
cannot be processed (not suitable for redemption or not an allowed type)
this is not only realistic(if an item has an tough outer shell you can't
crush it to access its contents) but also saves us computation time as
we can skip over contents quickly
- Mat container now properly respects the `MATCONTAINER_SILENT` flag
- You can now hit machines like autolathe, protolathe etc with iron
sheets (or any other material item type those machines accept) when in
combat mode rather than inserting them because it makes sense
- Mat container now has much reduced chat spam as it will sum up all the
items inserted, and the material collected rather than displaying them
individually.

Much improved readability and overall faster as we do much less
`to_chat()` calls
**2. ORM Tweaks**
- Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/25329 .
ORM now generates points correctly always, regardless of how the ore is
inserted be it
- Via hand
- Thrown at the ORM
- Ore Box
- Some other bag containing ore
Points will always be generated at a common proc so no more checking
every inlet on how the ore enters the machine. Once the silo receives
the material it will inform the ORM about it, so it does not have to
check itself therefore reducing code bloat.
## Changelog
🆑
fix: ORM will generate points regardless of how the ore enters it.
fix: Machines like autolathe, techfab etc can now be hit with iron
sheets (or any other material item type those machines accept) when in
combat mode rather than inserting them because it makes sense.
fix: Mat container won't display chats fully if the
`MATCONTAINER_SILENT` flag is passed.
refactor: Machines like autolathe, techfab etc now display summed up
material inserts to chats rather than each item individually. Also, will
skip items & its contents if it cannot be processed thus saving time
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Mat container related refactors & patches
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>