Commit Graph

3810 Commits

Author SHA1 Message Date
SkyratBot
5b1881d888 [MIRROR] Give Error Messages On Subsystem Initialization Failure CI (#27144)
* Give Error Messages On Subsystem Initialization Failure CI (#82139)

## About The Pull Request

Noticed during #82138

Basically, the unit test that makes sure that all of the subsystems that
had to initialize properly initialized is good with the Notice
annotation, but it had a flaw - it didn't tell you _why_ the subsystem
failed to initialize:

![image](https://github.com/tgstation/tgstation/assets/34697715/3cd719d2-2f1f-42a9-8c36-d5c37b8a330c)

Basically this PR just adds a variable, `initialization_failure_message`
(i have it on good authority that variables that don't get changed from
their compile time variable don't take up extra memory), and we just
append the failure message to this notice should it occur so all of the
information is available in one spot, rather than have the coder dig
through the CI Run Log to figure out what the specific error was should
it occur on something that isn't SSlua.

also small cute code cleanup :3

* Give Error Messages On Subsystem Initialization Failure CI

---------

Co-authored-by: san7890 <the@san7890.com>
2024-04-04 21:52:32 +02:00
SkyratBot
ea9544d8a7 [MIRROR] Clamps material market quantities & prices during cargo operations (#27146)
* Clamps material market quantities & prices during cargo operations (#82338)

## About The Pull Request
- Fixes #82329

Cargo operations means buying & selling materials on the market. Now
both their prices & quantities are clamped during these operations

Also increased the width of materials market UI so large numbers don't
overflow to the next line.

## Changelog
🆑
fix: buying & selling huge quantities of materials on the market won't
cause their prices & quantities to go beyond bounds.
/🆑

* Clamps material market quantities & prices during cargo operations

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2024-04-04 21:52:20 +02:00
SkyratBot
a442dea379 [MIRROR] Refactored admin backup saving. No longer at round end, more data backed up (#27135)
* Refactored admin backup saving. No longer at round end, more data backed up (#81891)

Admin verified connections now cache all verified connections for all
admins. (Rather then just the last connection data of the currently
connected admins)

Sync with the db now happens at admin load time, not at round end. (this
was causing annoyances because servers with long rounds could override
the admin db with old/stale data overwritting the fresher data that was
written by a server with a shorter round)

Fix backup verification not working if the db thinks it still connected
but its not actually still connected.

@ Mothblocks @ Jordie0608

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>

* Refactored admin backup saving. No longer at round end, more data backed up

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@ users.noreply.github.com>
2024-04-04 14:54:20 -04:00
SkyratBot
232e952eda [MIRROR] Adds dynamic blob/obsession to ghost popups, removes third rail popup, tweaks supply pod popup (#27057)
Adds dynamic blob/obsession to ghost popups, removes third rail popup, tweaks supply pod popup (#82234)

## About The Pull Request

Three changes to ghost orbit popups. Let's check them one-by-one.

First off -- The obsession awakening and blob host midrounds now have a
ghost popup when summoned via Dynamic. They already have them when
summoned by a random event roll, so this is mostly just bringing the two
different spawn methods in line with each other. None of the other
midround dynamic picks (autotraitor, revs, etc) have had this added,
because they're less focused on spectacle and require more mystery to
function properly.

Second -- The electrified railings on the tram no longer notify ghosts
every time someone gets shocked. Electrocute_act is called on anything
that passes by it, and the popup would be thrown regardless of whether
or not they've "fallen in the path of an oncoming tram" or not. Making
it check if the electrocute_act actually successfully stunned a player,
and that they're about to be hit, would probably require an unwieldy
rewrite to the behavior that I'd rather not resort to. I brought this
helper call into this world, and now I'm taking it out.

Lastly -- The supply pod random event can now be properly jumped to.
Originally, it would track the landing indicator, which would delete
almost immediately and leave an un-orbitable popup on your screen. Now
you jump to the landing zone, regardless of when you click the toast
popup.

This is really long PR body for such tiny changes please don't think
this is anything more than it actually is.
## Why It's Good For The Game

Minor improvements to some ghost orbit popups, because Observers are
players too!
## Changelog
🆑
qol: Dynamic midrounds "Obsession Awakening" and "Blob Host" now have
ghost orbit popups, so you can see them happening in real time.
qol: There is no longer a ghost orbit popup for players being shocked by
an electrified tram rail.
qol: The Stray Cargo orbit popup no longer has a half-second window to
orbit before it becomes useless.
/🆑

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2024-04-04 13:50:16 -04:00
SkyratBot
7c9c33f4a0 [MIRROR] [NO GBP] Fixes the LTSRBT (#26994)
Fixes the LTSRBT

I borked it in the blackmarket refactor. It was constantly on cooldown
when idle. Also, some logic mistakes.

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-04-03 02:19:40 +02:00
SkyratBot
3ff553cb62 [MIRROR] Moves lua off of the timer subsystem and onto its own internal scheduler. (#26980)
* Moves lua off of the timer subsystem and onto its own internal scheduler. (#82131)

## About The Pull Request
Lua uses the timer subsystem, which can end up holding the entire timer
subsystem if lua is creating a lot of timers.
The solution to this is to use an internal scheduler instead so that the
load gets placed onto the lua subsystem.

## Why It's Good For The Game
Performance improvement when using lua scripts.

## Changelog
🆑
refactor: Auxlua no longer uses the timer subsystem to get stuff done,
lua scripts shouldn't slow down timers anymore.
/🆑

---------

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

* Moves lua off of the timer subsystem and onto its own internal scheduler.

---------

Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <3052169-Watermelon914@ users.noreply.gitlab.com>
2024-04-03 01:04:17 +02:00
tmyqlfpir
bc3de0ca94 [MODULAR] Create a new techweb for DS-2 (#27132)
Add new techweb for Interdyne
2024-04-02 11:00:39 -05:00
SkyratBot
031e483e4d [MIRROR] New station trait job: Human AI (#26823)
* New station trait job: Human AI (#81681)

This PR does many things, I'll try to explain the basic/background stuff
to the main thing first:

1. Adds a new remote that allows a human to function like an AI. It
controls a fly that will fly around the station slowly, and when it
reaches a machine then the person can interact with it as if they were
an AI. This required changing a lot of silicon/AI checks with one that
also checks for this remote, and some messing with shared ui state.
2. Moves req_access from the obj and bot to ``/atom/movable`` which lets
it be shared between the two, no more copy-paste and one side lacking
features/checks/signals the other has.
3. Adds a check for AI config for AI-related station traits, which was
lacking prior

Now for the good part...
Adds a new station trait that replaces the AI with a Human.
This person is equipped with an AI headset (including Binary), an
advanced camera console, an omni door wand, the machine controller, and
their laws.
They are immune to the SAT's turrets (even if set to target borgs) and
are slow outside of the SAT, mimicing the actions of the AI.

They interact with the world through their advanced camera console,
which allows them to do most AI stuff needed, and the holopad they can
connect to without having to ring first (like Command can).

They are given a paper with the laws they must follow, but since they
are human they are able to bend it. Cyborgs that run the default lawset
are "slaved" to them via an unremovable law 0, so the Human AI can bend
the laws if they really need to (for their own survival n such), and
make the cyborgs obey their commands above laws, but in general this
shouldn't be a frequent occurrence. This does take into account the
unique AI trait, so it's not guaranteed Asimov.

When this station trait rolls, all Intellicards, AI uploads, and AI core
boards are destroyed and are unresearchable. They can be spawned by
admins in-game if necessary. Maybe in the future we can also exclude
Oldstation from this but I haven't really decided.

Extra perks:

Human AI spawns with a Robotic voicebox (unless they are a body purist)
and teleport blocking implant, so they can't use teleporters to bypass
their on-station slowdown.
They also have an infinite laser pointer that can be used to blind
through their camera console. This is unfortunately nerfed from the
recent borg balance PR that removed its stun. This was meant to be the
alternative to no longer being able to permanently lock borgs down like
AIs can (or more than one, for that matter).
They aren't affected by Roburgers, Acid, and Fuel's toxicity.
Bots salute them like they do Beepsky (which is now a trait)
They spawn with SyndEye to replace the AI's tracking ability
They do not have a bank account

The machine remote has a little fly in it that flies to the machines it
is pointed to, working as the arms and legs of the Human AI. It scans
the machine and punches in the action the AI does, and is how the AI
accesses basically anything. This fly slowly moves from one machine to
the next, and can be recalled with Alt Click.
It works on machines and bots.

https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8

I've seen a funny screenshot one day of a person replacing the AI by
using a bunch of door remotes, camera console, crew monitoring console,
and a few other things. I've been thinking about that for a few years
and really wanted to make it official if not easier to make possible,
because it is an incredibly funny interaction.
This makes it a reality, and while they aren't as powerful as regular
AIs, I think it makes for better and funnier in-game moments. With the
same weight as Cargorilla (1), I hope this wouldn't be rolling too often
and ruin rounds, but instead show off the different capabilities that
Humans and AIs can do, to do the job of an AI. You win some you lose
some.

🆑 JohnFulpWillard, Tattax
add: Adds a new station trait job: The Human AI.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>

* Oh right

* so this works

* whoooops

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-31 22:39:22 -04:00
Waterpig
d8f914ec6a Only allows people onstation with linked bodies to vote on transfer votes (#1286)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Several people suggested this, let's give it a shot. Antags also get a
vote, hooray!

## Why It's Good For The Game

There's constant complaints about ghosts and ghost roles rigging votes.
Let's see if this helps.

## Proof Of Testing

Just now I realized there is ONE exploit that allows you to manipulate
this. After testing. If you find it and report it you will get a cookie
(Unless I fix it first)

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
balance: Bodyless ghosts and ghostroles can no longer transfervote
refactor: Added support for vote mob conditions
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->
2024-03-30 11:04:29 +01:00
SkyratBot
8dec82ee85 [MIRROR] Blackmarket refactor and balance, fixing spy bounties, plus a new category for people captured by pirates/tots/contractors. (#26869)
Blackmarket refactor and balance, fixing spy bounties, plus a new category for people captured by pirates/tots/contractors. (#81818)

This PR aims to take care of a few potential hard dels and fix the
fenced goods category first and foremost.

The PR also adds a new one that enables you to buy mobs captured by
antags in advance, before they're sent back to the station. Unlike other
categories, it doesn't have "Launch" and "Teleport" as delivery methods,
instead it uses a special "Supply Pod" delivery method that ships the
chattel directly to your location. This method costs 400 credits,
however, if you've built the LTSRBT, shipment will be free.

Another thing, I always felt LTSRBT to be pretty fucking dumb as is. Way
too overpriced for the benefits it offers: a slighty cheaper delivery
method that, while definitely better than the other two, doesn't really
pay off or honestly even remotely compensate the 4000 credits you just
spent to get it, especially if you're only buying a couple items at
most. So I decided to remove it from cargo and add it to the blackmarket
as a 500 to 750 creds item, available every round.

Human mobs sold by the pirate bounty pad are no longer deleted, instead
they're properly ransomed and sent to the holding facility, much like
for contractors and tots. This means they're also added to the black
market.

The blackmarket system has some issues to it that need to be fixed
(otherwise the "Fenced Goods" and "Hostages" categories wouldn't work).
The Pirate Pad deleting "ransomed" mobs instead of actually ransoming
them is lame. The LTSRBT shouldn't suck as much. Also more market stuff.

This will fix #81809.

🆑
fix: Fixed the "Fenced Goods" black market category.
balance: Removed the LTSRBT from cargo and added it to the blackmarket,
reduced the price from 4000 to 625 on average.
balance: The time it takes for captured mobs to be automatically sent
back to the station from the holding facility has been increased from
3-4 minutes to 6.
add: You can buy mobs captured by contractors, traitors and pirates from
the black market and have them sent back to the station in advance. For
safety, they'll also be handcuffed (not always) upon delivery.
add: Human mobs sold by pirates are not deleted anymore. Instead,
they're now captured and sent to the holding facility.
/🆑

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-28 22:39:23 -04:00
SkyratBot
37ddf17bfc [MIRROR] Fix polling mutating its target's plane and layer (#26904)
* Fix polling mutating its target's plane and layer

* Update polling.dm

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-27 00:04:57 -04:00
SkyratBot
227264f146 [MIRROR] Removes Orbit Polling Component, SSpolling improvement (#26769)
* Removes Orbit Polling Component, SSpolling improvement

* a

* Update effects.dmi

* Update tgstation.dme

* Revert "Update tgstation.dme"

This reverts commit d4fdaf0abbfaacddb0cc0d175dad4e410fe57e44.

---------

Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-26 11:20:47 -04:00
SkyratBot
dbbc201195 [MIRROR] [NO GBP] Fix curators not getting a cut from patronized paintings in a better way (#26996)
* [NO GBP] Fix curators not getting a cut from patronized paintings in a better way (#82159)

## About The Pull Request
I'm giving all the credits of this PR to the creator of #82153. The
reason I'm making this PR is because, while the other fix work too, I
believe this one is perhaps better so that we won't have to call
`SSjob.GetJobType(jobtype)` everytime we want to access or make use of
the `bank_accounts_by_job` variable.

## Why It's Good For The Game
See title, also the other PR if you want a more indepth explaination of
relatively simple stuff.

## Changelog
🆑 00-Steven
fix: Fixed patronizing paintings not giving a cut to the curators.
/🆑

* [NO GBP] Fix curators not getting a cut from patronized paintings in a better way

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-23 16:44:08 -04:00
SkyratBot
821c256fc3 [MIRROR] Alternate job titles such as chef and department security get injected to the manifest normally, and show up as the right department. (#26767)
* Alternate job titles such as chef and department security get injected to the manifest normally, and show up as the right department.

* Update code/modules/jobs/job_types/_job.dm

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-23 16:36:46 -04:00
SkyratBot
4fb4a50167 [MIRROR] A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief (#26711)
* A red spy has entered the base: Adds Spies, a roundstart antagonist inspired by Goonstation's Spy-Thief

* Update code/__DEFINES/role_preferences.dm

* Update code/__DEFINES/role_preferences.dm

* closet fix

* I am stupid

* fix effects

* there we go

* is this the end?

* ugh

* please stop

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com>
2024-03-23 16:27:57 -04:00
SkyratBot
0a693b9dfa [MIRROR] Bitrunning 1.5: Secondary Objectives (#26821)
* Bitrunning 1.5: Secondary Objectives (#81828)

## About The Pull Request

Added secondary objective lockboxes to bitrunning. These pull from a
list of secondary objective loot on the domain, with a limited quantity
of items. Once there are no items left to pull, the secondary objective
disappears. If multiple secondary objective markers are placed, they
will be placed until all markers have been used, or all the items in the
loot pool are already spoken for.

To support this functionality, adds SSbitrunning, which stores all
domains as instances, instead of checking the hardcoded types as
previously. SSbitrunning manages listing domains for the quantum
console, and rolling secondary loot.

As an example of this functionality, added a side path to Glacier Grind
with a polar bear and some loot.

## Why It's Good For The Game

Secondary objectives give mappers ways to encourage players to venture
into a wider range of domains by offering non-trivial loot beyond the
fluff items given in the main caches. The absolute limit on the number
of items available ensures these items can't be farmed.

As well as supporting secondary objectives, SSbitrunning allows for
future support of features relying on mid-round modification of domains,
for instance adding custom domains.

## Changelog
🆑
add: Added secondary objectives to bitrunning!
add: Pick up encrypted curiosities and return them to the safehouse to
claim their contents.
add: Glacier Grind has been given a secondary objective, look out for
the limited edition hat.
add: Bitrunning domains can now be modified during the round by admins.
/🆑

* Bitrunning 1.5: Secondary Objectives

* Update virtual_domain.dm

---------

Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-22 12:17:51 -04:00
Arturlang
064c49a0f9 [DONE] Adds the weakness to sol quirk (#1255)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
You know how bloodsuckers are weak to Sol? Now you can be too! Only as a
hemophage.
Features included: The very same warnings and UI that bloodsuckers get
to know when they are in danger!
This quirk also makes healing in a coffin cost only half blood, neat
huh?
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

<!-- Please make sure to actually test your PRs. If you have not tested
your PR mention it. -->

## Why It's Good For The Game
People wanted to suffer, and why am I to deny them pain?
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Proof Of Testing
HUD/ burning / healing works fine
<!-- Compile and run your code locally. Make sure it works. This is the
place to show off your changes! We are not responsible for testing your
features. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Adds the hemophage-only quirk, Sol weakness
code: Refactors the sol subsystem so that itself decides if it should
run or not based on if anyone is using it.
code: Refactors bloodsucker UI elements so that they can function fine
outside a bloodsucker antag datum
code: bloodsucker_blood_volume, humanity_lost, bloodsucker_level and
bloodsucker_level_unspent are now private variables due to them being
used for UI updates, if you need to change them, use the procs that are
written in the autodoc
code: Quirk species whitelists no longer use bitflags, but use the
species ID's. Easily allowing you to add new whitelists without having
to mess around with making a new bitfield
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->

---------

Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com>
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
2024-03-21 18:57:12 +01:00
SkyratBot
7a94964706 [MIRROR] DeathMatch Rolling Antag Fix (#26935)
* DeathMatch Rolling Antag Fix (#82030)

## About The Pull Request

Gives Deathmatch players the TRAIT_TEMPORARY_BODY which is checked
during antag rolls while trimming candidates.

## Why It's Good For The Game

Closes https://github.com/tgstation/tgstation/issues/81725

## Changelog

🆑
fix: Deathmatch players should no longer be able to roll any midround
antagonist.
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>

* DeathMatch Rolling Antag Fix

---------

Co-authored-by: Bilbo367 <163439532+Bilbo367@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
2024-03-18 22:10:41 -04:00
SkyratBot
b42d49c174 [MIRROR] Adds logging to SSore_generation on subsystem initialize (#26891)
* 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>
2024-03-15 14:22:19 -04:00
SkyratBot
34abde5249 [MIRROR] Instrument editor now uses TGUI (#26889)
* Instrument editor now uses TGUI (#81923)

## About The Pull Request

Instruments now use TGUI as their editor which is pretty cool.
It's mostly a 1:1 remake of the HTML UI except I did make a change to
make the playback options a little more compact, leaving some more space
for the editor before you have to scroll, and some other minor things
that were made to make the UI hopefully nicer to look at and mess with.

When there's a song to play - While playing, Repeat section can't be
edited

![image](https://github.com/tgstation/tgstation/assets/53777086/33f21ca3-98d8-4147-83e7-74e7611463e6)

Help section and UI when there's no song put in

![image](https://github.com/tgstation/tgstation/assets/53777086/babd30ab-9551-448b-9fe6-24e0b0535caf)

## Why It's Good For The Game

It is yet another step in finishing up
https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view
Instruments especially were in a poor spot because they didn't respect
things like ``IN_USE`` to not refresh if it's not the "UI" you are on,
and such.

## Changelog

🆑
refactor: Instruments now use TGUI.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Instrument editor now uses TGUI

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2024-03-15 13:42:52 -04:00
SkyratBot
55cfe47aaf [MIRROR] Closet Anomaly station trait. (#26883)
* Closet Anomaly station trait. (#81393)

## About The Pull Request
Well, it's a station trait that makes a small number of (non-secure)
closets function as if splashed with eigenstatium (which turns them into
teleportation cabins of some sort). However, they're subtler, they lack
the transparency and blueish tint, and don't make sparks.

This PR also demotes the Eigenstate subsystem to a singleton global
datum. It doesn't fire, it doesn't init, it plain doesn't belong amongst
the big boys.

## Why It's Good For The Game
This should be a mildly interesting station trait.

## Changelog

🆑
add: Added a 'Closet Anomaly' station trait, which links and turns a
portion of the roundstart closets into impromptu teleporters.
/🆑

* Closet Anomaly station trait.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-03-15 13:39:23 -04:00
SkyratBot
9def6a3113 [MIRROR] Fix shutdown hanging if the db went away. gives shutdowns a time out. improves db shutdown logging (#26754)
Fix shutdown hanging if the db went away. gives shutdowns a time out. improves db shutdown logging (#81813)

terry right now:
```
[20:11:31] Runtime in code/controllers/subsystem/dbcore.dm,353: Attempting to create a new db query during the world shutdown
...
[21:25:29] Runtime in code/controllers/subsystem/dbcore.dm,353: Attempting to create a new db query during the world shutdown
```

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2024-03-15 13:31:23 -04:00
Return
dce4a8754a Lift him (PR that makes it so you can be lifted) (#1131)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
Source inspiration:
https://github.com/Bubberstation/Bubberstation/pull/1042
This PR adds an optional 1-point positive quirk that allows you to be
picked up. This has no real functional difference from the fireman's
carry.

Naturally, this trait is mutually exclusive with the oversized quirk.
<!-- Please make sure to actually test your PRs. If you have not tested
your PR mention it. -->

## Why It's Good For The Game

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->


https://github.com/Bubberstation/Bubberstation/assets/110273561/795a66fb-2073-457e-9aab-333fae67117b

## Proof Of Testing

![image](https://github.com/Bubberstation/Bubberstation/assets/110273561/d59cb562-45ed-49ee-9821-a1d7635ea9f1)

<!-- Compile and run your code locally. Make sure it works. This is the
place to show off your changes! We are not responsible for testing your
features. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑 ReturnToZender (quirk code), TeshariEnjoer (original PR)
add: New positive trait, featherweight. Allows you to be picked up
instead of fireman's carried. This dipshit yours?
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
2024-03-15 13:17:31 +01:00
SkyratBot
e5652ecc24 [MIRROR] Add compile option for compiling in MAP_TEST mode, which disables common annoyances when testing new maps (#26792)
* Add compile option for compiling in `MAP_TEST` mode, which disables common annoyances when testing new maps (#81697)

## About The Pull Request

Adds `MAP_TEST` compile flag.

This compile flag blocks common things which make it difficult to test a
map.

Things this applies to:

- Rats no longer spawn.
- Rat spawning will (obviously) break up the powernet, which is
INCREDIBLY annoying when trying to test if all the rooms of the station
are wired correctly (or testing which rooms lose power first, etc)

- Light tubes no longer break on initialize.
- Random light breakages can easily cause mappers to accidentally over
light a room.

- Roundstart command report is not printed.
- Might be a personal preference, but it's kinda annoying to hear the
alert over and over again.

- Random events do not trigger.
- Some events such as gravity generator outage can trigger with 0
population.
   - Random camera breakage event can cause over-placement of cameras.
   - Other stuff tends to just get in the way.

- Station traits do not trigger.
- Probably the biggest annoyance. Many traits modify the map in some way
which disrupts testing.

- Roundstart landmarks don't self deletes.
   - Allows mappers to use sdql to find them.

- Mapping verbs start enabled.

Obviously more things can be added if they come up.

* Add compile option for compiling in `MAP_TEST` mode, which disables common annoyances when testing new maps

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-03-11 23:00:30 -04:00
SkyratBot
4df5f1ddbc [MIRROR] Explosion Block (A hidden stat on things like reinforced walls) is more effective against heavy and light tiers of explosions (#26829)
* Explosion Block (A hidden stat on things like reinforced walls) is more effective against heavy and light tiers of explosions (#81603)

## About The Pull Request

As of right now if a 5/10/20 bomb goes through a reinforced wall it has
its ranges subtracted by a flat value of 2 (explosion block is a flat
subtraction to each tier) and essentially gets turned into a 3/8/18.

This pr just buffs the effect of explosion block against heavy and
light. The modifier is 1.5x against heavy and 2.5x against light (I
might nerf 2.5x down to 2x) I dont want to nullify shockwaves because
they should always be impactful at weakening the station.

In the same situation a 5/10/20 bomb goes through a reinforced wall, it
has its ranged subtracted and ends up 3/7/15

Here is an image of a max cap (5/10/20, do note that currently tg server
config is like 8/16/32 or something crazy) in tram sci, notice there is
roughly 2 layers of reinforced walls on the right and it makes it
through the first layer and hits the second, it would likely destroy the
entire first layer of reinforced walls and remove several tiles from the
second making a second explosion able to go into genetics entirely
unmitigated.

![image](https://github.com/tgstation/tgstation/assets/62126254/dbbcb834-e734-43c8-a50a-6b13d850d941)

In practice the 2nd layer of walls remains miraculously unscathed due to
light explosions having an rng diceroll on destroying reinforced walls

![image](https://github.com/tgstation/tgstation/assets/62126254/42c5ab23-9d72-4b49-be83-04d9e160a9a3)

A second blast still gets through since the 1st layer is no longer there
to protect it.

![image](https://github.com/tgstation/tgstation/assets/62126254/e86e36b6-f9ea-42b8-8918-23d2e72a7416)

Do note on live servers it would be much bigger due to max cap being
8/16/32 , going through 1 reinforced walls would result in 6/13/27 which
is still far larger than the 5/10/20 shown.

## Why It's Good For The Game

Its probably not the best approach to fixing the problem and I probably
made it too good at mitigating light but..

As of right now reinforced walls are so weak at stopping or mitigating
explosions that they are spammed alittle bit more than they should be on
a lot of maps and the nukie ship has a laughably silly explosion block
of 20!!! Just to be able to make it somewhat safe.

Every once in awhile atmos becomes a hot topic for debate because of
some new form of spammable explosive that is getting nerfed because of
the way they can easily wipe the station but we never took a look at how
explosions are done, if this pr is merged it won't kill those types of
gimmicks but it will necessitate actually thinking about how you plan to
bomb the station since now you will need to repeatedly bomb to get
through hardpoints (remember even if a reinforced wall mitigates an
explosion it can be dismantled by it and let subsequent explosions
through) or simply position those bombs directly inside of areas of
interest

Another important note is that rooms that map makers intend to be
explosive resistant should be able to better contain 1 explosion so less
situations of everyone in sci getting cucked by toxins messing up
(unless its so bad that they bomb themselves twice)

If this pr is merged I would suggest keeping an eye on heavy firelocks,
they are more expensive than reinforced walls but allow movement through
them which means they are a lot more practical for spamming explosive
block.

I personally wanted to make foam and other materials good at uniquely
blocking different tiers of explosions but I recall being told that was
a little bit too complicated, if this pr doesn't go well I might try
that.
## Changelog
🆑

balance: Reinforced sections of station hull have gotten better at
mitigating explosive shockwaves.
/🆑

* Explosion Block (A hidden stat on things like reinforced walls) is more effective against heavy and light tiers of explosions

---------

Co-authored-by: moocowswag <62126254+moocowswag@users.noreply.github.com>
2024-03-11 22:25:27 -04:00
SkyratBot
7ae5117833 [MIRROR] refactor db connection timeouts (#26780)
* refactor db connection timeouts (#81816)

Give it exponential back off and smerter logic.

* refactor db connection timeouts

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2024-03-07 08:55:25 -06:00
SkyratBot
2eac95b7a1 [MIRROR] Adds a small cafeteria behind the right wing shutters of the museum. (#26766)
* 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:
![museum
cafe](https://github.com/tgstation/tgstation/assets/42542238/1c0d93b7-90d5-4459-a48d-81430f0d3613)
![museum
restrooms](https://github.com/tgstation/tgstation/assets/42542238/5a9e049d-6acc-464b-998d-901e43154bae)

## 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>
2024-03-07 08:53:28 -06:00
SkyratBot
ac3dc870b0 [MIRROR] Arcargo: Balance Pass v2 on the Stock Market (#26781)
* Arcargo: Balance Pass v2 on the Stock Market  (#81580)

## About The Pull Request

Picking up where I left off on #81216.

* Stock market stocks have had their market quantity drastically
reduced, as on both the more common and more rare material sides of
things these materials traditionally have been traded in quantities that
it would prevent bicycle like quantities of materials entering the game
while still allowing for access to rare materials at rare material rates
of credits.

* The stock market subsystem now fires once every 60 seconds, as opposed
to once every 20 seconds. To compensate for this, the subsystem now
makes much wider price changes every update, to disincentivize players
from just camping out at the stock market console all game, as this is
behavior we typically discourage (genetics/virology/etc). Material
tending times are similarly decreased to make up for that, while noting
that stock market events will still enable for a material to change
directions at any point as well.

* Material prices can drop below their minimum trading threshold,
resulting in them gaining protected purchasing status, and resulting in
them being unavailable for purchase. This means if you're watching a
price drop, and it's still trending lower, there's a distinct chance you
might want to buy before it drops below the threshold, or risk it, buy
later, and avoid the material getting locked out for another minute or
more.

* Adds 2 new stock market events to help add additional variety to the
stock market's variability, while adjusting the probability of a market
event occurring per stock market event. This should average to ~4 events
every minute, keeping things somewhat interesting if you're watching the
prices of items, but without requiring second to second updates to keep
things engaging.
* These two events include one that blocks off all material quantity
from a material for the duration of the event and resets prices when
complete, and another one that maximizes the profitability of a
material, but leaves it's market quantity up in the air.

* Stock blocks have had their freeze timer decreased from 5 minutes,
down to 3, with the warning now at 1.5 minutes. This is to encourage
players not to sit on their resources for longer periods of time if
their goal is just to sell at a specific price point and to keep items
going through the shuttle, which _also_ encourages players to receive
mail/receive regular orders from the rest of the crew.

* The UI has a number of improvements, those being:
* The time until the next stock market update is listed on the UI as an
active timer.
* The materials listed in the UI are now sorted by the value of that
resource per unit.
* The instructions are now kept within a collapsible component to cut
down on wasted space within the UI.
* A few elements are moved over to % width as opposed to a hardset x
pixels width for screen size compatibility purposes.

![image](https://github.com/tgstation/tgstation/assets/41715314/b8c7b00a-947e-421b-aa18-2b77f0b9bb50)

## Why It's Good For The Game

Stock market has been known to create bike levels of wealth with near
negligible amounts of effort and was going to need a balance pass
eventually. This is being accomplished by slowing down the system, but
also making it more unpredictable by expanding on the stock market event
system a bit further. Naturally, it could use a few more wacky events to
keep the system fresh and active, but for now this helps to keep the
system from being a screen simulator while also making game-health
changes like lowering material quantities that were capable of allowing
the player to double, quadruple, octuple, etc. their wealth every few
minutes by just buying low and selling high.

Makes a few QOL changes to the UI to compensate for a few of these
changes, like the new update timer on the UI in the case we change the
time per update any further, as well as to give incentive to players to
not just camp the console for new updates, just to glance at how their
investments are doing.

These tweaks also keep cargo moving as opposed to just trying to power
game iron and glass for maximum returns, while giving them extra
opportunities to send the shuttle to keep packages flowing for other
purchases/getting mail.

This has a chance to stop #79978, but I'll edit this appropriately after
a TM has confirmed if it was effective or not.

## Changelog

🆑
balance: The stock market now fires slower, has stock market events
occur more often, and the stock market has fewer minerals that are
available to buy in a single purchase before restocking.
balance: Materials sold on the stock market may be protected from being
bought if their prices drop too low, so make sure you watch your prices
before they run the risk of getting shut out!
balance: Stock blocks now freeze the price of materials for 3 minutes,
down from 5.
qol: Tweaks to the Galactic Material Market UI, with materials sorted
based on their rarity and a timer to show how long until it updates.
add: New Stock market events, one locks a material from being purchased,
the other maximizes the value and quantity of a material for sale.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>

* Arcargo: Balance Pass v2 on the Stock Market

---------

Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
2024-03-06 22:28:43 -05:00
Waterpig
e8f9767a11 Merge remote-tracking branch 'Skyrat/upstream-merge-81373' into upstream-2024-3 2024-03-03 10:55:23 +01:00
SkyratBot
180442b8fb [MIRROR] Allow voting statistics to be hidden (#26668)
Allow voting statistics to be hidden (#81686)

Allows polls to hide the voting statistics, both while the poll is
running and when it completes, so that people vote in isolation of
knowing what other people are voting for.
It looks like this:

![image](https://github.com/tgstation/tgstation/assets/7483112/d17a1784-ecfa-4c7b-8cb2-88aef7f7dcdb)

![image](https://github.com/tgstation/tgstation/assets/7483112/c83db170-7338-48dd-8ab6-cfbc20414abe)

This functionality is also available for custom votes triggered by
admins, if they want it.

Put simply, if likely to be controversially, sometimes people get upset
that an event with a 5% chance of happening occurs 5% of the time. Now
they really won't know what the chance was, only that it was picked by a
weighted choice.

Lack of knowledge about what other people are currently voting for
should also curb "meme votes" where people pile onto something they see
other people voting for, your vote in a poll with hidden stats can only
be influenced by your own opinion because you can't see what the crowd
is doing in order to join their bandwagon.

🆑
add: Displaying the voting statistics is now optional on a per-poll
basis, and is disabled for map voting.
/🆑

Co-authored-by: Jacquerel <hnevard@gmail.com>
2024-03-01 01:13:11 +01:00
SkyratBot
34f67a1e57 [MIRROR] Adds a multi-dimensional bomb payload to the black market. (#26663)
* Adds a multi-dimensional bomb payload to the black market. (#81562)

## About The Pull Request
This PR adds a !!!FUN!!! bomb payload to the blackmarket, which, upon
detonation, transmutates all terrain in a range like the dimensional
anomaly would. You can also select the dimensional theme to use by using
it in your hand.

I believe however, this thing should cost a fuckton to get and only show
up occasionally. 8k to 10k was my original idea, but I think that's
perhaps not high enough given its flagrant potential. Perhaps I should
also make it so the more dangerous themes yield a shorter range than
others. Suggestions are welcome.

Screenshot of what happens when you don't set the theme:

![chaotic_mess](https://github.com/tgstation/tgstation/assets/42542238/e4c3264d-17e0-45b6-90c2-3c30a592ae2d)

This PR also turns dimension themes into singletons so we access them
more easily. Nothing to write home about.

## Why It's Good For The Game
The black market could always use some extra thingy or two anyway, and
this thing could either be a source of emergent gameplay, or a recipe
for a disaster. Perhaps second to the Big Slappy for how funny it could
be.

## Changelog

🆑
add: Added a multi-dimensional bomb payload to the black market. It's
very expensive.
/🆑

* Adds a multi-dimensional bomb payload to the black market.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-02-26 23:15:58 -05:00
SkyratBot
677afadade [MIRROR] General maintenance for all things boulder related. (#26557)
* 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>
2024-02-22 16:54:52 +01:00
SkyratBot
846a3566cc [MIRROR] Paintings update: Curators get a cut on patronage + zoom in/out buttons on UI (#26581)
* Paintings update: Curators get a cut on patronage + zoom in/out buttons on UI (#81500)

## About The Pull Request
(Roundstart) Curators now get a 22.5% cut on credits spent on painting
patronages (divided by the number of curators). The service department
also gets another, 12.5% cut.

This PR also adds zoom in/out buttons to the painting canvas UI. So you
don't have to stare at a blob of such enormous squares while the UI is
open, which is only good when drawing.

Screenshot copypaste in paint:

## Why It's Good For The Game
The painting feature is mostly an end in itself, which is totally fine.
I've put quite a few quality-of-life changes into it through the years,
and I still want to kick in some stuff. However, I think the curator
should actually benefit from them in a more "mechanical" way.
Furthermore, I personally prefer them over the random written crap that
players make.

Also, as I said above, the canvas UI can feel a tad too big at times.

* Paintings update: Curators get a cut on patronage + zoom in/out buttons on UI

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-02-21 19:52:28 +01:00
SkyratBot
5e47afb895 [MIRROR] Moves inter-round caches to cache/. Deletes tmp/ between rounds. Keeps tts from killing servers. (#26501)
* Moves inter-round caches to cache/. Deletes tmp/ between rounds. Keeps tts from killing servers. (#81433)

* Moves inter-round caches to cache/. Deletes tmp/ between rounds. Keeps tts from killing servers.

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2024-02-20 01:15:19 +01:00
SkyratBot
d1fdafa185 [MIRROR] Valentines Day Rework (Better Late Than Never) (#26567)
* Valentines Day Rework (Better Late Than Never) (#81499)

## About The Pull Request

Big changes:

- Participation is Valentines day requires consent, as consent is
important.
- When the event triggers, all valid players are automatically signed up
to get a random date. However if you're uninterested, you can opt out of
getting a date.
- This uses the same system as ghost role polling, so it's a
non-obstrusive screen alert + chat box entry.

- AIs are now given a zeroth law to protect their date.
   - This does not override existing zeroth laws (for malf ais).
- This zeroth is law is worded in a way such that they are not
effectively malf AIs. Their other laws still apply, but not for
situations pertaining to their date.

- Cyborgs are desynced from AIs and are given similar zeroth laws to
protect their date.

![image](https://github.com/tgstation/tgstation/assets/51863163/0d1cca3e-f483-484c-90a8-9bb5492e2c69)

Small changes:

- Valentines cards are now paper. Meaning you can write on them, stamp
them, or yes, burn them.

- Third wheeling is more codified than before. Third wheels get their
own antag datum type.

- The antag panel listing in roundend takes up significantly less room
for each date. Additionally, dates are now paired up with each other.

- Adds implementations for getting pronouns from mind datums.

![image](https://github.com/tgstation/tgstation/assets/51863163/2107e7d2-6197-4f64-9245-54037ca6c0ec)

## Why It's Good For The Game

It's 2024 and our Valentines day is sooo 2012.

I'm a big fan of Valentines Day, personally - it gives me the
opportunity to mess around with another player that I probably would not
otherwise mess around with, getting into shenanigans I would not
otherwise.

But as the years have gone by it's gotten pretty lackluster. Some people
like it as much as I do, but others ditch it entirely and ignore the
objectives.

And if you get paired with someone ignoring it, well, now you're out of
luck!

This is something I'm aiming to rectify by making it opt-in when it
triggers rather than forced. All the people participating will be
guaranteed to get someone who cares about the event as much, which makes
it more fun.

As for the silicon changes, there's been lots of confusion around
silicons and their dates, so I thought I'd fix it here as well.

Also, better late than never?

## Changelog

🆑 Melbert
add: Valentines Day now polls all players for candidates when it
triggers rather than forcing all players to be a Valentine. Consent is
important.
add: Valentine silicons now gain special laws pertaining to their date.
qol: Valentines Cards are now paper, so you can write on them, stamp
them, or burn them.
qol: Valentine's roundend report no longer takes up a massive amount of
space and also no longer sound so, so weird.
/🆑

* Valentines Day Rework (Better Late Than Never)

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-02-19 01:36:47 +01:00
SkyratBot
f1928357e3 [MIRROR] Fixes smoothing breaking if a map is loaded post init (#26553)
* Fixes smoothing breaking if a map is loaded post init (#81526)

## About The Pull Request

We'd finish a set of atom creation, then try and smooth those atoms The
problem is they might try and smooth with an uninitialized neighbor,
which wouldn't have its smoothing vars parsed.

This fixes that by pooling "to be smoothed" things into a list based off
the source of the init stoppage, which we then release when we're done.

Also fixes things staying in mapload, even during a sleep. This can
cause massive headaches so it's good to avoid.

This has a cost but it's minuscule (on the order of like 0.006s (6ms
over all of init), so I'm happy with it.

## Why It's Good For The Game

Closes #77040

## Changelog
🆑
fix: Maps loaded in after roundstart will no longer have broken
smoothing
/🆑

* Fixes smoothing breaking if a map is loaded post init

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2024-02-19 01:23:33 +01:00
SkyratBot
e8389a85b1 [MIRROR] Reduces chat/audio spam when multiple ghost polls are being called (#26503)
* Reduces chat/audio spam when multiple ghost polls are being called (#81441)

## About The Pull Request

This slightly modifies the polling subsystem. The sound/chat popup for a
new role is now only given on the first "stack" of a role signup.

Let's say 3 loneops roll at once (ty admins), you'll still get the toast
popup for 3x loneop rolls, but you'll only get one text highlight in the
chat, and only one audio stinger.

Even if the first 2 loneops don't have anyone sign up for it, using the
text or toast signup options will still sign you up for the last roll as
it completes. This shouldn't make signing up any harder, just quieter.
## Why It's Good For The Game

Less spam in chat. Less headset-blasting audio bleeps. Cool!

Closes #80998.
## Changelog
🆑 Rhials
fix: Ghost role polls should spam you less when multiple of the same
roll occur in succession.
/🆑

* Reduces chat/audio spam when multiple ghost polls are being called

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2024-02-15 17:40:32 -05:00
SkyratBot
5ec8d679f3 [MIRROR] Adds Subsystem Profile Focusing (#26514)
* Adds Subsystem Profile Focusing (#81461)

## About The Pull Request
adds a var to /subsystem that when toggled to true by an admin makes
/subsystem/ignite() start the profiler before calling fire() and then
stop the profiler after, this allows us to audit any individual
subsystems synchronous call chain.
## Why It's Good For The Game

![Screenshot_3275](https://github.com/tgstation/tgstation/assets/15794172/27d5e4b0-ab06-451f-b4b4-97d31fd06385)
when SSInput is focused

![Screenshot_3274](https://github.com/tgstation/tgstation/assets/15794172/55572861-3f71-4b6c-bb63-f1dfbbe2ab26)
when SSair is focused

some subsystems are hard to profile performance issues for because
theres a billion procs downstream of them in the profiler and some of
them arent even unique to them (if a subsystem is spending half of its
time in some procs downstream of /_SendSignal() how could you tell). now
we can just do it. starting (and stopping?) the profiler itself is
expensive and this messes with the full round profiler but this is worth
it.

also this doesnt help with sleeping procs / timers created downstream of
that subsystem.
## Changelog
🆑
admin: admins/maintainers can now make the profiler focus on specific
subsystems by setting the subsystem var profile_focused to TRUE
/🆑

* Adds Subsystem Profile Focusing

---------

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2024-02-15 17:38:48 -05:00
SkyratBot
df6cbe4b7a [MIRROR] Adds a Touchy quirk (#26462)
* Adds a Touchy quirk (#81387)

## About The Pull Request

Adds a new quirk for -2 points that requires you to be next to something
to examine them, like blindness but without the timer or actual
blindness itself.

## Why It's Good For The Game

For the player using the quirk, it's 2 points for losing the ability to
simply examine everything around you, making it harder to tell what
someone has in their hands when they are charging at you, for example.
You need to get up and close to things to see what they are.
For people being examined, it's just another possible excuse to be near
them, opening up plausible deniability for actions such as sleepy pens,
changeling stings, etc.

## Changelog

🆑 Atlasle, JohnFulpWillard
add: Adds the Touchy quirk, you need to be next to something to examine
it, for 2 extra quirk points.
/🆑

* Adds a Touchy quirk

* skyrat fix

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com>
2024-02-11 18:06:04 -05:00
SkyratBot
3576e75000 [MIRROR] [NO GBP] Fixes raw ectoplasmic anomaly refining (#26447)
* [NO GBP] Fixes raw ectoplasmic anomaly refining (#81377)

## About The Pull Request

This adds a proper cap for raw ectoplasmic cores, so they can actually
be refined now. Cool!
## Why It's Good For The Game

Broken thing need fix oops argh.

Closes #81369.
## Changelog
🆑 Rhials
fix: You can now refine ectoplasmic raw cores at the implosion machine
thing.
/🆑

* [NO GBP] Fixes raw ectoplasmic anomaly refining

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2024-02-10 23:16:56 -05:00
SkyratBot
b485162a04 [MIRROR] Station Goals are now handled by SSstation instead of a global list (#26313)
* Station Goals are now handled by SSstation instead of a global list (#81177)

## About The Pull Request

You can now get station goals in a slightly better way over using a
`locate() in` call on a global list.
The Meteor Satellite goal no longer stores a giant list of ALL OBJECTS
in view. And now correctly only counts turfs.
## Changelog
🆑
fix: Meteor Satellites no longer erroneously count every piece of paper
as a protected turf.
fix: As a result the station goal is slightly more difficult
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>

* Station Goals are now handled by SSstation instead of a global list

* Will it work? I do not know. But it compiles.

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-02-08 16:21:12 +01:00
SkyratBot
5fde8bd1ad [MIRROR] Makes point_types not be dumb (#26376)
* Makes point_types not be dumb (#81202)

## About The Pull Request

We currently have a list of point types that is meant to be
list(``DEFINE`` = name) but it's completely useless since the define is
just the name anyways. It's not used for anything, it has no purpose to
be this way. It seems more like a holdover from when there were multiple
types of research points (it was made for that purpose, even before
nanite points were a thing) but even for that, it serves no purpose.

I reworked it now to be the abbreviated name of the research point type,
de-hardcoding techwebs a little bit and removing the need for
downstreams to edit the techweb UI.

## Why It's Good For The Game

This at least looks better and makes more sense at people just looking
over it.

## Changelog

No player-facing changes.

* Makes point_types not be dumb

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2024-02-07 13:26:48 -05:00
SkyratBot
602ac52e9d [MIRROR] Fixes ore vents spawning without ores on icebox, sets up map specific ore configurations (#26375)
* 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>
2024-02-07 13:26:08 -05:00
SkyratBot
0ac1027456 [MIRROR] Gives paradox clone their own ghost polling icon (#26374)
* Gives paradox clone their own ghost polling icon (#81229)

## About The Pull Request

Currently all ghost roles, when polling for players, shows a syndicate
poster. This is lame as hell, especially since most of the roles aren't
even Syndicate aligned.
This adds support to have your own icons for it, and adds one for the
Paradox clone since I already had an idea for it.

## Why It's Good For The Game

Paradox clones are not syndicate aligned and it does not make sense to
portray that to players, this looks much better, and hopefully soon
other antags will follow suite.

![image](https://github.com/tgstation/tgstation/assets/53777086/b6016ff1-9914-42a8-bd9f-e72ba5539e11)

## Changelog

🆑
add: Paradox clones now have a bluespace stream instead of a syndicate
poster as their ghost poll icon.
/🆑

* Gives paradox clone their own ghost polling icon

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2024-02-07 13:25:37 -05:00
nevimer
4d8898fdef Merge remote-tracking branch 'skrat/master' into upstream-2024-02-03
# Conflicts:
#	_maps/map_files/IceBoxStation/IceBoxStation.dmm
#	_maps/map_files/KiloStation/KiloStation.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	_maps/skyrat/automapper/automapper_config.toml
#	code/controllers/subsystem/statpanel.dm
#	code/datums/chatmessage.dm
#	code/datums/quirks/negative_quirks/claustrophobia.dm
#	code/game/objects/items/tools/weldingtool.dm
#	code/modules/client/preferences/middleware/quirks.dm
#	code/modules/mob/living/carbon/carbon_defense.dm
#	code/modules/mob/living/carbon/human/human_defense.dm
#	code/modules/mob/living/carbon/human/inventory.dm
#	code/modules/mob/living/living_say.dm
#	code/modules/modular_computers/file_system/programs/jobmanagement.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/research/designs/mechfabricator_designs.dm
#	code/modules/research/machinery/_production.dm
#	code/modules/surgery/organs/internal/_internal_organ.dm
#	html/changelogs/archive/2024-01.yml
#	modular_skyrat/modules/automapper/code/area_spawn_entries.dm
#	modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm
#	modular_skyrat/modules/loadouts/loadout_items/loadout_datum_heads.dm
#	modular_skyrat/modules/loadouts/loadout_items/loadout_datum_suit.dm
#	modular_skyrat/modules/loadouts/loadout_items/under/loadout_datum_under.dm
#	modular_skyrat/modules/synths/code/bodyparts/power_cord.dm
#	tgstation.dme
#	tgui/packages/tgui/components/Dropdown.tsx
#	tgui/packages/tgui/components/Input.tsx
#	tgui/packages/tgui/interfaces/Fabrication/DesignBrowser.tsx
#	tgui/packages/tgui/interfaces/Jukebox.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/QuirksPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/data.ts
#	tgui/packages/tgui/interfaces/common/SearchBar.tsx
2024-02-03 21:08:40 -05:00
SkyratBot
bd9d2ca175 [MIRROR] Fixes Cult voting for a leader (#26312)
* Fixes Cult voting for a leader (#81169)

## About The Pull Request

With the recent changes to polling, it seems like it didn't properly
poll cultists, I fixed that and fixed other issues with it (such as it
telling players that they are signing up to BE a cult leader, when they
arent).

Also fixed the button to put yourself forward as cult leader, it
properly removes and gives itself when necessary.

## Why It's Good For The Game

Cult button works again how cool is that

Closes https://github.com/tgstation/tgstation/issues/80620

## Changelog

🆑
fix: Cultists can now vote for a Cult leader again.
/🆑

* Fixes Cult voting for a leader

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2024-01-31 21:49:45 +01:00
SkyratBot
43696efe83 [MIRROR] Removes overly optimistic warn on byond version (#26303)
* Removes overly optimistic warn on byond version (#81185)

## About The Pull Request

I assumed this would be fixed because I assumed it was a bug. My report
goes unresponded to.

* Removes overly optimistic warn on byond version

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2024-01-31 21:39:12 +01:00
Zenitheevee
69e572d370 [SEMI-MODULAR] Port Tarkon Fixes (#26271)
* Should.. be everything?

* forgot one thing.

* brain hurt shutup
2024-01-30 09:26:13 -06:00
Useroth
22bcdbf5f9 Nova ports batch 1 (#26273)
* Map votes are no longer random (#43)

* Disables the annoying fear of Santa from the claustrophobia quirk (#51)

* Removes the job locks from all armbands except the sec armbands, and reflavors all armbands to not directly state this person is a member of x department (#62)

* [MODULAR] Removes Arbitrary Loadout Restrictions (#58)

* Removes an AM template from NorthStar as well as the prison curtain logic (#72)

* Bilingual now let's you take common (if you don't already have it) (#78)

* Period Era Re-Enactment: Basic autopunctuation (#84)

* [Semi-modular] Gives Xeno-hybrids some xeno-organs in trade for high temperature weakness (#91)

* The Thrill of the Hunt: Hemophage blood digestion changes (#93)

* Removes the ability for shocks to stop your heart (#116)

* Ghost cafe turf fixes (#161)

* ungatekeeps headshots (#170)

* Lo(v)re Wins: Mothic Language return (#186)

* Add Bone Greaves As Foot Clothing For Tribals (#197)

* Saving Private Oversized: Quirk balancing adjustments (#199)

* Over(sized) and Under: Oversized combat adjustments (#202)

* Shuttles no longer bolt their doors on transit (#203)

* Increases PAI description and OOC notes limit (#207)

* Makes headset sounds not insane (WHY DO THEY HAVE A RANGE OF 17 TI:LES?) (#215)

* Add Bone D6 For Tribals. (#217)

---------

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Name <w4rd3nn@gmail.com>
Co-authored-by: Ephemeralis <Ephemeralis@users.noreply.github.com>
Co-authored-by: lila <sheepwiththemask@gmail.com>
Co-authored-by: nikothedude <59709059+nikothedude@users.noreply.github.com>
Co-authored-by: Sable <102194057+Thlumyn@users.noreply.github.com>
Co-authored-by: goobliner <141452834+goobliner@users.noreply.github.com>
Co-authored-by: Lutowski <136726218+Lutowski@users.noreply.github.com>
Co-authored-by: FearfulFurnishing <139661819+FearfulFurnishing@users.noreply.github.com>
Co-authored-by: SomeRandomOwl <2568378+SomeRandomOwl@users.noreply.github.com>
Co-authored-by: Paxilmaniac <82386923+Paxilmaniac@users.noreply.github.com>
2024-01-29 20:13:27 +00:00
SkyratBot
9fe2ef7c99 [MIRROR] Add: 2 Quirks Configs (#26206)
* Add: 2 Quirks Configs (#81033)

This PR adds two new config options for quirks:
- *Flag* `DISABLE_QUIRK_POINTS`
  - When enabled, disables quirk points balancing.
- When enabled, players can select positive quirks without first
selecting negative ones.
- When enabled, the quirk points balance visually hides itself on the
Quirks page.
- *Number* `MAX_POSITIVE_QUIRKS`
- Limits the maximum quantity of positive quirks which players can
select using the Character Preferences page.
  - I ported this from the old `MAX_QUIRKS` define.
- When set to `0`, players won't be able to select any positive quirks,
and they won't appear on the Quirks page.
- When set to `-1`, players will be able to select any quantity of
positive quirks.
  - When commented-out or undefined, the default is `6`.
- When set to `0` or `-1`, the positive quirk balance visually hides
itself on the Quirks page.

There is some downstream repositories asking for the quirks system to be
configurable. Additionally, I always find myself tweaking these values
on my own private servers and I thought it would be nice to share my
edits. Usually I was simply commenting-out sections of this code in
order to get the same result, so it helps to have an official way to
disable quirk points.

🆑 A.C.M.O.
config: Added two new config flags for quirks, DISABLE_QUIRK_POINTS and
MAX_POSITIVE_QUIRKS.
/🆑

* Oh come on

---------

Co-authored-by: Dani Glore <fantasticdragons@gmail.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-01-29 01:56:10 +01:00