Commit Graph

2764 Commits

Author SHA1 Message Date
SkyratBot
25fb2e098b [MIRROR] Adds error on qdeling callback, fixes errors this causes [MDB IGNORE] (#23271)
* Adds error on qdeling callback, fixes errors this causes (#77850)

## About The Pull Request

You shouldn't ever qdel a callback. If you don't want to own it free
your ref (remove it from a list/set it to null). When all refs are
cleared it'll get cleaned up by byond itself

* Adds error on qdeling callback, fixes errors this causes

* Update cell_component.dm

* Update acid.dm

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-08-23 04:43:34 -04:00
SkyratBot
b123605da2 [MIRROR] Implements byond_status() for harddel hunting [MDB IGNORE] (#23257)
* Implements byond_status() for harddel hunting (#77818)

## About The Pull Request

In addition, improves dump_harddel_deets usage to hopefully hit in unit
testing

byond_status() will dump as a part of find_references(). While I'd like
to expand that if we ever get a proper version, this is good for how we
have things setup rn.

* Implements byond_status() for harddel hunting

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-08-23 01:19:13 -04:00
Bloop
3569f9fd94 [MISSED MIRROR] Loads Away Missions for Unit Testing (#76245) (#22534)
* Loads Away Missions for Unit Testing (#76245)

Hey there,

A pretty bad bug (#76226) got through, but it was fixed pretty quickly
in #76241 (cf92862daf). I realized that if
we were testing all the away missions, that this could theoretically get
caught and not happen again. Regardless, unit testing gateway missions
has been on my to-do list for a while now, and I finally got it nailed
down.

Basically, we just have a really small "station" map with the bare bones
(_teeny_ bit of fluff, maploading is going to take 30 seconds tops
anyways let me have my kicks) with a JSON map datum flag that causes it
to load all away missions in the codebase (which are all in one folder).
Just in case some admins were planning on invoking the proc on
`SSmapping`, I also decided to gate a `tgui_alert()` behind it because
you never can be too sure of what people think is funny these days (it
really does lock up your game for a second or so at a time).

I also alphabetized the maps.txt config because that was annoying me.

Things that break on production could(?) be caught in unit testing? I
don't know if the linked issue I mentioned above would have been caught
in retrospect, but it's likely to catch more than a few upcoming bugs
(like the UO45 atmospherics thing at the very top) and ensure that these
gateway missions, which tend to be the most neglected part of mapping,
stay bug-free.

This is also helpful in case someone makes a new away mission and wants
to see if stuff's broken. Helps out maptainers a bit because very, very
technically broken mapping will throw up runtimes. Neato.
Nothing that players should be concerned about.

Let me know if there's a better way to approach this, but I really think
that having a super-duper light map with the bare basics to load up
gateway missions and then all nine-ish gateway missions can sequentially
load during init. I can't think of a better way to do it aside from some
really ugly `#ifdef` shit. Also also, it has the added benefit of being
a map that will always load your away mission without touching a single
shred of config (and it's not likely to break if you follow sane
practices such as making your own areas)

* Update gateway_test.json

* Map Reset

* Gets rid of an area that was in a space turf

* Attempting to fix some runtimes

* Map Reset

* Lets remains spawn in xen water

* and acid, too

* Update remains.dm

* Removes extra airlock helper

* Delete research2.dmm

Surely this was a mistake?

* Merge branch 'master' into pr/22534

* Map Reset

* Update snowdin.dmm

* Revert "Update snowdin.dmm"

This reverts commit c860c6f4fbb463954d5b8da1b494305a2f45b44b.

* Update snowdin.dmm

* Update snowdin.dmm

* Revert "Update snowdin.dmm"

This reverts commit 47e7916056a47e12adfcb8b94b9748b7e56f378d.

* Update snowdin.dmm

* Revert "Update snowdin.dmm"

This reverts commit c82576bee69e09eda649d3cbf63d96dddaeeb380.

* Update immerse.dm

* Revert "Update immerse.dm"

This reverts commit 2ad622f3029a3ed17a05f8269299d0f25e747d11.

* Update immerse.dm

* Update maps.txt

* Fix hard dels in area spawn

* Update gateway_test.json

* Actually we can just get away with keeping a list of types here, no refs needed.

* Update area_spawn_subsystem.dm

* Update automapper.dm

* Let's just test to see if getting rid of black mesa stops the segfaults...

* Let's try deleting astrum too

* Revert "Let's just test to see if getting rid of black mesa stops the segfaults..."

This reverts commit de9a05708d451abbb78a635a3e03b2f460004496.

* Revert "Let's try deleting astrum too"

This reverts commit 2121a6357a54faf5719a42a762ba8b4698c008fb.

* Update waypointstation.dmm

* Update blackmesa.dmm

* Update decaySS.dm

* Update gateway_test.json

* Revert "Update gateway_test.json"

This reverts commit 93adc08819f05aecc8599980385e3fb10d02a1d2.

* Testing

* Revert "Testing"

This reverts commit 1d476d236953daac6adf59b93e56f2fab218085b.

* Testing

* Revert "Testing"

This reverts commit de05a74636c1f43e50fb7ec9f24978d270db4b88.

* Now try and actually fix the stupid thing

* Update clockwork_research.dm

---------

Co-authored-by: san7890 <the@san7890.com>
2023-08-19 20:51:34 -07:00
SkyratBot
1aec547be9 [MIRROR] Use typepaths for the quirk blacklist [MDB IGNORE] (#23208)
* Use typepaths for the quirk blacklist

* Update quirks.dm

* Update quirks.dm

whoops

---------

Co-authored-by: spookydonut <github@spooksoftware.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-08-19 15:50:03 -04:00
SkyratBot
a0a9a43562 [MIRROR] Refactors Regal Rats into Basic Mobs (more titles edition) [MDB IGNORE] (#23188)
* Refactors Regal Rats into Basic Mobs (more titles edition) (#77681)

## About The Pull Request

I literally can't focus on anything nowadays, so I just did this to
break a never-ending chain of distress. Anyways, regal rats! These
fellas are mostly player controlled, but did have _some_ AI capabilities
(mainly tied to their actions), so that was incorporated too. Everything
should work as-expected (as well as look a shitload cleaner).

Instead of doing weird and awful conditional signals being sent out, I
made the `COMSIG_REGAL_RAT_INTERACT` (not the actual name) have a return
value so we can always rely on that working whenever we have that signal
registered on something we attack. I also cleaned up pretty much every
proc related to regal rats, gave them AIs to reflect their kingly nature
(and action capabilities (as well as move the action to
`mob_cooldown`)).

Since I thought they needed it, Regal Rats now get a special moniker!
This is stuff like "the Big Cheese" and what-not, like actual regents in
history. That's nice.
## Why It's Good For The Game

Two more off the list. Much better code to read. Way smarter rats with
spawning their army as part of a retaliatory assault (war). More sovl
with better regal rat names. The list goes on.
## Changelog
🆑
refactor: Regal Rats have been refactored into basic mobs. They should
be a bit smarter and retain their docility (until attacked, in which
case you should prepare to get rekt by summoned rats), and properly flee
when they can instead of just sit there as you beat them to death. The
framework for them interacting with stuff (i.e. opening doors while
slobbering on food) is a bit more unified too, now. They also have
cooler names too!
/🆑

FYI: Beyond a few code touchups, I haven't touched the actions at all. I
do not believe myself to be enthusiastic about fixing anything involving
the actions code as of this moment so that this PR is more overbloated
unless it's unbelievably stupid or easy to fix.

* Refactors Regal Rats into Basic Mobs (more titles edition)

---------

Co-authored-by: san7890 <the@san7890.com>
2023-08-18 19:28:25 -04:00
SkyratBot
0614285369 [MIRROR] Revert "Add the ability to use blips as your character's voice" [MDB IGNORE] (#23186)
* Revert "Add the ability to use blips as your character's voice" (#77715)

Reverts tgstation/tgstation#77640

![Discord_iPE1cmuUrY](https://github.com/tgstation/tgstation/assets/4081722/a54a8e7b-ef2b-4f32-9589-bde7b6b2b7d4)

This is causing big problems right now and we've agreed to a, at
minimum, temporary revert so that we can re-approach this at a later
date and do things properly

@ MrStonedOne pls i need that TTS repo im begging you pls

* Revert "Add the ability to use blips as your character's voice"

---------

Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
2023-08-18 19:25:06 -04:00
SkyratBot
cb1fdefdc0 [MIRROR] Move hot procs to CODEOWNERS for dev cycles initiative [MDB IGNORE] (#23170)
* Move hot procs to CODEOWNERS for dev cycles initiative

* Update .github/CODEOWNERS

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-08-17 23:47:53 -04:00
SkyratBot
508b43d7b3 [MIRROR] Settler Quirk: Tame the Outdoors! Have trouble with tall shelves... [MDB IGNORE] (#23157)
* Settler Quirk: Tame the Outdoors! Have trouble with tall shelves...

* Update quirks.dm

---------

Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-08-17 17:46:43 -04:00
SkyratBot
7456c9be22 [MIRROR] Add the ability to use blips as your character's voice [MDB IGNORE] (#23109)
* Add the ability to use blips as your character's voice (#77640)

## About The Pull Request

- Adds the ability to force your TTS voice to always be blips, default
is still normal speech
- Probably fixes a bug with silicon voices not transferring properly?
There was an entire argument missing from tts_request/New
- Fixes problems I got from the Docker build not working at all. Only
thing interesting is `--no-cache-dir` which was to fix the container
running out of RAM even though I literally just got 64GB of RAM today

Got permission from @ optimumtact as alternative to being able to disable
your voice, CC @ Iamgoofball

## Why It's Good For The Game

I spent two hours trying to find a voice that didn't make me
uncomfortable to use and that was even in the realm of being the voice I
would actually want people to hear. Characters still have distinct
"voices" because the blips are chopped together from the voice itself

## Changelog

🆑
add: You can now set your voice to just blips.
/🆑

* Add the ability to use blips as your character's voice

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-08-16 00:12:33 -07:00
SkyratBot
171db94813 [MIRROR] Save 180ms on GetElement by avoiding more stringifying unless necessary [MDB IGNORE] (#23070)
* Save 180ms on GetElement by avoiding more stringifying unless necessary (#77604)

list2params does all this normally and faster. Also avoids going through
the ID generation proc at all if there's only one argument in the list,
which happens with every item description attachment, which happens
frequently.

* Save 180ms on GetElement by avoiding more stringifying unless necessary

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-08-14 08:16:37 -04:00
SkyratBot
30f436724b [MIRROR] More lua harddel fixes [MDB IGNORE] (#23064)
* More lua harddel fixes (#77556)

## About The Pull Request
Fixes some more lua harddel problems with lingering refs on the gc_guard
variable. This variable has been changed to a list instead and will get
cleared every time the SSlua subsystem fires so that lua instantiated
objects that are not tracked by the subsystem will essentially delete
themselves on the next tick, aka whenever the lua script sleeps.

Also removed the unnecessary and not completely functional
lua_reference_cleanup proc which wasn't even being called reliably
because the signal handler was the datum itself.

## Why It's Good For The Game
Fixes more harddel bugs, increases consistency.

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* More lua harddel fixes

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2023-08-13 18:37:01 -04:00
SkyratBot
d2b4b475cb [MIRROR] Spiders don't automatically grant an antag datum [MDB IGNORE] (#23029)
* Spiders don't automatically grant an antag datum (#77523)

## About The Pull Request

Fixes #77501

Spider egg ghost role spawners grant the spider antag datum, rather than
the act of being a spider.
This means that gold core, mapstart, polymorph belt, and other spiders
will not have an antagonist datum.

While doing this I also made a new abstract `mob/living/basic/spider`
type which all three kinds of spider life stage (`spiderling`, `young`,
`giant`) extend from, because there was a gross amount of copied code.
Now there isn't.

Also the Flesh Spider and Event Midwife eggs now simply hatch adult
spiders instead of child ones.
This is because there is no reason for either of these to have a two
minute wait time before they get going. Midwife spiders spawned by the
event should just start spidering immediately, and Flesh Spiders are
made by changelings and shouldn't be effected by measures introduced to
balance the spider gamemode.
Eggs which are laid during a round and _can_ hatch into midwife spiders
still hatch baby spiders.

Also I swapped some white pixels on the animation of the ambush
spiderling for a different colour because they looked bad.

## Why It's Good For The Game

While the policy is always "if you turn yourself into something, you're
not an antagonist" the presence of the antag datum still confuses
people. Plus that code was gross and I didn't like it.

## Changelog

🆑
fix: Giant Spiders only have an antag datum if created by the round
event.
balance: Flesh spider eggs hatch into adult spiders instead of baby
spiders.
balance: The eggs spawned by the start of the spider infestation event
hatch into adult Midwife spiders instead of baby ones.
/🆑

* Spiders don't automatically grant an antag datum

* Modular paths

* Modular paths

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-08-12 00:17:56 -04:00
SkyratBot
599156acdd [MIRROR] Fix antimagic effect never expiring [MDB IGNORE] (#23009)
* Fix antimagic effect never expiring (#77500)

## About The Pull Request

Fixes #77499

I messed this up resolving merge conflicts.

## Changelog

🆑 Melbert
fix: Fix antimagic effect not expiring
/🆑

* Fix antimagic effect never expiring

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-08-11 02:25:47 -04:00
SkyratBot
f19eaf891c [MIRROR] Try waiting for db queries to finish during db shutdown [MDB IGNORE] (#22892)
* Wait for db queries to finish during db shutdown (#77311)

* Try waiting for db queries to finish during db shutdown

---------

Co-authored-by: oranges <email@oranges.net.nz>
2023-08-05 18:38:37 -04:00
SkyratBot
a4cf2e451c [MIRROR] Adds a system for logging metadata about hard deletes [MDB IGNORE] (#22878)
* Adds a system for logging metadata about hard deletes (#76956)

## About The Pull Request

I'm sick of the progress bar harddel, and I've ran into this problem in
the past, so I'm just gonna do something about it

If you want to provide an individual logged bit of info about a harddel,
you can override `/datum/proc/dump_harddel_info()` and return a string
containing "whatever"

Use of this should be limited, this could potentially clutter del logs,
especially if it's used on something that fails often, like pipes

I do think it's still useful tho. It's output ingame, in the logs, and
in unit test failures. Hopefully all nicely tho I'm only really 100%
sure about in game.

* Adds a system for logging metadata about hard deletes

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-08-04 15:25:55 -07:00
SkyratBot
247d37c38a [MIRROR] Improved PDA Direct Messenger [MDB IGNORE] (#22865)
* Improved PDA Direct Messenger

* resolve conflicts

* Delete ntmessenger.dm

---------

Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-08-03 20:03:41 -04:00
SkyratBot
17e20e69b0 [MIRROR] Add "Hall of Fame" emergency shuttle [MDB IGNORE] (#22808)
* Add "Hall of Fame" emergency shuttle (#77074)

## About The Pull Request
This adds a new emergency shuttle called the **Hall of Fame**.

![2023-07-28 06 49
58](https://github.com/tgstation/tgstation/assets/5195984/d818058c-f031-472a-8314-8e4c9054c807)

It's designed around persistence. The goal is to have the shuttle store
memories, photos, and trophies for the crew to see!

## Why It's Good For The Game
Cool way for the crew to store and share memories.

## Changelog
🆑
add: Add a new 'Hall of Fame' emergency shuttle. It even comes with it's
own nifty photo album.
/🆑

* Add "Hall of Fame" emergency shuttle

---------

Co-authored-by: Tim <timothymtorres@gmail.com>
2023-07-31 21:50:56 -04:00
SkyratBot
b234fb6396 [MIRROR] [no gbp] Fixes runtime in SSstation [MDB IGNORE] (#22791)
* [no gbp] Fixes runtime in SSstation (#77231)

No excuse, just dumb. Random layer is the randomly generated parallax
layer, which is null 30% of the time, so this would runtime in SSstation
setup in 30% of rounds

Also another thing where I added extra params and didn't add them to the
proc, fucking parallax for some roundstart clients and latejoins

🆑
fix: fixes a runtime in SSstation setup
fix: fixes parallax not rendering correctly for latejoins
/🆑

![image](https://github.com/tgstation/tgstation/assets/7501474/650242f7-bc33-49eb-98d9-d8e3619ab808)

* [no gbp] Fixes runtime in SSstation

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-07-31 20:05:46 -04:00
SkyratBot
72b1a979ff [MIRROR] Improves the RPG loot wizard event. [MDB IGNORE] (#22800)
* Improves the RPG loot wizard event. (#77218)

## About The Pull Request
As the title says. Adds a bunch more stat changes to various different
items and a somewhat simple way of modifying them whilst minimizing
side-effects as much as possible.
Added a new negative curse of polymorph suffix that can randomly
polymorph you once you pick up the item.
Curse of hunger items won't start on items that are not on a turf.
Curse of polymorph will only activate when equipped.

Bodyparts, two-handed melees, bags, guns and grenades, to name a few,
have a bunch of type-specific stat changes depending on their quality.

Some items won't gain fantasy suffixes during the RPG loot event, like
stacks, chairs and paper, to make gamifying the stats a bit harder.
I'm sure there'll still be other ways to game the event, but it's not
that big of a deal since these are the easiest ways to game it.
High level items also have a cool unusual effect aura

## Why It's Good For The Game
Makes the RPG item event cooler. Right now, it's a bit lame since
everything only gains force value and wound bonus on attack. This makes
the statistic increases more type-based and make it interesting to use

It's okay for some items to be powerful since this is a wizard event and
a very impactful one too. By making the curse of hunger items not spawn
on people, it'll also make it a less painful event too.

## Changelog
🆑
add: Expanded the RPG loot wizard event by giving various different
items their own statistic boost.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>

* Improves the RPG loot wizard event.

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2023-07-31 20:02:03 -04:00
SkyratBot
d64184b1b3 [MIRROR] Arconomy: Balance Update 2023 [MDB IGNORE] (#22766)
* Arconomy: Balance Update 2023

* Update market_crash.dm

* Update flypeople.dm

* Update market_crash.dm

---------

Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-07-29 21:36:28 -04:00
SkyratBot
c7e49e5fa3 [MIRROR] Doubles the time you can get the "Long shift" achievement, makes it not grant on admin restarts [MDB IGNORE] (#22771)
* Doubles the time you can get the "Long shift" achievement, makes it not grant on admin restarts (#77195)

## About The Pull Request

- "Long shift" can now be earned from sub 10 minute rounds rather than
sub 5 minute rounds

- Admin restarts no longer give out "Long shift"

## Why It's Good For The Game

I do not think this achievement can *possibly* be earned right now. Like
at all.

Nuke Ops and cult are the only antags that can possibly do it and it's
incredibly infeasible (requiring that they nuke the station or summon
Nar'sie in just 3 minutes!)

So I bumped up the timer to 10 minutes. This means that ops can get it
if they nuke the station in 8 minutes, cult can get it if they REALLY
speedrun, and revs can get it if they beeline the heads.

I checked the DB for stats on this achievement and it's only been earned
in 3 rounds across the last year - `208780` (admin restart due to a bug)
`192892` (admin restart due to a bug?) `186192` (admin restart).

So I also prevented admin forcing the round to end. (I don't know if it
catches admin reboots directly I'll have to check that.)

## Changelog

🆑 Melbert
balance: The "Long Shift" achievement is now feasibly obtainable, and
admins can no longer trigger it unknowingly
/🆑

* Doubles the time you can get the "Long shift" achievement, makes it not grant on admin restarts

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-07-29 16:02:36 -04:00
SkyratBot
0532392092 [MIRROR] Starlight colors with parallax, small parallax code clean-up [MDB IGNORE] (#22764)
* Starlight colors with parallax, small parallax code clean-up (#77020)

The space gas parallax now colors starlight in the color of the gas:

![image](https://github.com/tgstation/tgstation/assets/7501474/18b5554f-6357-473e-8f43-64aad1517be0)

<details>
  <summary>Others</summary>

![image](https://github.com/tgstation/tgstation/assets/7501474/1599795f-f76d-479d-a1c3-aa19390ad403)

![image](https://github.com/tgstation/tgstation/assets/7501474/fb992df0-ee85-4afc-a546-f28e739ea923)

![image](https://github.com/tgstation/tgstation/assets/7501474/ed64a01c-c104-4177-bf63-b82288251aa9)

</details>

I also cleaned up parallax random code a bit, making it easier to add
new parallaxes and add minor effects to them

The radioactive nebula parallax thing has also been moved to SSparallax
to make it easier and a bit more sane to change

🆑
add: Starlight will color with space gas parallax
code: Cleans up random parallax code / radioactive nebula parallax code
/🆑

## Why it's good for the game

We can change the starlight color now (mostly thanks to @ LemonInTheDark
making light code easier to work with), so I thought it'd be fun to
actually do! If people hate it, I'll turn it off and we can just call
this a code clean-up PR

* Starlight colors with parallax, small parallax code clean-up

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2023-07-29 15:58:27 -04:00
SkyratBot
4f48be9809 [MIRROR] Planetary station traits: Forever Storm and Forested [MDB IGNORE] (#22763)
* Planetary station traits: Forever Storm and Forested

* Update CaveGenerator.dm

* Update CaveGenerator.dm

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-07-29 06:18:46 -04:00
SkyratBot
11d990c26e [MIRROR] Adds cliffs to icebox [MDB IGNORE] (#22744)
* Adds cliffs to icebox (#77062)

## About The Pull Request

Adds cliffs to the game! They're tiles usable for mapping to make
mountainy area's and cliffs! I don't have any sprites for them yet, so
just imagine it's a cliff really hard

![image](https://github.com/tgstation/tgstation/assets/7501474/ab0f31b6-93d7-4964-8b9c-4fb3c774647a)

THESE DO NOT REPLACE MULTI-Z AND NEVER WILL! They're just a neat way to
add more depth to the game. You can’t really add 10 different z’s for
one mountain, so this can be used to help map area’s with depth without
overusing z-levels

They've been mapped into the top part of the icebox outside. There's not
a good way to do sides of cliffs yet (will need some thinking), so
they're mapped in such a fashion where it doesn't matter much. Later,
this area above icebox can be expanded with properly done side-cliffs,
something like in stardew-valley would work for our grid-system:

![image](https://github.com/tgstation/tgstation/assets/7501474/007964cc-49d5-489c-9a43-2140f29239ce)

Longer demonstration: https://www.youtube.com/watch?v=Eig4jXNZZRQ

Eventually, I'll redo mapgen and add 3x3 icebox (definitely not coping)

## Why It's Good For The Game

The incredible flatness of icebox drives me insane. While multi-z is
great at giving it more depth, the actual terrain itself is still
completely flat. Adding cliffs let's us add 'soft-mountains', which does
wonders for making an area feel more alive

(And I absolutely adore snowy mountains)

## Changelog
🆑
add: Adds cliffs to the north of icebox. Try not to fall of of them!
/🆑
<details>
  <summary>Additional images (now outdated)</summary>

https://github.com/tgstation/tgstation/assets/7501474/572dc749-596c-4cab-9693-43c2270aca96

![image](https://github.com/tgstation/tgstation/assets/7501474/e12236d1-fda8-406a-858b-84a9fe5b4dc7)

![image](https://github.com/tgstation/tgstation/assets/7501474/264ae9d8-2f84-4133-8eb3-29e8df6c976e)

![image](https://github.com/tgstation/tgstation/assets/7501474/15a7f378-b595-4d7b-b948-d405916cb431)

![image](https://github.com/tgstation/tgstation/assets/7501474/b058a184-9fd5-4fa9-b0de-9f687bdf4e43)

</details>

---------

Co-authored-by: Jacquerel <hnevard@ gmail.com>

* Adds cliffs to icebox

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
2023-07-28 14:31:06 -04:00
SkyratBot
888801fd05 [MIRROR] Adds a unit test to stop elements from using identical lists for their arguments. [MDB IGNORE] (#22732)
* Adds a unit test to stop elements from using identical lists for their arguments. (#76322)

## About The Pull Request
Ok, so a few days ago I made an issue report about multiple instances of
identical elements being generated because of uncached lists.
ninjanomnom (the mind being the element datums) cleared it up and said
an implementation of GetIdFromArguments() that also checks the list
contents wouldn't be worth the performance cost, while adding that a
unit test should be written to check that it doesn't happen at least
during init, which should catch a good chunk of cases.

Also, i'm stopping RemoveElement() from initializing new elements
whenever a cached element is not found. Ideally, there should be a focus
only unit test for that too, but that's something we should tackle on a
different PR.

Some of the code comments may be a tad inaccurate, as much as I'd like
to blame drowsiness for it. Regardless, the unit test takes less than
0.2 seconds to complete on my potato so it's fairly lite.

## Why It's Good For The Game
This will close #76279.

## Changelog
No player-facing change to be logged.

* Adds a unit test to stop elements from using identical lists for their arguments.

* Fixes unit test

* seeing double

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-27 20:08:55 -04:00
SkyratBot
e0ab5a3328 [MIRROR] Converting crabs to basic mobs [MDB IGNORE] (#22710)
* Converting crabs to basic mobs (#77109)

## About The Pull Request
Exactly what it reads on the tin. As a bonus, they will flee from
attacking targets, hunt tiny critters (crabs are now small-sized) and
actually move sideways (it's an element that covers both client and
basic movement)

## Why It's Good For The Game
Another simple to basic mob refactor.

## Changelog

🆑
refactor: Crabs refactored into basic mobs. They now hunt tiny critters
and flee from attackers.
fix: Fixed crabs not crab-walking.
/🆑

* Converting crabs to basic mobs

* UpdatePaths

* More path changes

* Update simple_animal_freeze.dm

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-27 18:05:51 -04:00
SkyratBot
455cdf0236 [MIRROR] flame_range and flash_range autoset fix [MDB IGNORE] (#22723)
* flame_range and flash_range autoset fix (#77118)

## About The Pull Request
From #27184 flame_range and flash_range should automatically default to
light_impact_range and devastation_range

4abf35e4a7/code/controllers/subsystem/explosions.dm (L285-L288)

But it was broken, probably after moving to subsystem, because now
functions set arguments to 0.

Please note I don't play tg and haven't tested this change. Fix changes
default behavior and may cause unwanted effects.

* flame_range and flash_range autoset fix

---------

Co-authored-by: Alexander V <volas@ya.ru>
2023-07-27 16:25:29 -04:00
SkyratBot
0d09dd08c9 [MIRROR] Photophobia quirk [MDB IGNORE] (#22721)
* Photophobia quirk

* Update quirks.dm

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-07-27 19:24:44 +00:00
SkyratBot
af2bec389d [MIRROR] Sets a saner length limit to ID assignments and paintings' titles. [MDB IGNORE] (#22719)
* Sets a saner length limit to ID assignments and paintings' titles. (#76723)

* Sets a saner length limit to ID assignments and paintings' titles.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-07-27 14:37:29 -04:00
SkyratBot
96dd9e338a [MIRROR] Adds a runtime protection check to play_tts [MDB IGNORE] (#22706)
* Adds a runtime protection check to play_tts (#77106)

## About The Pull Request
I see this stack trace on occasion
```
[2023-07-25 19:04:56.970] RUNTIME: runtime error: get_language_holder() called on a QDELing atom, this will try to re-instantiate the language holder that's about to be deleted, which is bad.
 - proc name: get language holder (/atom/movable/proc/get_language_holder)
 -   source file: code/game/atoms_movable.dm,1458
 -   usr: null
 -   src: AdipemDragon (/mob/dead/new_player)
 -   src.loc: null
 -   call stack:
 - AdipemDragon (/mob/dead/new_player): get language holder()
 - Text To Speech (/datum/controller/subsystem/tts): play tts(L.E.M.O.N. (/mob/living/silicon/robot), /list (/list), /sound (/sound), /sound (/sound), /datum/language/common (/datum/language/common), 7, 0)
 - Text To Speech (/datum/controller/subsystem/tts): fire(0)
 - Text To Speech (/datum/controller/subsystem/tts): ignite(0)
 - Master (/datum/controller/master): RunQueue()
 - Master (/datum/controller/master): Loop(2)
 - Master (/datum/controller/master): StartProcessing(0)
```

Evidently, the list of listeners is *somehow* getting new players or
observers that are being qdeleted (maybe hard deleting?)

That might be a little hard to track down so until then I figure it's
fine to throw in a stack trace and continue so it doesn't brick the
message for everyone else

## Why It's Good For The Game

Prevents the proc from runtiming and cancelling execution, ergo not
playing to everyone else

## Changelog

🆑 Melbert
fix: Fixes some occasions which result in TTS messages not playing
/🆑

* Adds a runtime protection check to play_tts

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-07-26 18:31:42 -07:00
SkyratBot
2c856ec215 [MIRROR] Fixes tgui_open_uis tracking [MDB IGNORE] (#22700)
* Fixes tgui_open_uis tracking (#77101)

Fixes https://github.com/tgstation/tgstation/issues/77097

This breaks uis for everyone with fancy-tgui off and in cases where the
window is closed by external action (byond closing it) which is pretty
bad.

* Fixes tgui_open_uis tracking

---------

Co-authored-by: AnturK <AnturK@users.noreply.github.com>
2023-07-26 13:36:31 -04:00
SkyratBot
f72839edc1 [MIRROR] Dehardcodes HR core blacklist [MDB IGNORE] (#22681)
* Dehardcodes HR core blacklist

* Merge conflicts

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-25 20:24:21 -04:00
lessthanthree
8dcd9bef1d Autotransfer subsystem uses REALTIMEOFDAY (#22397)
* autotransfer changes

* Update autotransfer.dm

* Update autotransfer.dm
2023-07-24 16:51:57 -04:00
SkyratBot
87458d1109 [MIRROR] Makes TTS blips/enabled into one pref [MDB IGNORE] (#22633)
* Makes TTS blips/enabled into one pref (#76558)

## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/53777086/6b06c212-060e-415f-b1fd-a6ac9f651627)

I actually do not know how to test this locally as I don't know how to
set TTS up, hope it works.

## Why It's Good For The Game

It's 2 buttons, one only works depending on the other, I don't think it
makes sense.

## Changelog

🆑
qol: The TTS and TTS Blips option is now one choiced preference.
/🆑

* Makes TTS blips/enabled into one pref

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2023-07-24 16:36:44 -04:00
SkyratBot
38dc811b6b [MIRROR] NEW STATION TRAIT: Radioactive Nebula [MDB IGNORE] (#22614)
* NEW STATION TRAIT: Radioactive Nebula

* Update job_boxes.dm

* Increase the intensity increment time so that shields will last longer

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
2023-07-24 02:07:40 -04:00
SkyratBot
fea702d732 [MIRROR] Rename digital clock subsystem [MDB IGNORE] (#22651)
* Rename digital clock subsystem (#77028)

Renames digital clock subsystem to be better alongside other player
facing names

* Rename digital clock subsystem

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-07-24 00:36:51 -04:00
SkyratBot
c19c197b95 [MIRROR] Fix APC related issues [MDB IGNORE] (#22635)
* Fix APC related issues (#77005)

## About The Pull Request
Fixes a bunch of stuff broken by #76822, including APC control console,
malf blackout ability, shunted malf pinpointing, Admin APC recharge and
others.
## Why It's Good For The Game
Yes.
## Changelog
:cl:Thebleh
fix: Fixed several APC related issues.
/🆑

* Fix APC related issues

---------

Co-authored-by: thebleh <43266738+rdragan@users.noreply.github.com>
2023-07-22 22:41:06 -04:00
SkyratBot
032f45f939 [MIRROR] Adds a new positive quirk, "Spacer Born". [MDB IGNORE] (#22520)
* Adds a new positive quirk, "Spacer Born".

* Update quirks.dm

* Update quirks.dm

oops

* No combining with oversized quirk

* Update quirks.dm

this is why I don't edit in the web app

* Removes HUMAN_ONLY flag

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <vinylspiders@gmail.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-21 00:57:28 -04:00
SkyratBot
08c90f2116 [MIRROR] [MDB IGNORE] Angled Lights & Lighting Prototyping Tool [MDB IGNORE] (#22582)
* [MDB IGNORE] Angled Lights & Lighting Prototyping Tool  (#74365)

## About The Pull Request

Hello friends, I've been on a bit of a lighting kick recently, and I
decided I clearly do not have enough things to work on as it is.
This pr adds angle support to static lights, and a concepting/debug tool
for playing with lights on a map.

Let's start from first principles yeah?

### Why Angled Lights?

Mappers, since they can't actually see a light's effect in editor, tend
to go off gut.
That gut is based more off what "makes sense" then how things actually
work
This means they'll overplace light sources, and also they tend to treat
lights, particularly light "bars" (the bigger ones) as directional.
So you'll have two lights on either sides of a pillar, lights inside a
room with lights outside pointing out, etc.

![image](https://user-images.githubusercontent.com/58055496/228785032-63b86120-ea4c-4e52-b4e8-40a4b61e5bbc.png)

This has annoying side effects. A lot of our map is overlit, to the
point that knocking out a light does.... pretty much nothing.
I find this sad, and would like to work to prevent it. I think dark and
dim, while it does not suit the normal game, is amazing for vibes, and I
want it to be easier to see that.

Angled lights bring how lights work more in line with how mappers expect
lights work, and avoids bleedover into rooms that shouldn't be bled
into, working towards that goal of mine.

### How Angled Lights?

This is more complex then you'd first think so we'll go step by step

![image](https://user-images.githubusercontent.com/58055496/228786117-d937b408-9bc2-4066-9aee-aae21b047151.png)

Oh before we start, some catchup from the last time I touched lighting
code.
Instead of doing a lighting falloff calculation for each lighting corner
(a block that represents the resolution of our lights) in view we
instead generate cached lightsheets. These precalculate and store all
possible falloffs for x and y distances from a source.

This is very useful for angle work, since it makes it almost totally
free.

Atoms get 2 new values. light_angle and light_dir
Light angle is the angle the light uses, and light_dir is a cardinal
direction it displays in

We take these values, and inside sheetbuilding do some optional angle
work. getting the center angle, the angle of a pair of coords, and then
the delta between them.
This is then multiplied against the standard falloff formula, and job
done.

We do need some extra fenangling to make this all work nicely tho.

We currently use a pixel turf var stored on the light source to do
distance calculations.
This is the turf we pretend the light source is on for visuals, most
often used to make wall lights work nice.
The trouble is it's not very granular, and doesn't always have the
effect you might want.

So, instead of generating and storing a pixel turf to do our distance
calculations against, we store x and y offset variables.
We use them to expand our working range and sheet size to ensure things
visually make sense, and then offset any positions by them.

I've added a way for sources to have opinions on their offsets too, and
am using them for wall lights.
This ensures the angle calculations don't make the wall behind a light
fulldark, which would be silly.

### Debug Tool?

In the interest of helping with that core problem, lights being complex
to display, I've added a prototyping tool to the game.
It's locked behind mapping verbs, and works about like this.

Once the verb is activated, it iterates over all the sources in the
world (except turfs because those are kinda silly), outlining and
"freezing" them, preventing any future changes.
Then, it adds 3 buttons to the owners of a light source.

![image](https://user-images.githubusercontent.com/58055496/228776539-4b1d82af-1244-4ed6-8754-7f07e3e47cda.png)
The first button toggles the light on and off, as desired.
The third allows you to move the source around, with a little targeting
icon replacing your mouse
The second tho, that's more interesting.

The second button opens a debug menu for that light

![image](https://user-images.githubusercontent.com/58055496/228777811-ae620588-f08a-4b50-93a0-beea593aea77.png)
There's a lot here, let's go through it.

Bit on the left is a list of templates, which allow you to sample
existing light types (No I have no idea why the background is fullwhite,
need to work on that pre merge)
You can choose one by clicking it, and hitting the upload button.

This replaces your existing lighting values with the template's,
alongside replacing its icon and icon state so it looks right.
There are three types as of now, mostly for categorization. Bar, which
are the larger typically stronger lights, Bulb, which are well, bulbs,
and Misc which could be expanded, but currently just contains floor
lights.

Alongside that you can manually edit the power, range, color and angle
of the focused light.
I also have support for changing the direction of the light source,
since anything that uses directional lighting would also tie light dir
to it.
This isn't *always* done tho, so I should maybe find a way to edit light
dir too.

My hope is this tool will allow for better concepting of a room's
lights, and easier changing of individual object's light values to suit
the right visuals.

### Lemon No Why What

Ok so I applied angle lights to bars and bulbs, which means I am
changing the lighting of pretty much every map in the codebase.
I'm gonna uh, go check my work.

Alongside this I intend to give lighting some depth. So if there's room
to make a space warmer, or highlight light colors from other sources, I
will do that.

(Images as examples)

![image](https://user-images.githubusercontent.com/58055496/228786801-111b6493-c040-4199-ab99-ac1c914d034c.png)

I also want to work on that other goal of mine, making breaking lights
matter. So I'll be doing what I can to ensure you only need to break one
light to make a meaningful change in the scene.

This is semi complicated by one light source not ever actually reaching
fullbright on its own, but we do what we must because we can.

![image](https://user-images.githubusercontent.com/58055496/228786483-b7ad6ecd-874f-4d90-b5ca-6ef78cb70d2b.png)

I'm as I hope you know biased towards darker spaces, I think contrast
has vibes.
In particular I do not think strong lights really suit maintenance.

Most of what is used there are bulbs, so I'm planning on replacing most
uses with low power bulbs, to keep light impacts to rooms, alongside
reducing the amount of lights placed in the main tunnels

![image](https://user-images.githubusercontent.com/58055496/228786594-c6d7610c-611e-478b-bcba-173ebf4c4b12.png)

**If you take issue with this methodology please do so NOW**, I don't
want to have to do another pass over things.
Oh also I'm saving station maps for last since ruins are less likely to
get touched in mapping march and all.

### Misc + Finishing Thoughts

Light templates support mirroring vars off typepaths using a subtype,
which means all the templates added here do not require updating if the
source type changes somehow. I'd like to expand the template list at
some point, perhaps in future.

I've opened this as a draft to make my intentions to make my changes to
lights known, and to serve as motivation for all the map changes I need
to do.

### Farish Future

I'm unhappy with how we currently configure lights. I would like a
system that more directly matches the idea of drawing falloff curves,
along with allowing for different falloffs for different colors,
alongside extending the idea to angle falloff.
This would make out of engine lighting easier, allow for nicer looking
lights (red to pink, blue to purple, etc), and improve accessibility by
artists.

This is slightly far off, because I have other obligations and it's
kinda complicated, but I'd like to mention it cause it's one of my many
pipedreams.

## Changelog
🆑
add: Added angle lighting, applies it to most wall lights!
add: Adds a lighting prototyping tool, mappers go try it out (it's
locked behind the mapping verb)
/🆑

---------

Co-authored-by: MMMiracles <lolaccount1@ hotmail.com>

* [MDB IGNORE] Angled Lights & Lighting Prototyping Tool

* Update north_star.dmm

* Revert "Update north_star.dmm"

This reverts commit bb5b8b5a549f7edc3e23a369a147ed96bab41991.

* Updatepaths

* Update nukie_base.dmm

* Newer version of northstar with the penguins

* Update northstar_cryo.dmm

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: MMMiracles <lolaccount1@ hotmail.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-21 00:43:21 -04:00
Pinta
4d7ba6ebcb [MANUAL MIRROR] Reworks Duffel Bags (Zippers) (#22363)
* Reworks Duffel Bags (Zippers)

* Update backpack.dm

* Duiffel Spotfix

* error fixes

* Update backpack.dm

* Update code/modules/antagonists/cult/cult.dm

* Update backpack.dm

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-07-20 23:12:57 -04:00
SkyratBot
8782f19258 [MIRROR] Stabilizes code that flicks overlays to view/all clients [MDB IGNORE] (#22601)
* Stabilizes code that flicks overlays to view/all clients (#76937)

## About The Pull Request

Rather then using images and displaying them with client.images, we can
instead simply make an object, give it the passed in image/MA's
appearance, and then vis_contents it where we want.

If you want to animate things, you can just use the atom we return from
the proc call.

This ends up costing about 25% of the best case scenario (one guy
online)
It will save more time with more users, but it also allows us to avoid
the hypersuffering that is passing GLOB.clients into the flick proc. So
I think I'm happy enough with this.

For context, here's average per call cost for flick_overlay_view() right
now.
It winds between 5e-5 and 1e-4. With these changes we should pretty
consistently hit the low end of this, because none of our work really
varies all that much.

![flick_avg](https://github.com/tgstation/tgstation/assets/58055496/3483e022-9cc5-490a-be5e-eb79f4e2110b)

(I was using sswardrobe for this, but it ends up being a lot slower so
like, why yaknow)
```
/atom/movable/flick_visual
        New: 3.65625ms
        Provide: 7.4375ms
        Qdel: 9.4375ms
        Stash: 9.46875ms
```

## Why It's Good For The Game

Using our tools should not make your code eat cpu time for no reason.
Hearers is expensive, iterating clients is expensive, let's not be
expensive.

* Stabilizes code that flicks overlays to view/all clients

* Not every client needs to see this

* and these could be using SECONDS

* grr DM

* Convert these modular files to seconds too

* Update dance_machine.dm

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-20 18:59:09 -04:00
SkyratBot
7d3a0672f7 [MIRROR] Bargain bin organ quirks: Prosthetic organ and Tin Man [MDB IGNORE] (#22297)
* Bargain bin organ quirks: Prosthetic organ and Tin Man

* Update organs.dmi

* Update quirks.dm

---------

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
2023-07-20 16:37:43 -04:00
SkyratBot
3fd2f8134b [MIRROR] Optimization pass focused on foam code (saves about 30% of cpu usage I think) [MDB IGNORE] (#22530)
* Optimization pass focused on foam code (saves about 30% of cpu usage I think) (#76104)

## About The Pull Request

Foam is crummy at high load rn, both because it runs on a low priority
background subsystem, and because it wastes a bit of time.
Let's reduce usage (while speeding up a bunch of other stuff too), and
give it more cpu generally.

[Optimizes reagent processing
somewhat](d409bd4afc)

Turns out most of the cost of foam is the reagents it carries, and the
varying effects they have
I'm doing my best here to optimize them without touching "user space"
too much

That means doing things like prechecking if we're gonna spawn on top of
an existing decal (from glitter, flour, etc), and using that same proc
to also avoid spawning on unacceptable turfs (I had to convert
inheritance to a bitflag system to make this work, but I think that's ok
since we want it imparative anyhow)

It's actually nice for code quality too, since it lets me clean up code
that was using raw locates and weird var pong.
god I wish I had implied types man

[Optimizes foam spreading in its most accursed aspect, reagent
copying](5cc56a64ad)

Holy shit reagent code is a lot.

I'm doing a bunch of small things here. istype in init -> typecache,
removing procs that are called once and loop over a list we JUST looped
over (ph and the caching for reactions in particular)

I am mainly trying to optimize copy_to here, since that's what foam
spams
As a part of this, I removed a pair of update_total and handle_reactions
calls that were done on the reagents we are copying FROM

I have no god damn idea why you would want to do that, but if anything
is relying on the copy proc modifying the source, then that code
deserves to break

Speaking of, I cleaned up handle_reaction's main filter loop a lot,
removed a lot of redundant vars and changed it from a full loop w
tracker vars to an early exit pattern

This meant using a loop label, which is unfortunate, but this is the
fastest method, and it does end up cleaning up the code significantly,
Which is nice

Oh also I made the required_other var function even if there is no atom
attached to the reaction, since I don't see why it wouldn't

This last bit is gonna get a bit esoteric so bear with me

Failing calls (which are most of them) to handle_reactions are going to
be fastest if they need to check as few reactions as possible

One reagent in a reaction's required list is marked as the "primary",
and thus gets to trigger checking it.
We need all the reagents to react anyhow, so we might as well only check
if we have one particular one to avoid double checking

Anyhow, in order to make most calls the fastest, we want these reactions
distributed as evenly as possible across all our reagents.
The current way of doing this is just taking the first reagent in the
requirements list and using it, which is not ideal

Instead of that, lets figure out how many reactions each reagent is in,
then divy reactions up based off that and the currently divvied
reactions

This doubles the reagent index count, and takes the most common reagent,
water, from 67 reactions to I think like 22

Does some other general cleaning in reagent code too, etc etc etc

[Fixes runtimes from the forced gravity element being applied more then
once](941d067611)

I feel like this element should take a trait source or something to make
them potentially unique, it's too easy to accidentally override one with
another

[Removes connect_loc usage in atmos_sensitive, replaces it with direct
reg/unreg](de1c76029d)

I only really used it because I liked the componentization, but it costs
like 0.2 seconds off init alone which is really stupid, so let's just do
this the very slightly harder way

[Micros foam code slightly by inlining a LinkBlockedWithAccess
call](744da3694c)

This is in the space of like 0.05 seconds kinda save so I can put it
back if you'd like, the double loop just felt silly

[Changes how foam processes
slightly](ee5e633e32)

Rather then treating spreading and processing as separate actions, we do
both in sync.
This makes foam fade faster when spreading, which is good cause the
whole spread but unclearing foam thing looks silly.
It also avoids the potential bad ending of foam spreading into itself,
backwards and forwards. This is better I promise.

[Bumps fluid priority closer to heavy eaters, moves it off
background](811797f09d)

Also fixes a bug where foam would travel under public access airlocks.

## Why It's Good For The Game

Saves a lot of cpu just in general, from both init and live.
In theory makes foam faster, tho I'd have to test that on live at
highpop to see if I've actually succeeded or not. Guess we'll see.

* Optimization pass focused on foam code (saves about 30% of cpu usage I think)

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Bloop <vinylspiders@gmail.com>
2023-07-18 16:49:51 -04:00
Bloop
46d84e6119 [MANUAL MISSED MIRROR] Replaces lava and chasm's "safeties" and ignoring turf slowdown on catwalks with traits and a new element (#22384)
Replaces lava and chasm's "safeties" and ignoring turf slowdown on catwalks with traits and a new element. (#76376)

This adds a new element for movables that grants turfs they're in
traits, changes lava and the chasm component to check for traits
instead, ditto for turf slowdown. It also implements another trait that
prevents wet floor from slipping people, as well as some other changes
(feel free to opine on them really):
- Tables and conveyor belts now stop turf slowdown, much like catwalks,
as I imagine people walking on them are not really touching the floor.
(I'd include protection against lava too... until they melt, but that'd
mean finding a way to have these objects burn in the first place, and
lava code is still stupid despite a years old refactor I did)
- Tables also stop slippery turfs from slipping (bananas, soaps etc.
still apply). I wish there were a way to make some objects slippery by
coating them in water vapor or splashing water/lube, but that's outside
the scope of this PR.
- Fixed an edge case in which a mob standing on a lava turf would be
left permanently visually on fire if the lava is changed to another kind
of turf.
- Removed unused code from stone tiles.

I'm going to include these traits in that global list for admin-added
traits... tomorrow perhaps. 💤

Replacing some hard-coded mechanics with easier to use traits and an
element, which I also need for the submerge element PR.

🆑
refactor: Replaced hardcoded "safeties" for lava, chasms and ignoring
turf slowdowns on catwalks with traits.
balance: much like catwalks, tables and conveyors also disable turf
slowdowns.
balance: slippery turfs won't slip you when walking on a table.
fix: Fixed an edge case in which a mob standing on a lava turf would be
left visually but permanently on fire if the lava is changed to another
kind of turf.
/🆑

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-07-18 00:06:04 -04:00
Bloop
b674e72ef1 [MISSED MIRROR] Macros multi-z code, removes the false premise of manual offsets (#76248) (#22531)
* Macros multi-z code, removes the false premise of manual offsets (#76248)

## About The Pull Request

[Removes the pretense of relative multiz
levels](0293fdc2bd)

Our multiz system does not support having a z level that is only
connected one way, or which goes down backwards or anything like that.

That's a fiction of the trait system, the actual backend has never
really supported this.

This pr removes the assumptions we were making backend around this, and
uses that to save cpu time.

I am also converting multiz_levels from an assoc list to a pure one,
which saves significantly on access times and cleans up the code
somewhat.

Also I'm making the get_below/get_above procs into macros, for the sake
of cpu time.

[Converts the starlight disease to use BYOND's directional defines
instead of our
own](7d698f02d9)

To some extent spurred on by
https://github.com/DaedalusDock/daedalusdock/pull/298, tho it was known
before

## Why It's Good For The Game

Faster multiz code, faster init, etc etc etc

* modular files how very dare you

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-07-18 02:28:15 +00:00
Bloop
cc952a88d4 [FIXED MIRROR] Fixes some spurious runtimes in SStgui procs (#76251) (#22517)
Fixes some spurious runtimes in SStgui procs (#76251)

## About The Pull Request

src_object is NOT guaranteed to be passed in. HHHHHHHHHHH
Closes #76249

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-07-16 21:20:43 -04:00
SkyratBot
0a03e8a2a7 [MIRROR] Machine list is now stored in SSmachines | Remove excessive use of global lists for specific machine types [MDB IGNORE] (#22481)
* Machine list is now stored in SSmachines | Remove excessive use of global lists for specific machine types

* Resolve merge conflicts

* Modular adjustments

* destroy this double return on destroy

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
2023-07-15 22:51:23 -04:00
Bloop
6ddf70316d [MISSED MIRROR] Hemiplegic quirk (#76526) (#22450)
* Hemiplegic quirk (#76526)

## About The Pull Request

Like paraplegic, but instead of a horizontal half of your body being
fucked, it's a vertical half!

![image](https://github.com/tgstation/tgstation/assets/82850673/aab1059e-9f5a-4778-a72a-c55c9fe75403)

![image](https://github.com/tgstation/tgstation/assets/82850673/2edf1a76-906f-41f5-984c-4260b65a279d)

## Why It's Good For The Game

Character customization and pure, undistilled human suffering.

## Changelog
🆑
add: Added Hemiplegic quirk.
/🆑

---------

Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>

* Update jobs.dm

---------

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: carlarctg <53100513+carlarctg@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2023-07-15 10:39:27 -04:00
SkyratBot
02648adcd6 [MIRROR] Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests [MDB IGNORE] (#22348)
* Refactors mind language holders into non-existent, fixes new languages being deleted on species swap + tests

* Fixing merge conflicts

* don't forget to ctrl+s!

* Another forgotten file

* urgh

* gets rid of vestiges of update_atom_languages()

and mind language holders

* No longer needed

* Fixes some modular grant_language calls

* Deprecated code

* This was up here before..

* Fixes failing unit tests, refactors silverscale lizards language a bit removing the need for skyrat edits

Removes some no longer needed code

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
2023-07-13 22:38:45 -04:00
SkyratBot
ae36263265 [MIRROR] Bilingual can now choose their language [MDB IGNORE] (#22296)
* Bilingual can now choose their language

* Fix a merge error, removes a skyrat edit in favor of modular override

* uh what

* Moves the setup of GLOB.all_languages back into the subsystem + makes it load before SSAssets

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Giz <vinylspiders@gmail.com>
2023-07-13 14:26:00 -04:00