* Adds a shower drain fluff item (#82071)
## About The Pull Request
Turns the varedited fluff item into its own item so it no longer has a
varedited icon & icon state.
## Why It's Good For The Game
We're varediting this fluff item 17 times on current tg master and it's
pretty bad. Varediting icon/icon state in maps should be discouraged and
hopefully banned later, it's not hard to make a subtype of an item so we
should be able to expect mappers to do that rather than this.
## Changelog
Nothing player-facing.
* Adds a shower drain fluff item
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Ice cream now gives a chilling food effect (plus small food haste buff) (#81719)
## About The Pull Request
We have a `crafted_food_buff` in the code meant for specific food buffs
(and perhaps one day, debuffs) that has gone unused ever since it was
created during the 'Foodening' PR.
Anyway, yeah, this PR takes the fire step to implement it with ice cream
and other frozen treats.
Frozen treats (all food found in the `food/frozen.dm` file) have it by
default. Other ice cream holders such as waffles cones (and now regular
waffles too!) can aquire it when filled with ice cream. Using the ice
cream vat also adds the 'Chef Made' trait now, which is required for
food effects to happen.
Also very slight food effect refactor. There's no need to have five
different alert screen objects when only have to switch icon states.
This PR also adds an action speed modifier to the generic 'haste' food
effect. I'm confident the original creator would have done that too, but
action speed modifiers aren't as well-known.
## Why It's Good For The Game
People tend to make one feature, call it a day and then move on to the
next. Food effects are nice, however they're barely implemented, and I
don't like food being all the same-ish in the end.
## Changelog
🆑
add: Ice cream and frozen treats now have a chilling effect.
add: You can add a scoop of ice cream on waffles.
balance: added an action speed modifier to the generic food haste effect
(you do things, and not just run, an itsy bitsy faster)
/🆑
* Ice cream now gives a chilling food effect (plus small food haste buff)
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Training in heavy gravity gives you more experience points (#81990)
## About The Pull Request
If you use exercise equipment in an area with unusually high gravity,
you will get tired faster but will also earn a greater amount of fitness
experience points.
As far as I am aware the only particularly reliable way for regular crew
to gain access to high gravity is the bone-crushing strength (and
radiation?) of the gravity generator, but you could also use
gravitational anomalies or gravitational holoparasites for this if they
are available.
Conversely, if you lift weights when there's no gravity it won't cost
you any stamina at all!
## Why It's Good For The Game
I'll be honest this is a largely pointless and trivial change which
interacts with a similarly useless system, but I thought it would be a
cute interaction.
Training by wearing heavily weighted clothing or in an area where
gravity is increased are _somewhat_ common tropes in fiction (I have no
idea if people do this in real life) and I think our players would
appreciate the incredibly niche circumstances where they can benefit
from this.
I also think if even one round features someone building a gym in the
gravity generator room and encouraging people to get buff while it
crushes them into paste then this was a good addition.
## Changelog
🆑
balance: If you work out under heavier-than-earth gravity, you will get
gains faster.
/🆑
* Training in heavy gravity gives you more experience points
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Adds logging to SSore_generation on subsystem initialize (#81488)
This PR adds a new logging category and a logging message specific to
SSore_generation's initialize, logging the number of vents of each size,
as well as the number of random and proximity based ore spawns due to
cave generation and map generation.
Currently drafted as I could use some feedback as to why I'm not seeing
the logger.log() messages not appearing on any of the current in-game
log files 👍
Useful for data logging to determine how many of each type of ore is
spawned on the map, for the purposes of determining how much ore is
being spawned manually over the automatic amounts based on the vents,
with the quantity of ores spawning being a product of the ore vent sizes
being logged as well.
* Adds logging to SSore_generation on subsystem initialize
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Ore vent fixes to spawning multiple megafauna. (#81935)
## About The Pull Request
Ore vents can now no longer be scanned multiple times to spawn multiple
nodes, nor can they be used to duplicate lavaland bosses.
Vents now call for a `can_interact` check, as well as against the
cooldown timer, which has been moved a bit in the order of operations in
order to check things correctly when there's possibly multiple prompts
open for starting the defense waves.
Additionally, boss waves actually do what they're supposed to do, and
don't spawn in a node drone on boss summoning, but instead summon the
drone afterwards, which sets up the vent, then takes off visually. This
is reflected in the tgui alert before starting waves.
## Why It's Good For The Game
Fixes#81817. Improves visual clarity when doing boss vents so that
players don't get the wrong idea that they need to protect the drone as
well when fighting bosses.
## Changelog
🆑
fix: Ore vents have to be scanned while standing next to them.
fix: Menacing ore vents now correctly only spawn in a node drone after
the boss is defeated, instead of before.
/🆑
* Ore vent fixes to spawning multiple megafauna.
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* [NO GBP] Extremely tiny stupid nitpick changes to the smoking room ruin (#81767)
## About The Pull Request
Ok so this just does some really really tiny changes to the smoking room
of the smoking room ruin. I added this way back during march mapness and
have always wanted to touch up this last area.
These are basically just touch-ups that are two years too late because
they felt so insignificant and small that making an entire PR to change
them felt excessive. I still feel that way but I'm also a perfectionist
and this would linger in my head until the day I die.
Anyways, there should be slightly less awkwardly placed spawners, decals
blocked from view. You also have to walk past the smoky remains to reach
the second special lighter, instead of the first.
That's it, that's everything. You don't even get screenshots here.
Sorry.
## Why It's Good For The Game
I have an obsession with revisiting and completing old, unfinished work.
## Changelog
🆑 Rhials
fix: Some tiny tiny changes to the smoking room ruin to make it a little
less ugly.
/🆑
* Tram tile/bench fixes (#81798)
## About The Pull Request
- Tram benches can be rebuilt after deconstruction
- Tram tiles build the correct amount inhand
- Tram tiles available in the engineering protolathe with other items
- Tram tiles create the right stack type when pulled up
- Tram tiles have inhand/obj icons for both types
## Changelog
🆑 LT3
fix: Tram floor tiles constructed inhand provides 4 instead of 1
fix: Tram floor tiles provide correct stack item when pulled up
image: Tram floor tiles have their own inhand icons
qol: Tram floor tiles available in the engineering protolathe
fix: You can reconstruct deconstructed tram benches
/🆑
* Tram icon cleanup (#81797)
## About The Pull Request
- Deletes an unused tram_wall.dmi
- Renames tram frame to tram girder
- Tram girder looks like girder, not lattice

## Why It's Good For The Game
More straightforward for players. Since it acts like a girder, it should
look like a girder not a lattice.
## Changelog
🆑 LT3
image: Tram frame is now tram girder, because it acts like one
/🆑
* Autotucking On Map Load (#81782)
## About The Pull Request
Doesn't really do much currently but without it wallening beds look
fuckin DUMB
Plus I think this better matches what is intended
## Why It's Good For The Game

---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
* Makes Ethereal Charging Loop Just About Everywhere (#81775)
## About The Pull Request
Basically,
For APCs.

For recharging APCs.

For recharging from cells. The Ethereal offscreen was blue, you'll just
have to trust me that this was a color-coded PR.

## Why It's Good For The Game
It's kind of CBT as-is right now to have to click this stuff over and
over, especially when light tubes have it that much more convenient than
everything else. I figure some while loops would make the situation
better for them.
## Changelog
🆑
qol: Ethereal charging now loops when they're charging (from) APCs or
from power cells!
/🆑
* Lots of description changes and grammar fixes for heretics (#81761)
## About The Pull Request
Changes a lot of text. Apart from grammar fixes, here are the notable
changes:
- Ash jaunt description just said it is a "short range jaunt" without
explaining what exactly a jaunt is. I believe it is better to describe
without comparing to another spell the player may not have experience
with.
- Cosmic grasp now explains what the deal is with star marks and cosmic
fields. It is still possible to crosspath into a star mark spell,
skipping this description, but I assume a player like that is
experienced enough to know what the star mark does anyway...
- The knowledge for ash spirits no longer refers to them as "Ash Men" -
"Ash Spirit" is the mob's actual name. If you think "Ash Man" is a
better name, I can change it around so that the mob gets renamed that
instead.
- Removes the lines from paradoxical curio's description about causing
brain damage on examination - many heretic items cause adverse effects
to heathens who try to interact with them, and there is never a need to
clutter the description with them.
- Changes the eldritch coin description, because the old one was, in my
opinion, awkward. I changed it to be more inline with the other items'
descriptions, and to not tell non-heretics what its purpose is. If you
liked the old one better, I can revert this change.
## Why It's Good For The Game
Grammar good. Accurate descriptions good.
## Changelog
🆑
fix: made some heretic descriptions more accurate
spellcheck: improved english of the heretical eldritch patrons
/🆑
* Makes Medbay surgery on Metastation a bit more inline with other maps (#81786)
## About The Pull Request
Makes it so paramedics can't access the surgery theater in Metastation
## Why It's Good For The Game
Paramedics can't access surgery on the other maps, and can't use the
front door to the surgery theater, They shouldn't have access to it
through maints
## Changelog
🆑
fix: Makes Metastation surgery access more consistent with other maps
/🆑
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Nerevar <12636964+Nerev4r@users.noreply.github.com>
Co-authored-by: ViktorKoL <44502667+ViktorKoL@users.noreply.github.com>
Co-authored-by: starrm4nn <139372157+starrm4nn@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Curtains behave like curtains should, by not being a wall (#81843)
## About The Pull Request
This has bothered more for far too long that curtains suddenly become
solid objects instead of, well, behaving like curtains in any form do
and just bend out of your way. They function the same from an opacity
POV but i just removed the density toggle so they'll always allow
passthrough.


## Why It's Good For The Game
You can have your privacy and have realistic curtains
## Changelog
:cl:Zergspower
qol: Curtains and shower curtains are no longer solid objects that defy
common sense
/🆑
* Curtains behave like curtains should, by not being a wall
---------
Co-authored-by: Zergspower <Griffinj88@yahoo.com>
* fix ore vents spawning the wrong wolves and remove simple wolves (#81864)
## About The Pull Request
wolves got refactored but the ore vents were still spawning the old
versions, this fixes it and removes the old wolves from the code
## Why It's Good For The Game
fixes ore vents spawning old wolves
## Changelog
🆑
fix: fixes ore vent spawned wolves being untammable
/🆑
* fix ore vents spawning the wrong wolves and remove simple wolves
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Adds a small cafeteria behind the right wing shutters of the museum. (#81465)
## About The Pull Request
I was thinking to contribute something to the new away mission map to
make it better. Mapping and all takes too much time for me, so I could
do little. Though it comes with its own unique gimmicks.
To reach the cafeteria, one has to complete a couple puzzles.
The first set is opened by inputing the correct PIN on the password
panel beside it. There're several clues to help you guess this fairly
easy puzzle, in the form of several number graffitis, a scrapped piece
of paper full of numbers, and a board filled with colored dots also
found just beside the panel.
The second one is opened by a keycard, and is generally lazier. To find
it, you'll need to do a bit of (toilet) searching.
As for the unique things this PR adds:
- A fire extinguisher... that actually contains welding fuel
- A (dirt-cheap) hotdog vending machine*
- A completely ornamental maneki-neko (that's the name of the
luck-bringing, paw-waving cat figurine)
- A piggy bank that carries money between rounds. It has a cap of 10k
credits worth of holochips, cash and coins, which is pretty high, but
I'm confident people will just destroy it for its contents the moment
they find it. His name is Pigston Swinelord VI.
- More, totally legit and not actually fake bombable walls :^)
*By the by, you can also find it during the national hotdog day.
Screenshots of the new location:


## Why It's Good For The Game
You know how most away missions are not that special at all? Yeah,
@ mc-oofert set an example of a pretty decent one actually, if not a tad
small. I thought it could use a touch of another mind actually
contributing to it too, because it deserves it.
Also, this sets the basis for other persistent piggy banks. I don't
think they should all have that 10k cap like this one, perhaps 1k is
enough. Beside, the code that mothblocks did for json database datum is
pretty good, so there is not a whole lot of shitcode here.
## Changelog
🆑
add: Added a cafeteria to the museum away mission, with a few special
things to it. To reach it, you'll have to complete a couple puzzles
however.
map: The museum away mission now has a couple restrooms.
add: Hotdog vending machines may spawn during the National Hot Dog Day.
/🆑
* Adds a small cafeteria behind the right wing shutters of the museum.
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Lockers and crates shake when someone is trying to break out of them (#81801)
## About The Pull Request
Makes lockers and crates do a little shake when someone is trying to
resist out of them.
https://github.com/tgstation/tgstation/assets/40921881/94703c79-a22c-43e6-ac31-8621173a0953
## Why It's Good For The Game
A little bit of visual flair, lets players know if someone is trying to
get out of a locker.
## Changelog
🆑 Seven
add: Lockers and crates now shake when someone is attempting to resist
out of them.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Lockers and crates shake when someone is trying to break out of them
---------
Co-authored-by: Lufferly <40921881+Lufferly@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* fixes inability to create material airlocks (#81711)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/81710
runtime due to parent proc not returning the airlock
also added an update_appearance()
## Changelog
🆑
fix: You can build material airlocks again
/🆑
* fixes inability to create material airlocks
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
* Grilles dont break by just walking into them under any circumstances (#81594)
## About The Pull Request
you can no longer just walk into a grille to destroy it rather fast
also single letter variable cleanup from that proc
## Why It's Good For The Game
this is a bug and bugs are bad
## Changelog
🆑
fix: Grilles dont break by just walking into them under any
circumstances
/🆑
* Grilles dont break by just walking into them under any circumstances
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* 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.
/🆑
* You can do more things while floored
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Removes some easily accessible sources of Mythril (#81595)
## About The Pull Request
- Deletes Mythril coins from random spawners, redestributes its weight
where relevant
- Deletes Mythril Sheets from icebox fishing, replaces it with Runite,
which is far less harmful (literally just a strong material)
## Why It's Good For The Game
Mythil's not supposed to be easily player available
Literally the first coin I spawned in testing was summoning, the most
gamebreaking one.
Also see this for more information
https://github.com/tgstation/tgstation/pull/75199#issuecomment-1537836361

With 2 sheets you can farm any prefix you want by combining and
splitting sheets. Nope!
## Changelog
🆑 Melbert
del: Deletes Mythril Coins from random coin spawners
del: Replaces Mythril sheets in icebox vent fishing with Runite sheets
/🆑
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Removes some easily accessible sources of Mythril
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* General maintenance for all things boulder related. (#81358)
## About The Pull Request
**1. Qol**
- Adds screen tips & examines for screwdriver & crowbar acts on BRM,
Refinery & Smelter
- Adds examines to display number of boulders stored inside a refinery &
maximum number of boulders it can hold. Right click screentip to remove
boulders
- Adds examines to display maximum number of boulders than can be
teleported by a BRM & screentips for interacting with wires
- More audio & visual feedback for refinery processing. If a boulder
requires multiple steps you will get a balloon alert saying "crushing"
for refineries & "smelting" for smelters along with a sound per process
tick(which is every 2 seconds so no need for cooldown) giving you a
better idea of what's happening in the pipeline
- BRM now will display all lights when the "Automatic boulder retrieval"
is on & turn off the lights when disabled along with examines giving you
a visual indicator of its state
**2. Code Improvements**
- Splits types of boulders into its own file `boulder_types.dm` for easy
maintainability
- Moves beacon for refinery machines into its own file
`boulder_processing/beacon.dm` for easy maintainability
- Moves the cooldown for processing a boulder `processing_cooldown` into
the refinery machine itself. Since 100's of boulders can be created per
round this var can take up memory quickly so by moving them into the
refinery machine it gives us some savings
- Compressed & merged procs such as `create_mineral_contents()` ,
`flavour_boulder()` etc with the vent code. These procs were only used
by the vent 1 time & by merging the code we removed if conditions to
check if a parent vent was passed or not(since now that's always the
case). Helped in removing boilder plate code
**3. Fixes**
- **Fixes vents always spawning "Small size boulders" & not medium, nor
large boulders.**
Once a vent generates a boulder it calls `flavour_boulder()`
084f56938c/code/game/objects/structures/lavaland/ore_vent.dm (L385)
however this proc also accepts 2 more params `size` which would always
default to `BOULDER_SIZE_SMALL` and `is_artifact` which is simply unused
in the proc
fb83617ff9/code/modules/mining/boulder_processing/boulder.dm (L219)
Therefore vents would always generate small boulders giving us no
varity. Now the boulder size is set depending on the vent size &
durability for each boulder is set to a random value between 2 & the
boulder max size giving us the flavour we actually wanted
- **Fixes "Expanded Gulag boulders" using "normal gulag material list"
when setting its custom materials.**
If you look at the `add_gulag_minerals()` proc it always picks from the
`gulag_minerals` list & accepts no params
fb83617ff9/code/modules/mining/boulder_processing/boulder.dm (L235-L236)
So when we try to pass params to this proc which in reality doesn't
accept any we were wasting our time doing this
fb83617ff9/code/modules/mining/boulder_processing/boulder.dm (L274)
And for our case `expanded_gulag_minerals` list was simply unused
because our proc doesn't care about it and it went back to just using
`gulag_minerals` list thus ignoring our list
fb83617ff9/code/modules/mining/boulder_processing/boulder.dm (L282)
As i said in the "Code Improvement` section when i moved boulder types
into it's own unique file this was fixed & now expanded gulag boulders
actually has a chance to spawn with bluespace crystals inside them
- **Fixes manual tapping of ore vents by hand not using a cooldown**
`produce_boulder()` accepts a cooldown var for when you need to manually
tap the vent by hand.
e8b5b52d54/code/game/objects/structures/lavaland/ore_vent.dm (L374)
This var was always set to FALSE because we never passed `TRUE` into it.
Not once here
e8b5b52d54/code/game/objects/structures/lavaland/ore_vent.dm (L124)
Nor here
e8b5b52d54/code/game/objects/structures/lavaland/ore_vent.dm (L131)
Now we just pass `TRUE` so tapping these vents by hand have a cooldown
- **Fixes BRM off icon state never being used**
When the room ran out of power it would still look on. Now we use that
state correctly
- **Fixes Automatic Boulder Retrieval by the BRM not actually being
automatic**
You must have noticed that once you do "Right click" and wait for all
the boulders it can teleport (determined by `boulder_processing_max`) to
be teleported it stops permanently after that. Even if more boulders get
generated it won't do anything, You have to again "Right click" &
retoggle automatic boulder retrieval on again, thus forcing someone to
stand there & monitor the BRM
Now once you set Automatic Boulder Retrieval on you can leave & forget.
It will teleport boulders as & when available thus enabling automation
properly.
- **Fixes boulders ejected from refineries via right click from getting
teleported back into the machines loc**
Fixes
https://github.com/tgstation/tgstation/pull/78524#issuecomment-1911666995.
The problem is refinery machines & the BRM keep track of all the
boulders that entered into it via the `boulders_contained` list.
Now we directly check `contents` for boulders so we don't have to
maintain 2 seperate lists to keep track of boulders. It also now uses
`processed_by` var of boulders to ensure refinerries don't retake in the
same boulder it just processed. Not sure where exactly the problem got
fixed but implementing these 2 measures fixed it regardless.
- **Fixes boulders with 0 durability[a.k.a steps] from getting ejected
out**
Fixes
https://github.com/tgstation/tgstation/pull/78524#issuecomment-1914551952.
So inside `process()` we constantly decrease the durability of the
boulder till it becomes 0.
0a496f180c/code/modules/mining/boulder_processing/_boulder_processing.dm (L159)
When it reaches 0 it calls `breakdown_boulder()`
0a496f180c/code/modules/mining/boulder_processing/_boulder_processing.dm (L164-L165)
This proc has a chance to reject the boulder if it could not process any
materials
0a496f180c/code/modules/mining/boulder_processing/_boulder_processing.dm (L219-L222)
**"Without resetting its durability"** over here
0a496f180c/code/modules/mining/boulder_processing/_boulder_processing.dm (L241)
So it ends up rejecting a "0" or worse -1 durability boulder. Now we set
the durability in `remove_boulder()` so regardless of what circumstances
the boulder is ejected it always gets a positive durability
- **Fixes BRM & Refinery from rapidly spitting out boulders in their loc
which causes lag in the long terms**
Fixes#81404. Basically even if there is 1 boulder sitting at a BRM's
loc or an refineries loc. Operations are haulted i.e. the BRM will not
teleport any more boulders & the refinery will keep their already
processed boulders inside till their locs are cleared from boulders.
This prevents large number of boulders from pilling up in long rounds
- **[Priority : High] Fixes refineries incorrectly removing materials
from processed boulders**
Fixes#81109. This bug is quite serious because it can't literarily
affect any random item with custom materials in game. This one line of
code over here can break the entire material economy as we know it
0a496f180c/code/modules/mining/boulder_processing/_boulder_processing.dm (L217)
**"DONT DO THIS"**. The `custom_materials` list is a **"read only"**
list & if you ever want to change it call the `set_custom_materials()`
proc with your new values but do not edit this list manually as it is
done here.
All lists related to materials are cached by the `SSmaterials`
subsystem. List values are cached & shared across multiple objects so
when you edit those values like here, you might end up effecting an
item/multiple items in some random corner of the map that shares this
list.
This also causes boulders with empty list of materials to get spawned at
random so yeah again plzz don't do this
**4. Refactors**
- Repathes `obj/machinery/boulder_processing/brm` -> just
`obj/machinery/brm`.
Even though semantically it looks nice that the brm is a subtype of
`obj/machinery/boulder_processing` from a code & operation perspective
they have 0 similarities.
1) The BRM does not accept boulders feed into it from a conveyer belt
unlike a refinery but instead picks boulders from `SSore` subsystem &
put it on the conveyer belt. This means procs for accepting boulders
such `CanAllowThrough()`, `breakdown_boulder()`, `accept_boulder()` etc
have no use in the BRM. Their just code clutter at this point
2) The BRM overrides `process()` & does not call its parent proc making
that code wasted
3) It has no use for silo materials & mining points making those vars go
to waste
With so much wasted code its better to just let go off all of it & just
make it a basic instance of `obj/machinery` making maintainence easy
- BRM now teleports boulders in a batch (batch size determined by
`boulders_processing_max` max value from upgraded parts is 7) with a
boulder appearing every 1.5 seconds rather than spawning all at once.
After a batch is processed it has a cooldown of 3 seconds before
repeating the process if automatic boulder retrieval is on. This stops
the conveyer belt from getting crowded with boulders and makes the
refining process more efficient.
With this BRM wires are removed because only it had only 1 wire
responsible for toggling boulder retrieval but now since this process is
automatic, we have true control over the timing of boulders spawned &
don't want to leave it in the hands of players
## Changelog
🆑
qol: adds examines & screentips for crowbar, screwdriver acts to BRM &
refinery machines
qol: adds examines about the number of boulders stored & processed to
BRM & refinery machines
qol: BRM now has its lights turn on/off depending on wether automatic
boulder retrieval is on/off for visual clarity along with examines
qol: refinery machines now display ballon alerts & plays sounds more
frequently when processing boulders for better feedback
fix: vents now spawn boulders of all sizes & not just small ones
fix: expanded gulag boulders now have correct materials in them.
fix: manual tapping of vents now has a cooldown applied as intended.
fix: BRM has its light turned off when area power goes off
fix: boulders ejected from refineries by hand no longer teleport all
over the place occasionally.
fix: refineries no longer eject boulders with 0 durability
fix: Boulders & refineries no longer pile up on top of BRM's &
refineries in long rounds. Their locs have to be clear of boulders
before they spit out more boulders to prevent a large pile of boulders
from causing lag
fix: sheets ejected from lathes no longer get rejected when inserted
back which could happen at random, no more boulders with empty materials
code: splits boulder types into its own file along with other items
code: merges & autodocs procs, vars related to boulders
refactor: repaths BRM to a simpler subtype
refactor: BRM now spawns boulders in batches(batch size can be increased
with upgraded parts) with a boulder appearing every second. After a
batch is processed a 3 second cooldown is applied to stop the conveyer
belt from clogging up, With this BRM wires are removed as there is no
need for timers to be attached to wires which intefers without our batch
processing timings.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* [NO GBP]Some BRM Fixes (#81551)
## About The Pull Request
- The time from which the boulder is picked to when it's teleported onto
the conveyer belt is 1.5 seconds. During that time the boulder could get
deleted due to many factors and we lose our materials. No one like's
that that so now both steps are combined into 1 proc so we no longer
loose boulders during teleportation.
- Batch processing cooldown was not working when
`boulder_processing_max` is > 1. Now it does
## Changelog
🆑
fix: boulders are no longer lost when teleported by the BRM
fix: batch processing cooldown works when teleporting multiple boulders
/🆑
* Path replacements in maps
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Adds tram throwing mobs through glass windows (#81284)
## About The Pull Request
- Adds a PASSWINDOW flag so that you can throw mobs through window
panes, smashing them
- Being thrown into the tram window by event only (not player thrown)
has a chance to break through the window
- Reduced throw range of tram emergency stop
## Why It's Good For The Game
Sometimes you don't want them to bounce off the window when they hit,
rather comically fly through it.
## Changelog
🆑 LT3
add: The tram has been equipped with enhanced safety glass to reduce the
severity of crew injuries
/🆑
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* 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>
* Refactors how machines are deconstructed
* is this it?
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
museum away mission (#81208)
adds a new gateway map, the Nanotrasen Museum it is filled with
""""Mannequins"""" and Common Core lore
im not putting the preview here because you really should explore it
yourself but if youre that curious i think the Checks tab in mapdiffbot
would have it
this gateway map contains no combat unless you count falling into chasms
because you did not carry a light
or going into the boarded room with no loot or any incentive with
obvious signs that there is the sole enemy on the map in there
the loot is the lore ok thanks
also makes mines detonate if theyre detonated by a non-mob im pretty
sure this couldnt have been intentional
trams stop chasms
and also the relevant items
<details>
<summary>on second thought if you want spoilers check this</summary>

</details>
more gateway maps = good
🆑
add: nanotrasen museum gateway map
/🆑
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Adds a proper skeletal rack subtype (#81484)
## About The Pull Request
This is mapped in a few places and I thought it would be better to have
a subtype of rack to use rather than varediting the icon and state.
## Why It's Good For The Game
The less varedited icons the better imo, it's way easier to ensure icons
aren't fucked up this way and easier to fix too.
## Changelog
No player-facing changes.
* Adds a proper skeletal rack subtype
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Implements rgb2num, uses it to replace all our manual rgb reading. Redoes HSV management (#81182)
[Converts all manual extraction of rbg with rgb2num. It's just
better](ae798eabd5)
[Yanks out old HSV management, replaces it with list
stuff](4997e86051)
There's this old lummy era clunky code that passed HSV as text
We can now cleanly replace it with passing hsv as lists from a rgb2hsv
proc
So let's just do that.
Also, cleans up spraytan code (and ethereal lighting)
Code better
* Refactors fire overlays once again to make it not get stuck so often (#81367)
Maybe finally fixes#77701
A big reason why this kept happening is because fire uses standing
overlays. But fire isn't managed by mobs anymore. Meaning in some
situations, fire can cease to exist but the overlay can still be on the
mob. So it gets stuck.
So like, why use standing overlays anymore? We can just hook
`update_overlays` signal.
Isn't that neat.
🆑 Melbert
refactor: Fire effects get added to mobs in a different way now. Maybe
it will get stuck less. Report any oddities.
/🆑
* Fix Flaky Failure From Fire (#81399)
## About The Pull Request
Closes#81396 , Closes#81391 , Closes#81403, Closes#81402
I don't know why but I thought this proc was only called once, when the
mob entered the turf. That was silly.
And going back at it, I'm not entirely sure why I tied
`TRAIT_NO_EXTINGUISH` to the element anyways, rather than the lava like
it originally was.
While going back over this, I cleaned up the proc a bit.
## Changelog
Not necessary
* There we go?
* Bruh moment
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes funky closet type (#81389)
## About The Pull Request
`secure/closet` -> `secure_closet`.
Changes nothing besides making the mapped in closet use the right name.
## Changelog
🆑 Melbert
fix: Lavaland Beech Bartender's clothing storage is named the right
thing now
/🆑
* Fixes funky closet type
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* [Fix] Visually closing fakewalls when in fact they shouldn't be closed (#81353)
## About The Pull Request
Moves update_appearance() proc further after checking if it can be
closed.
It was possible to stand inside an open falsewall, try to close it only
for it to "close" visually and don't change any properties.
## Why It's Good For The Game
Less bugs is good. No more fake-closed falsewalls.
## Changelog
🆑
fix: Now falsewalls visually don't close when they shouldn't.
/🆑
* [Fix] Visually closing fakewalls when in fact they shouldn't be closed
---------
Co-authored-by: larentoun <31931237+larentoun@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>
toilet bong altclick sanity (#81263)
## About The Pull Request
i still dont know what they meant by sanity checks but this should be it
## Why It's Good For The Game
bug or something bad
## Changelog
🆑
fix: you may no longer altclick unanchored toiletbongs from any range in
any condition to rotate them
/🆑
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations (#81103)
## About The Pull Request
In short, we used a static list previously within the ore_generation
subsystem that held the amount of each ore that we expected a single map
to uniformly need. We held this number constant, since we were spawning
15 vents per map.
**Pros:** This worked flawlessly for Lavaland since 15 vents on a single
Z level makes it pretty densely packed map with a good amount of
map-based ore spawns, and it worked consistently.
**Cons:** 15 vents did not work well on Icebox however, even when split
so that the majority of the ores were spawning on the lower levels,
players did not feel like icebox spawned nearly enough ores and reported
the map spawning empty.
**Result:** As a result, we adjusted the ratio, so that we spawned
vastly more ores on the lower levels, now up to 4 vents on the upper
level, and 21 vents on the lower level. However, as we were still using
the ore distribution list based on lavaland, icebox vents were quickly
running out of ores to distribute between them, resulting in empty vents
-> which produced empty boulders -> which not only don't really let you
process them properly, but also just result in a metric ton of runtimes.
Icebox now has it's own list of ore distributions. These distributions
are now moved to a set of global lists as opposed to being saved on the
subsystem as a static list, which will make going and setting up new ore
distribution lists very very easy. Additionally, we've moved the setting
and getting of those ore_distributions over to the seedRuins proc, so
that we're actually setting the list of ores right before we actually
place them to make sure that the order that it's set is roughly as it's
needed, while still setting the list at the same time the
map-appropriate ruin placements are dropped in.
**Plus some misc cleanup fixes:**
`var/list/ore_vent_sizes` in SSore_generation wasn't being treated as a
similar budget list as `ore_vent_minerals`, since it `pick()`s off it's
own static size list. Which is honestly fine for this five seconds, I
can handle that later while we make sure the rest of the code code is
stable. In the meantime, I've just tweak it so that it's easy to see at
a glance how many of each random vent has spawned into the map.
Tweaked the description to not include anything about chemical
processing, as I'm planning on hitting on that in a part 2 PR that I'll
be picking back up after the freeze.
## Why It's Good For The Game
Cleans up the code a bit, but primarily fixes ores not spawning on
icebox as they should.
Should fix#81058.
Improves description to not mention mechanics that aren't in game.
Also, cleans up a piece of code that currently isn't serving much of a
purpose.
## Changelog
🆑
fix: Icebox should have it's ore distribution and it's ore vents fixed,
so that vents should now produce ore.
spellcheck: Boulder processing machines now don't mention things they
don't do.
/🆑
* Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@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>
* Fix Ore Vent's well being on improper plane (#81181)
## About The Pull Request
Removed explicit plane set to `GAME_PLANE` and `ABOVE_MOB_LAYER` thus
fixing issue when well was drawn on improper plane, possibly the ghost
one.
## Why It's Good For The Game
This PR fixes a visual bug.

## Changelog
🆑
fix: fixed ore vent's well being drawn over ash storm.
/🆑
* Fix Ore Vent's well being on improper plane
---------
Co-authored-by: Interception&? <137328283+intercepti0n@users.noreply.github.com>
* Fixes ore vent descriptions stacking, fixes potential exploits with ore vent scanning (#81174)
## About The Pull Request
- Scanning ore vents did a do_after to do the actual scan, but if the
do_after failed, it didn't cancel the scan proc, and rewarded you points
anyways. So you could just keep cancelling the scan for free points?
- Also there was nothing preventing someone from stacking scans on the
same vent
- Also, when generating the ore description, always override existing
descriptions. Given `generate_description` can be called multiple times,
prevents it from stacking on itself.
## Changelog
🆑 Melbert
fix: Fixed ore vent descriptions looking weird sometimes
fix: Fixed being able to scan an ore vent multiple times at once
fix: Fixed gaining scan points from scannning an ore vent without
finishing the scan
/🆑
* Fixes ore vent descriptions stacking, fixes potential exploits with ore vent scanning
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* The construction console drone becomes visible again while its in use (#81153)
## About The Pull Request
The construction console (in game only used as the aux base construction
console) summons a little drone while its active. This drone's
invisibility is turned off, and when the user logs out, its reset to
default. However, after the invisibility refactor, it was the console's
invisibility that was being removed and reapplied. This PR fixes that,
and properly applies it to the drone.
## Why It's Good For The Game
I want to know where the RCD is about to place the wall, so I can place
the items where I want them to go.
## Changelog
🆑
fix: The construction console drone becomes visible again while its in
use
/🆑
* The construction console drone becomes visible again while its in use
---------
Co-authored-by: Profakos <profakos@gmail.com>
* Replaces `/obj::` -> `parent_type::` (#81146)
## About The Pull Request
This just seemed like a minor error with the new syntax that popped up:
The intent of these seem to be "take our obj flags and add
`NO_DECONSTRUCTION` to it", which was perfectly serviceable in a
majority of places, as the parent type had the same obj flags as `/obj`.
But in a small handfull of places (such as any table subtypes) this was
not the case, and it caused some objects to have missing flags that they
were otherwise intended(?) to inherit.
So I replaced `/obj::` with `parent_type::` meaning rather than using
the base obj flags and then adding `NO_DECONSTRUCTION`, they use their
parent type's obj flags and then add `NO_DECONSTRUCTION`.
## Changelog
🆑 Melbert
fix: You can build on some niche tables again, such as the Wabbajack
Altar.
/🆑
* Replaces `/obj::` -> `parent_type::`
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes medical bed interaction (#81062)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/81014 where you can
interact with medical beds while incapacitated.
## Changelog
🆑 LT3
fix: You can no longer interact with medical beds while incapacitated
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes medical bed interaction
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.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>
Removes timeout_mod arg from add_mood_effect (#80964)
## About The Pull Request
Partial Revert of https://github.com/tgstation/tgstation/pull/80800
Assuming every num passed in the parameters of `add_mood_effect` is a
`timeout_mod` is incorrect, because there can be mood events that take a
numeric arg which is not meant to be multiplied against the timeout.
This leads to the same issue as multiplying it with strings essentially
(in one case, shown below, this results in a negative duration of a
timer).


Plus having a keyword arg that may or may not actually be what the
keyword arg claims to be is really confusing and bad.
Instead here's what I propose: passing in an instantiated mood datum
itself, which has been modified, and copying the timeout from it before
discarding it.
It is not as clean as I'd prefer either, but at least it's logically
sound and the intent is clear, and it's the best I can think of short of
a major refactor of the entire system for this one small thing which is
only being used by food quality.

## Why It's Good For The Game
Clearer, less smelly code.
## Changelog
🆑
code: removed the timeout_mod arg from add_mood_event, which was only
used for one thing and causes more issues than it's worth
/🆑
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* fixes a bunch of moodlets potentially lasting forever (less band-aidy) (#80800)
## About The Pull Request
In a previous PR (https://github.com/tgstation/tgstation/pull/79661), I
noted that a lot of moodlets tended to have their timeouts break because
it was passing their names and whatnot as a parameter, that gets fed
into the timeout modifier parameter, causing the timeout multiplier to
break, because BYOND type-agnosticism means that it can multiply a
number (timeout_mod) by text (a name or some other object), resulting in
0 - which makes a moodlet permanent. This is probably not intended.
This fixes that in two ways:
- Adding a `1` to potentially applicable moodlets (searched for with a
regex of `.add_mood_event(.*, .*,)`) just to make sure the timeout
doesn't get multiplied out weirdly.
- Making the add_mood_event thing CRASH() if the timeout_mod is bad.
If someone else wants to come up with a solution better than this,
please do.
## Why It's Good For The Game
Maybe having your arm permanently fall asleep after getting it
reattached sucks, moodlet-wise. (Being stuck with permanent
positive/negative moodlets is probably not intended.)
## Changelog
🆑
fix: Moodlets with parameters/effects e.g. limb reattachment moodlets
should probably disappear more appropriately.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* fixes a bunch of moodlets potentially lasting forever (less band-aidy)
* wew
---------
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
* Makes placing plating on lava-proof rods delete the rods and not break lighting on that tile for the rest of the round (#80876)
## About The Pull Request
See title
## Why It's Good For The Game
1. Its a bit odd that the rods are still there and on top of the new
tile you placed, considering you were build on top of them.
2. Because building didn't use place on top, the lighting on the tile
would be broken and made entirely black for the rest of the round.
Slightly annoying when you're constructing something on top of it!
## Changelog
🆑
qol: The heat-proof catwalk made by heat-proof rods will go away when a
tile is placed on it, rather than sticking around and needing to be
removed manually
fix: The lighting will not irreparably break on tiles where plating was
placed on lava-proof catwalks
code: Some single letter variables and the structure of the code around
placing tiles on lava-proof catwalks has been improved
/🆑
* Makes placing plating on lava-proof rods delete the rods and not break lighting on that tile for the rest of the round
---------
Co-authored-by: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com>
* Fixes every instance of 'kenetic' in the codebase (#80782)
## About The Pull Request
There were several instances of this being misspelled as 'kenetic'
rather than kinetic. This fixes that.
## Why It's Good For The Game
oughe
## Changelog
🆑
spellcheck: Corrects every misspelled 'kenetic' in the codebase.
/🆑
* Fixes every instance of 'kenetic' in the codebase
---------
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
* Closet screentip clarification (#80759)
## About The Pull Request
Fixes some issues with closet screentips.
Previously, it would give anchor/unanchor screentips even if the closet
was not anchorable
Also, the deconstruct screentip would never actually appear as it never
touched screentip_change
## Why It's Good For The Game
Addressing a bug reported downstream:
https://github.com/NovaSector/NovaSector/issues/213
These specific issues were making it confusing for people to understand
how to deconstruct a supply pod (unanchorable closet subtype)
## Changelog
🆑
fix: closets now have a working welder deconstruct screentip
/🆑
---------
Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com>
* Closet screentip clarification
---------
Co-authored-by: Sable <102194057+Thlumyn@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@ users.noreply.github.com>
* Removes the attack_slime proc, and other slime refactors (#80487)
## About The Pull Request
- **Removed attack_slime**. Most of the attack_slime content has been
moved to a proc that signs up for COMSIG_LIVING_UNARMED_ATTACK. Its
ugly, but will make converting slimes to a basic mob easier. They now
use attack_animal for now, which might cause some unexpected
interactions. Hopefully when they are converted to basic mobs, these can
be cleared up properly.
- This caused some issues with cyborgs, who used to get only half damage
dealt to them. As refactoring this would have been too much of a
difficult task without much real gain, after much pondering, I have
decided that since slimes can always flash cyborgs with each of their
strikes, maybe cyborgs should only fear slimes that have electric
charges in them. In addition, slimes electric charges decrease now after
they successfully zap an cyborg, making them more consistent with the
zaps that affect carbons. AIs are still fully immune to slimes.
- The slime.dm and slime.life files were extremely bloated, and
unorganized. I have created two new files, defense.dm and ai.dm. I have
moved the various attack_by/attack_hand/etc procs to defense.dm. Ai.dm
now contains every single proc the slime's "AI" uses; this should help
getting a clearer picture of the current functionality, which should aid
with basic mob conversion and decision tree creation. The remaining
files have been slightly organized, with overrides in front, and new
procs at the back.
- Created a proc for swapping out Adult and Baby states of a slime.
Previously, attack_slime was in many cases ignoring fields like
melee_damage_lower and melee_damage_upper, replacing it with magic
numbers based on the slime's lifestate. Now these values are hard set by
these procs. This has caused slimes to be more consistent, though baby
slimes might do a bit less damage on the low end. I am tempted to turn
these in datums in the future, or as part of this PR.
- Removed baby slime's chance to accidentally attack a window/grille by
bumping into it, they had 0 object damage anyways, unlike adult slimes,
so there was no reason not to early return.
- The proc of `handle_feeding` assumed adjustBruteLoss and adjustToxLoss
return positive values when damage has been done, when in reality, it
returns the total health change along with its direction. This meant
slimes would fell off simple or basic mobs after a single bite. This has
been fixed.
- Also updated the warning before the slime type defines, as they were
out of date.
- I have removed the bespoke spacewalk override for slimes, which should
allow them to drift, should gravity go out.
- The nutrition stats are assigned only once, when the slime grows up,
instead of compared to being an adult every life tick
## Why It's Good For The Game
Less duplicated code.
This refactor should help in the basic mob conversion process.
Cyborgs have an easier time wrangling slimes, who could previously kill
them in three hits, if charged. They are mostly encased in metal, they
should feel fine when not hit with electric attacks.
Lets slimes feast on delicious corgis.
* Removes the attack_slime proc, and other slime refactors
---------
Co-authored-by: Profakos <profakos@gmail.com>
* fix a hard delete in basic statues (#80696)
## About The Pull Request
if the creator of the statue got deleted, it might cause a hard delete.
also i noticed this variable wasnt being used so i removed it and
instead directly added the ref of the creator to the mob's faction list.
also i noticed the proc that was setting it had alot of nested
typechecks so i split it into child procs
## Why It's Good For The Game
fixes a hard delete
## Changelog
not player facing
* fix a hard delete in basic statues
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
* Fixes extinguisher cabinet not updating its icon (#80668)
## About The Pull Request
Just makes the extinguisher cabinet actually look opened after removing
the extinguisher like it's supposed to.
## Why It's Good For The Game
<details><summary>Looks like it's supposed to again</summary>

</details>
## Changelog
🆑
fix: fixed fire extinguisher cabinets not appearing opened after
removing the fire extinguisher from them
/🆑
* Fixes extinguisher cabinet not updating its icon
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Atmos Holofan Clearview (#80662)
## Vid
https://github.com/tgstation/tgstation/assets/46101244/b322aac7-519f-4a55-8180-eb9a38b3abc7
## About The Pull Request
You can right-click the Atmos Holofan projector in-hand to make the
holograms more transparent and unclickable
Only lasts for 40 seconds if you don't toggle it off yourself
## Why It's Good For The Game
Sometimes you want to pipe under the holofan or put a machine there, and
it's frustrating having to alt-click the tile for every action since you
can't see anything under the holofan
## Changelog
🆑
add: Atmos Holofan projectors can be right-clicked inhand to make their
holograms more transparent
/🆑
* Atmos Holofan Clearview
---------
Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
* Adds Head of Security beret and bowman to their locker (#80503)
## About The Pull Request
adds Head of Security beret to their garmet bag and adds Head of
Security bowman to their locker
## Why It's Good For The Game
Other departments start with their round start drip in their lockers,
Head of Security should too, for consistency!
Promoted Head of Security should get their fancy beret and headset
## Changelog
🆑
qol: Head of Security beret added to their garmet bag
qol: Head of Security bowman added to their locker
/🆑
* Adds Head of Security beret and bowman to their locker
---------
Co-authored-by: Redbert <109347230+Deadgebert@users.noreply.github.com>