Commit Graph

3389 Commits

Author SHA1 Message Date
Jordan Dominion
44f88e49be Quietens Spaceman when debugging UNIT_TESTS locally (#75570)
The contract is removed by virtue of testing.
2023-05-30 01:21:55 +00:00
Zephyr
c6205dd063 Adds a new front end for viewing logs | fixes the manifest log message too (#75617)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/12817816/13d5f3c7-c0cc-4930-8119-e6bde66a1f61)

![image](https://github.com/tgstation/tgstation/assets/12817816/034a17d8-c552-4c3a-8e5f-b210fc4231e5)

## Why It's Good For The Game

I promised I would add it; and while it's not as nice as my previous
iteration it is faster and more streamlined.
## Changelog
🆑
admin: new log viewer, try it out. (View Round Logs)
/🆑

Fixes #75605

---------

Co-authored-by: san7890 <the@san7890.com>
2023-05-29 17:56:15 -07:00
Kylerace
f4e844d664 fixes contents not being removed from the spatial grid when deleted during movement between 2 grid cells (#75658)
## About The Pull Request
fixes the flaky test reports for cockroaches being stuck in the spatial
grid (which mothblocks seems to have closed all of)

cockroaches get deleted when they die, so theres a spurious unit test
failure where if a cockroach is on a tile in grid cell A and moves to a
lava tile in grid cell B, they will get killed when lava.Entered() is
called, then deleted, and when /atom/movable/Destroy() is called we try
to take them out of grid cell B (because their loc is the lava tile) but
they were never added to that cell yet because their movement never
finished, so that doesnt do anything. THEN moveToNullspace() is called,
that movement finishes before the first movement, and then in
Moved(old_loc = lava turf) we try to remove it from grid cell B which
again doesnt work, and then the first movements Moved(old_loc = original
turf) is called where we can actually remove them from the correct grid
cell, except we cant because in exit_cell() we subtract
`old_target.important_recursive_contents[channel]` from the cells
content lists, and since the target is deleted by this point it doesnt
have important_recursive_contents. so the fix here is changing this so
it subtracts `old_target.important_recursive_contents?[type] ||
old_target` instead, which works if the target is deleted.

also fixes some Entered() overrides that dont call parent and improves
documentation on spatial grid defines
## Why It's Good For The Game
fixes it without needing the change_loc() setter
2023-05-29 18:23:43 -06:00
LemonInTheDark
b64a76ea56 Fixes moveloop shit (#75675)
## About The Pull Request

I was using the step_x procs when I should have been using get_step_x
and Move()
This was causing some mob behavior to not properly respect things like
gravity or potentially entered/exited signals.

Also ensures we pass direction into Move consistently, and deletes a
function that was meant to like, use step_to but with directions? Was
never actually used properly

I forgot to properly respect the "don't change dir" flag

Closes #75673

🆑
fix: Mobs will fly around space... less
/🆑
2023-05-27 15:33:28 -06:00
TiviPlus
9968f98479 Fix TTS volume offset not working (#75650)
## About The Pull Request
Lol

## Changelog
🆑
fix: fixed TTS volume changes not working
/🆑

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
2023-05-27 15:25:21 +01:00
LemonInTheDark
b304b6523f Converts del logging to proper json, using json objects instead of building a text file (#75636)
## About The Pull Request

It's easier to parse, and makes more sense when you read it. This way
I'll never have to add yet another case to my parser for someone
changing where a space goes or something.

Moves qdel into its own category cause the old name looked ugly (yell if
this is dumb)
Added a bitfield to entries pulled from categories, adds a new flag that
enables pretty printing json lists.


## Why It's Good For The Game

IMPROVES my workflow

## Changelog
🆑
server: del logging is now done by outputting to a json file again, but
this time we're using ACTUAL json and not just a big text string with
newlines and shit
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-05-26 12:40:18 -06:00
SyncIt21
cd4ed228f2 Fix out of bounds in lighting subsystem (#75018)
## About The Pull Request
Fixes #74697

Look at this for loop

bfba2c5934/code/controllers/subsystem/lighting.dm (L34-L39)

Now look at update corners

bfba2c5934/code/modules/lighting/lighting_source.dm (L428-L430)

Now look at refresh values. this proc has a chance to delete itself here

bfba2c5934/code/modules/lighting/lighting_source.dm (L315-L318)
And here

bfba2c5934/code/modules/lighting/lighting_source.dm (L331-L334)

Now look at the Destroy proc, specifically focus on the needs_update
condition

bfba2c5934/code/modules/lighting/lighting_source.dm (L66-L67)

We are removing the light from the subsystem source queue while the
subsystem is still iterating through them causing big problems for this
for loop

bfba2c5934/code/controllers/subsystem/lighting.dm (L33-L37)

which causes the out of bounds exception because loop variable `i` is
not updated accordingly when this list size is reduced mid iteration.

The solution? we have to move the loop variable `i` back whenever the
source is deleted i.e. removed from the list so we don't overflow

## Changelog

🆑
fix: out of bounds when updating lights in lighting subsystem
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-05-24 11:29:56 -07:00
Watermelon914
569d8f5a72 Refactored the TTS subsystem to more properly handle message garbling. Added a volume preference for TTS. (#75559)
TTS subsystem refactor.
---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2023-05-22 13:29:20 +00:00
Zephyr
fbec9c14e9 JSON Logging Take Two (#73604)
## About The Pull Request

Converts all logging, excluding perf and investigate, to json.
I focused on making the system as easy to use and as easy to add new
categories as possible.

Due to issues related to logging to world at global creation logger is
now a byond real, which is created directly before Master

Log categories support versioning, secret flagging, and sub-category
filtering. Although all of this is entirely optional for coders.
If you ever want to add a new category and use it, all you need to do is
make the barebones category datum and the define.
I've kept existing procs such as log_game, and simply turned them into a
wrapper for Logger.Log(xxx, ...)
## Why It's Good For The Game

Makes processing and filtering logs much easier in the future, while
only minimally downgrading log crawling experience.
I am also working on a log viewer frontend for admin usage however that
will take a little bit longer to finish up.
Also makes special logging and data tracking much easier thanks to a
data list processing implementation and handling
## Changelog
🆑
server: All logs are now formatted in json, excluding perf and
investigations
/🆑

---------

Signed-off-by: GitHub <noreply@github.com>
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-05-22 14:51:00 +12:00
Jordan Dominion
3df5d3b42b Removes +x from files that shouldn't have it (#75574)
Each of these is an extra operation TGS has to do when copying the repo.

Who is committing these?
2023-05-21 18:59:59 -07:00
Watermelon914
a98706ff8b Adds TTS to the game. Players can select their own voices in preferences. (#74775)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-05-15 16:21:54 -07:00
Mothblocks
d17a4dbccd Fix very common smoothing groups runtime by deferring icon smoothing until all atom initializations are complete (#75444)
## About The Pull Request
Fixes the "bad index" runtime that shows up on 80% of rounds.


![image](https://github.com/tgstation/tgstation/assets/35135081/8b8a7b6a-90b6-4c07-8e3b-47f31e4864c5)

The issue is that during dynamic maploading, the initialization of
objects is split over several ticks. However, before the initialization
is complete, an object's smoothing groups is still in its string form
(as per [the smoothing group
optimizations](https://github.com/tgstation/tgstation/pull/71989)).
Thus, code later down the line attempts to read from this string, and
errors.

It would be expensive to check all nearby neighbors every time in any
place in this code, so instead we defer icon smoothing if there are any
initializations currently in progress. Because this only happens for
dynamic loading, the stuff being loaded dynamically is usually small,
and icon smoothing already has a somewhat visible delay for shuttles,
this delay doesn't matter.

## Changelog


🆑
fix: Fixed an issue where objects on something that loaded dynamically,
like shuttles, would not be smoothed.
/🆑
2023-05-15 16:22:11 -06:00
Mothblocks
980f3adc70 ezdb - A one click script to quickly setting up a development database (#75053)
https://user-images.githubusercontent.com/35135081/235344815-8e825ba9-52cf-44e8-b8e2-a2aeb5d47276.mp4

- Downloads a portable MariaDB (doesn't pollute your main system)
- Sets up a database with a random password on port 1338 (configurable)
- Installs the initial schema
- Every time after, will run updates

Major versions right now explicitly escape hatch, because those
historically come with something like a Python script, and I do not want
it to pretend to work.

---------

Co-authored-by: san7890 <the@san7890.com>
2023-05-15 12:49:29 -06:00
Jordan Dominion
3110925361 Fix several SHOULD_NOT_SLEEP hits in SStgui.update_uis() (#75411)
There are several esoteric code paths that lead to `winexists` calls or
sleeps in `ui_data`. This proc is meant to be a command without
sleeping.

See #75232

![image](https://github.com/tgstation/tgstation/assets/8171642/8becd881-d7e8-4fe5-90af-2c2657934d07)
2023-05-14 15:33:08 -04:00
Comxy
30a425d99f Fix Basic Mob Speed (#75306)
## About The Pull Request
All basic mobs became slower because of #75186. This fixes that.
## Why It's Good For The Game
Intended speed.
## Changelog
🆑
fix: Fixes the speed of all basic mobs.
/🆑
2023-05-12 20:52:15 -06:00
larentoun
4dfebd58e9 fix: Basic mobs' multiplicative movespeed (#75186)
## About The Pull Request
Adds default multiplicative movespeed for basic mobs, so their speed is
configurable via config.

## Why It's Good For The Game
Closing things which were probably missed in the development of basic
mobs

## Changelog
🆑
code: Adds default multiplicative movespeed for basic mobs, to make them
editable in config
config: Default multiplicative movespeed for basic mobs in example
config
/🆑
2023-05-07 10:32:13 -07:00
Kylerace
c36d78b785 adds an error message to movables not being removed from the grid... again (#75161)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
## About The Pull Request
I swear i didnt fail at this like 3 times i tested it this time.

adds a descriptive error of what spatial grid cells a movable is stuck
in, and in what channels. This only runs during unit tests. hopefully
this should be enough information to go off of to fix the spurious
cockroach error. if its not then i can try tracking all grid cell
changes during unit tests.
error looks like this:
```
[2023-05-03 04:16:34.009] runtime error: /mob/living/trolls_the_maintainer instance, which is in nullspace, and thus not be within the contents of any spatial grid cell, was in the contents of 2 spatial grid cells when it was only supposed to be in one! within the contents of the following cells: {(221, 119, 11), within channels: hearing}, {coords: (136, 136, 14), within channels: hearing}. (code/controllers/subsystem/spatial_gridmap.dm:581)
```
for something located in nullspace but still in the contents of >0 cells
and:
```
runtime error: /mob/living/trolls_the_maintainer instance, which is supposed to only be in the contents of a spatial grid cell at coords: (136, 136, 14), was in the contents of 6 spatial grid cells when it was only supposed to be in one! within the contents of the following cells: {(68, 153, 2), within channels: hearing}, {coords: (221, 170, 3), within channels: hearing}, {coords: (255, 153, 11), within channels: hearing}, {coords: (170, 238, 13), within channels: hearing}, {coords: (204, 119, 14), within channels: hearing}, {coords: (136, 136, 14), within channels: hearing}. 
```
if its not in nullspace but its within more than 1 grid cell. 

the coordinates here are translated from the index of the given cell to
world coordinates.
## Why It's Good For The Game
mothblocks has been standing outside my house for weeks i am fearing for
my life

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-05-06 01:47:11 -07:00
John Willard
1674f25725 New Medical job: The Coroner (#75065)
## About The Pull Request

HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view

Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972

Adds a Coroner job to the game, they work in the Medical department and
have their office in the Morgue.
I was inspired to make this after I had played my first round on
Paradise and messed around in there. The analyzer is copied from there
(https://github.com/ParadiseSS13/Paradise/pull/20957), and their
jumpsuit is also mostly stolen from it (i just copied the color scheme
onto our own suits).

Coroners can perform autopsies on people to see their stats, like this

![image](https://user-images.githubusercontent.com/53777086/235369225-805d482c-56c0-441c-9ef8-a42d0a0192bc.png)

They have access to Medbay, and on lowpop will get Pharmacy (to make
their own formaldehyde). They also have their own Secure Morgue access
for their office (doubles as a surgery room because they are edgelords
or whatever) and the secure morgue trays.

Secure Morgue trays spawn with their beepers off and is only accessible
by them, the CMO, and HoS. It's used to morgue Antagonists. Security's
own morgue trays have been removed.

The job in action


https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4

### Surgery changes

Autopsies are a Surgery, and I tried to intertwine this with the
Dissection surgery.
Dissections and Autopsies both require the Autopsy scanner to perform
them, however you can only perform one on any given body. Dissections
are for experiments, Autopsies is for the paper of information.

Dissected bodies now also give a ~20% surgery speed boost, this was
added at the request of Fikou as a way to encourage Doctors to let the
Coroner do their job before reviving a body.
I also remember the Medical skill, which allowed Doctors to do surgery
faster on people, and I hope that this can do something like that
WITHOUT adding the potential for exploiting, which led to the skill's
downfall.

### Morgue Improvements

Morgue trays are no longer named with pens, they instead will steal the
name of the last bodybag to be put in them.

Morgue trays are also removed from Brig Medical areas and Robotics, now
they have to bring their corpses to the Morgue where the Coroner can
keep track and ensure records are properly updated.

### Sprite credits

I can't fit it all in the Changelog, so this is who made what

McRamon
- Autopsy scanner

Tattax 
- Table clock sprites and in-hands

CoiledLamb
- Coroner jumpsuits & labcoats (inhand, on sprite, and their respective
alternatives)
- Coroner gloves
- CoronerDrobe (the vending machine)

## Why It's Good For The Game

This is mostly explained in the hackmd, but the goal of this is:

1. Increase the use of the Medical Records console.
2. Add a new and interesting way for Detectives to uncover mysteries.
3. Add a more RP-flavored role in Medical that still has mechanics tied
behind it.

## Changelog

🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb
add: The Coroner, a new Medical role revolving around dead corpses and
autopsies.
add: The Coroner's Autopsy Scanner, used for discovering the cause for
someone's death, listing their wounds, the causes of them, their
reagents, and diseases (including stealth ones!)
qol: Morgue Trays are now named after the bodybags inside of them.
balance: The morgue now has 'Secure' morgue trays which by default don't
beep.
balance: Security Medical area and Robotics no longer have their own
morgue trays.
balance: Dissected bodies now have faster surgery speed. Autopsies also
count as dissections, however they're mutually exclusive.
/🆑

---------

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2023-05-05 21:31:28 -04:00
san7890
912e843f53 Allows Export of your Preferences JSON File (#75014)
## About The Pull Request

Hey there,

This was spoken about in #70492 (specifically
https://github.com/tgstation/tgstation/pull/70492#issuecomment-1278069607),
and I have been waiting for this to be implemented for some time. It
never got implemented, so I decided to code it myself.

Basically, **if the server host doesn't disable it**, you are free to
export your JSONs as a player, right from the stat-panel. It's a pretty
JSON on 515 versions, too!

It's right here:


![image](https://user-images.githubusercontent.com/34697715/235251447-1c977718-51fd-4025-8d89-c60bffc379ec.png)

Here's what the prettified JSON looks like on 515.


![image](https://user-images.githubusercontent.com/34697715/235321061-4a217e26-c082-4bba-b54a-2c780defda0a.png)

There's a cooldown (default to 10 seconds) between exporting your
preferences.

#### Why is this config?

It's because in the past, a server host could always just file-share the
.sav or .json or whatever to the player, but they would have to do the
explicit option of actually bothering to make the files accessible to
the player. In that same line of logic, the server operator will have to
explicitly make the files accessible. This is mostly because I'm not
sure how good `ftp()` is at being a player function and wanted to have
some sort of cap/control somehow in case an exploit vector is detected
or it's just plain spammed by bots, so we'll just leave it up to the
direct providers of this data to elect if they wish to provide the data
or not.
## Why It's Good For The Game

Players don't have to log into Server A to remember what hairstyle they
loved using when they want to swap to Server B! That's amazing actually.
I always forget what ponytail my character has, and it'll be nice to
have the hairstyle in a readily accessible place (after I prettify the
JSON for myself).

It's also more convenient for server hosts to make player data like this
accessible if they really want to, too.

If we ever add an _import_ feature in the future (which would have to be
done with a LOT of care), this will also be useful. I wouldn't advise it
though having taken a precursory look at how much goes into it while
trying to ascertain the scope of this PR.
## Changelog
🆑
qol: The game now supports export of your preferences into a JSON file!
The verb (export-preferences) should now be available in the OOC tab of
your stat-panel if enabled by server operators.
server: Exporting player preferences is controlled by a configuration
option, 'FORBID_PREFERENCES_EXPORT'. If you do not wish to let clients
access the ftp() function to their own preferences file (probably for
bandwidth reasons?) you should uncomment this or add it to your config
somehow.
config: Server operators are also able to set the cooldown between
requests to download the JSON Preferences file via the
'SECONDS_COOLDOWN_FOR_PREFERENCES_EXPORT' config option.
/🆑
2023-05-02 08:22:44 -07:00
Thunder12345
88bb3a1002 Very late arrivals can arrive with toast (#75061)
## About The Pull Request


https://user-images.githubusercontent.com/5479091/235362295-89b9e21b-abe0-4fb6-b404-a7e02b04dfe6.mp4

Late joiners who arrive after the emergency shuttle has already passed
no return have a 20% chance of having toast (If the mask slot isn't
already full (I think this is just detectives))

## Why It's Good For The Game

It's a funny anime reference.

## Changelog
🆑
add: Crewmembers arriving very late will not always have time to finish
their breakfast.
/🆑
2023-05-01 15:29:55 -04:00
Jordan Dominion
a20baac88e RUNLEVEL_INIT does not exist (#75023)
This define shouldn't have been added (by me when I created runlevels)
people get it confused with RUNLEVEL_LOBBY and misuse it, like in this
verb subsystem I have no knowledge of.

- Removes RUNLEVEL_INIT.
- Fixed SSverb_manager not running during the lobby phase.
- Fixed Master.SetRunLevel having the potential to accept a scuffed
runlevel.
- Other standardizing cleanups to runlevels usage.
2023-04-30 14:54:40 -07:00
Fikou
f1a787e167 social anxiety is incompatible with mute (#74951)
## About The Pull Request
quirk called social anxiety is no longer compatible with mute as mute is
a more severe option of that quirk

## Why It's Good For The Game
free points are bad

## Changelog
🆑
fix: social anxiety is incompatible with mute
/🆑
2023-04-26 07:48:38 -04:00
Rhials
40873e0a98 Non-random events now provide a cause in their deadchat broadcast (#74904)
## About The Pull Request

Most calls of runEvent() now provide a cause that is read out to
deadchat. announce_deadchat() has been slightly adjusted to accommodate
this.

Previously, everything that wasn't a truly random event would broadcast
with the same generic "XYZ has just been triggered!" message. Now, you
get a little bit more detail as to why/what triggered the event.

Some helpers in the __HELPERS/events.dm file have been made, for forcing
events normally/async/after a delay (using an addtimer). This also moves
a lot (but not all) instances of events being forced to these helpers.

Some samples:


![image](https://user-images.githubusercontent.com/28870487/233735108-aea2996b-aff4-45e2-ae0c-3e07f86de9b7.png)
Traitors using uplink viruses to turn off the power/comms.


![image](https://user-images.githubusercontent.com/28870487/233734371-18a31dff-198e-4a4a-a43f-15be6cbb545e.png)
Beer nuke!


![image](https://user-images.githubusercontent.com/28870487/233731635-7c93c1ef-641d-40df-975e-a916af4d1129.png)
For when a traitor takes an Space Dragon final objective, which summons
a carp migration event.


![image](https://user-images.githubusercontent.com/28870487/233727323-e2cfc46f-909f-4754-a0f9-a2763360a376.png)
Wizard ritual events!


![image](https://user-images.githubusercontent.com/28870487/233733025-5c8284bc-02e1-41c8-aae4-76a5c2124d97.png)
Even this one!

This also changes runEvent() to run_event(), because I figured I'd be
touching every single instance of the proc anyways.

## Why It's Good For The Game

Better feedback, less confusion amongst deadchat's constituents. 

Some of them may be a bit self-explanatory, but in some cases
(especially the apocalypse rune) it's beneficial to know that an admin
isn't the one behind it.

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

## Changelog

🆑 Rhials
qol: Deadchat now gets more juicy details on what has triggered a
non-randomly occurring random event.
code: There are now helpers for forcing events in a variety of ways.
More events! More events!!!!!!!
/🆑
2023-04-24 18:45:41 -06:00
Jordan Dominion
3ceee2aab4 World Initialization Refactor (#74808)
- Removes unnecessary real global vars.
- Adds comments pointing to the init order defined in
/code/game/world.dm.
- Prevent people using `GLOBAL_REAL_VAR` and `GLOBAL_REAL` to circumvent
init order.
- Properly type `PROFILE_STORE` real global.
- Refactored `make_datum_references_lists()` and moved the call to it
into `GLOB` init with duct tape.
- Renamed `GLOB.admin_log` to `GLOB.admin_activities` as it wasn't
actually a log file.
- Whitelist loading happens in config.
- Renamed `SSdbcore`'s `SetRoundID()` to `InitializeRound()`. Now
handles calling `CheckSchemaVersion()`.
- Created macro for setting up log `GLOB`s.
- Removed log line for `GLOB` count.
- Moved call to `make_datum_reference_lists()` to
`/datum/controller/global_vars/Initialize()`. I slimmed it down where
possible too.
- Updated comments about world init order.
- Move `load_admins()` call to after log setup.
- Removes unused function `gib_stack_trace()`.
- Removes a bunch of unused log `GLOB`s.
- Unlocks the secrets of the universe by finally making the first
executed line of code deterministic.

No functional changes. Closes #74792
Testmerge thoroughly.

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-04-24 18:38:38 -06:00
san7890
b3f5dfae14 Config Flag to Save Generated Spritesheets to Logs (#74884)
## About The Pull Request

I was helping someone debug some weird bug with spritesheets a bit ago,
and I didn't like having to manually comment out all of the `fdel()`
stuff in order to help visualize what the potential issue might have
been with the spritesheets on either their DM-side generation or their
TGUI-level display. I decided to add a compile-time level flag that will
automatically copy over any generated spritesheet assets (css and pngs)
to the round-specific `data/logs` folder for analysis when a developer
should need it.

I also had to switch around some vars and make a few new ones to reduce
how copy-pasta it might get and ensure standardization/readability while
also being 0.001 times faster since we benefit from the string cache
(unprovable fact).
## Why It's Good For The Game

It's incredibly useful to see the actual flattened spritesheet itself
sometimes when you're doing this type of work and you keep getting odd
bugs here and there. Also saves headache from having to clear out the
temp `/data/spritesheets` folder every time you comment shit out, as
well as having an effective paper trail for A/B testing whatever
bullshit you've got going on.


![image](https://user-images.githubusercontent.com/34697715/233516033-1f5dde1a-e549-4e5a-aa99-0d531b34fbb5.png)
## Changelog
Doesn't affect players.
2023-04-23 23:05:56 -07:00
ChungusGamer666
b093b12e03 Burning and acid components fixes and improvements (#74803)
## About The Pull Request

Generally cleans up code on both components.
Moves burn proc back to /obj level, I'm not sure why I moved it to /atom
level, it was unnecessary.
Acid component generalized so it can be used on any atom that uses
atom_integrity.
Fixes a bug where objects that stopped burning didn't update their burn
overlay properly due to bad removal logic and leftover code.
Standardizes examine messages on burning items by just slapping an
examine signal registration on the component.
Adds fire particles to items thanks to Lemon's PR:
https://github.com/tgstation/tgstation/pull/74524

## Why It's Good For The Game

Particles look cool

![image](https://user-images.githubusercontent.com/82850673/232605615-6e3bc804-bc68-4f09-8615-5e5946acbc10.png)

![image](https://user-images.githubusercontent.com/82850673/232664951-e0474331-495f-4717-8b0f-a647aedc4d9f.png)

Bugfixes are good
Code improvements are good

## Changelog

🆑
add: Burning items now get (small) smoke particles. Sick.
fix: Burning objects now clear their burning overlay properly.
qol: Examining burning objects will always tell you that they are
burning.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-23 17:50:58 -06:00
BlueMemesauce
20602ce519 Makes ruin budget proportional to amount of space ruin z-levels (#74841)
## About The Pull Request
Adds global define for DEFAULT_SPACE_RUIN_LEVELS and
DEFAULT_SPACE_EMPTY_LEVELS

### Proportional budget
Adds proportional budget to setup_ruins
The budget is multiplied by the current amount of ruin levels over the
default amount
Smaller amounts will have less ruins, while bigger maps will have more
ruins
Should maintain the same amount of ruins per z-level


### Z-levels spawning fix
Z-levels didn't seem to spawn their intended amount of ruins
This was because the for loop added the count variable before doing the
spawning. So for example if there was only 1 level, it would count to 1
and end the loop without spawning the level.
Also removed a loop that seemed to just make the process more complex
for no reason. It even had a note to remove it. However, if it has a use
then you should tell me.

## Why It's Good For The Game

Maps with a smaller amount of ruin levels won't be completely filled
The amount of ruins will be consistent per z-level
The creator of North Star won't allow space exploration unless there's a
way to proportionally reduce the space budget see #74719
## Changelog
🆑
fix: Maps now spawn the correct amount of space levels. The bug caused
them to spawn 1 less in each category
code: The space ruins budget is now proportional to the amount of ruin
levels. This has no effect on the current default maps, but added maps
with less than the default amount of ruin levels will see less ruins.
/🆑
2023-04-23 17:20:52 -06:00
san7890
43473a4dac Turns Deer into Basic Mob - They Freeze At The Sight of Vehicles (#74784)
## About The Pull Request

deers only show up in the BEPIS but i decided that they would be easy
enough to turn into a basic mob (they were). it was so easy in fact that
i decided to dip my toes into coding AI behavior, and made them freeze
up whenever they see a vehicle. this required a lot of code in a bunch
of places that i was quite unfamiliar with before starting this project,
so do let me know if i glonked up anywhere and i can work on smoothing
it out.
## Why It's Good For The Game

one less simple animal on the list. deers staring at headlights is
pretty cool i think, neato interaction for when you do get them beyond
the joke the bepis makes

i'm also amenable to dropping the whole "deer in headlights" code if you
don't like that for w/e reason- just wanted to make them basic at the
very least
## Changelog
🆑
add: If you ever happen upon a wild deer, try not to ride your fancy
vehicles too close to it as it'll freeze up like a... you know where I'm
going with this.
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-04-23 11:31:03 -04:00
Kyle Spier-Swenson
6991e0c103 Make sslibrary init faster by loading bookcases asynchronously in parallel (#74835)
On terry this takes 17 to 20 seconds to init (3 seconds on servers local
to the db like sybil), during which world.cpu is 4%. This is because it
waits for each bookcase to do its random books sql query before
initializing the next bookcase.

callback_select is a system to invoke a list of callbacks asynchronous
but only return once they are all finished running, Easymode pipelining
of network requests.

There is also the query side query_select that would more directly do
what we want, but the query is too detached from the loop to do it that
way.

There is also the fact that we could make this not do a query
per-bookcase, but that just makes the code more abstract for a benefit
we can get by just doing some basic pipelining of network requests using
a single proc i wrote 6 years ago
2023-04-21 13:06:28 -06:00
tattle
77aebb4c29 Audio File Cleanup (#74863)
## About The Pull Request
Removes a bunch of sound files that we don't use and moves some sound
files into better locations. I'm hoping to get an archive repo for
sounds going, much like the
[map_depot](https://github.com/tgstation/map_depot) and
[SS13-sprites](https://github.com/tgstation/SS13-sprites).

EDIT: The old sound files are being moved here:
https://github.com/tgstation/SS13-sounds

Also increased the volume of the clownana rustle sound and clipped off
some dead air from shockwave_explosion

## Why It's Good For The Game
Removes a total of 1.95MB worth of unused sound files from the codebase.

## Changelog
🆑 Tattle
soundadd: increased the volume of the clownana rustle
/🆑

---------

Co-authored-by: tattle <article.disaster@gmail.com>
2023-04-20 17:22:08 -06:00
Kyle Spier-Swenson
200b739c0a Refactors and defuckulates dbcore. Adds support for min_threads rustg setting, Reduce query delay, Make unit tests faster (#74852)
dbcore was very fuckulated.

It had 3 lists of queries, but they all had their own current_run style
list to support mc_tick_check (as it was already being done before with
the undeleted query check, so i can understand why they ~~cargo culted~~
mirrored the behavior) This was silly and confusing and unneeded given
two of those loops can only process at most 25 items at a time on
default config, plus these were cheap operations (ask rustg to start
thread, ask rustg to check on thread).

Because of the confusingness of the 6 lists for 3 query states, The code
to run pending/queued queries immediately during world shutdown was
instead looking at the current_run list for active queries, **meaning
those queries got ran twice.**

The queued query system only checked the current active query count in
fire(), meaning even when there was nothing going on in this subsystem
new queries had to wait for the next fire() to run (10 ticks, so 500ms
on default config)

Those have all been fixed.

the config `BSQL_THREAD_LIMIT` has been renamed to
`POOLING_MAX_SQL_CONNECTIONS` and its default was lowered to match
MAX_CONCURRENT_QUERIES .

added a new config `POOLING_MIN_SQL_CONNECTIONS`, allowing you to
pre-allocate a reserve of sql threads.

The queue processing part of SSdbcore's fire() has been made to not obey
mc_tick_check for clarity and to make the following change easier to do:

If there is less than `MAX_CONCURRENT_QUERIES` in the active queue, new
queries activate immediately.

(its ok that there are two configs that kinda do the same thing,
POOLING_MAX_SQL_CONNECTIONS maps to max-threads in the mysql crate, and
it seems to only be a suggestion, meanwhile MAX_CONCURRENT_QUERIES can't
do anything during init, which is when the highest amount of concurrent
queries tend to happen.)

🆑
config: database configs have been updated for better control over the
connection pool
server: BSQL_THREAD_LIMIT has been renamed to
POOLING_MAX_SQL_CONNECTIONS, old configs will whine but still work.
fix: fixed rare race condition that could lead to a sql query being ran
twice during world shutdown.
/🆑

I have not tested this pr.
2023-04-20 17:09:32 -06:00
Zonespace
fa644f7aee Fixes eigen lockers bypassing TP protection (#74722)
## About The Pull Request
Fixes eigenlockers bypassing teleport protections.


![image](https://user-images.githubusercontent.com/41448081/231939450-42287185-48f4-4a3b-ac7a-38adc0600633.png)

Tested w/ one and multiple lockers, prevents entering or exiting from a
tp-prot eigenlocker

## Why It's Good For The Game
This came up in an away mission designed to be a "one-way-trip", the
only exit being at the very end of the away mission. However, people are
able to bypass this with eigenlockers, thanks to them performing no
teleportation checks, which I believe is an oversight.

## Changelog
🆑
fix: Eigenstasium lockers no longer bypass teleport protection
/🆑

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-04-16 16:03:19 -06:00
Bloop
ac5236a251 Refactors sheet crafting to better support directional construction (#74572)
## About The Pull Request


0426f7ddba/code/game/objects/items/stacks/stack.dm (L449)

Ok, but can we not?

This PR refactors sheet crafting to generalize all the cases that were
previously locked behind grille/window type checks and such. In their
stead there are bitflags that can be set to achieve certain behaviors.

All the behavior from before should be preserved, but now it can be
extended to other items. E.g. if you want a railing that can be crafted
underneath directional windows, or an item that behaves like a grille
does--it's just a matter of setting the right obj_flags for it now.

This makes it very simple and painless to add new recipes that use
directional crafting! It's all modular now.

<details><summary>Details</summary>

---

### What I've done:

-Eliminated all the type checks, instead it will now be handled by
object flags and recipe vars, making for a much more configurable
system.

-Added two new obj_flags: `BLOCKS_CONSTRUCTION_DIR` and
`IGNORE_DENSITY`.
-Additionally, I renamed the existing flag `NO_BUILD` to
`BLOCKS_CONSTRUCTION`.

-Changes the proc `valid_window_location` to `valid_build_direction`,
and makes it work for things other than windows.

-Removed a deprecated `window_checks` var from the stack_recipe datum.
-Added three more vars to the stack_recipe datum: `check_direction` and
`check_density`, `is_fulltile`

-Decoupled `on_solid_ground` from the object density check. Now you can
set those separately, allowing you to make recipes that forbid/allow
building things over other things while in space.

---

### What the new flags do:

`BLOCKS_CONSTRUCTION` works as before---prevents objects from being
built on the object. I felt that the previous name was not descriptive
enough, you should know exactly what it does just from looking at the
name.
_example: dna scanner_

`BLOCKS_CONSTRUCTION_DIR` -- setting this on an object will prevent
objects from being built on it when their directions are the same.
_example: directional windows, windoors, railings_

`IGNORE_DENSITY` -- setting this on an object will cause its density to
be ignored when performing the construction density check. This could
have other potential uses as well in the future.
_example: grilles, directional windows, tables_

These three flags cover all the bases for the types of items that are
currently craftable, so there is no more need for any type checking or
weird snowflake window checks. Simply set the appropriate flag and it'll
work as you would expect.

---


### What the recipe vars do:
`check_direction` tells the recipe to check if there's something in that
direction with the `BLOCKS_CONSTRUCTION_DIR` flag set.

`check_density` tells the recipe to run the density check when set. This
is true by default. There are very few items in the game that currently
have this set to false--namely grilles. Setting this to false will make
it so that the object can be constructed regardless of what is in that
tile (unless `one_per_turf` is also set, which will make it so that you
can't craft the same thing twice in the same turf).

`is_fulltile` is used for fulltile windows, but it doesn't necessarily
have to be--you can give this to any recipe and it will adopt the same
properties as that of the fulltile window. Basically they have a special
case where they shouldn't be able to be built over directional
constructions, where normally things would be able to be. Setting this
makes check_direction true as well.

---

### In summary: 

Sheet crafting still works just as it did before. But the backend of it
has gotten a glow up and will be able to more easily support new
behaviors.

</details>

## Why It's Good For The Game

This makes the crafting system much more flexible to add recipes to, and
will prevent bad code practices of stacking more conditionals down the
line whenever someone wants to add an item that behaves like grilles or
directional windows in how they are constructed.

It had to be done. Those window checks were a mess.

## Changelog

🆑
qol: added fifty stack versions of remaining glass sheet stacks for ease
of debugging
refactor: refactored sheet crafting to better support directional
constructions that aren't windows
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-15 21:48:34 -06:00
san7890
25ace828e9 Fixes typo in FIRE_PRIORITY defines (#74694)
IT'S `PRIORITY` NOT `PRIOTITY` WHAT THE FUCK IS A `PRIOTITY`.

FYI nothing was broken since both the subsystem and the define had the
same name so there wasn't any bullshittery going on there - just a bit
of silliness that I noticed.
2023-04-14 20:59:16 +02:00
lessthanthree
8c056a46d4 Station shift start time config (#74711)
## About The Pull Request

We have a config flag to set random shift start times or server sync'd
start times, but not one to simply set the shift start time.

## Why It's Good For The Game

Control over the shift start time. This way events such as breakfast can
occur during actual breakfast hours.

## Changelog

🆑 LT3
config: Station shift start time can now be set in the server config
/🆑

---------

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2023-04-14 12:38:09 -06:00
ChungusGamer666
a0e368930f Reworks burning objects to be a component (#74688)
## About The Pull Request

Title.

## Why It's Good For The Game

Simply put, allows for atoms which are not /obj but use atom_integrity
to burn up too, which is nice and good.
But also, it allows for neat behavior like burning particle effects
(only structures use that right now to spawn smoke)

![image](https://user-images.githubusercontent.com/82850673/231595051-2a8d0574-33cc-4cd9-9d61-65566decf4ef.png)

## Changelog

🆑
add: Burning structures spawn smoke particles. Sick.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-04-13 22:19:25 -06:00
lessthanthree
f5e92812b2 Fixes forcing night shift on/off (#74657)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/74587
When nightshift is forced on/off by an admin the subsystem is in an idle
state, so the tick check always fails and the lights don't change.

## Changelog

🆑 LT3
fix: Fixed forcing night shift lighting on/off
/🆑
2023-04-13 21:57:14 -06:00
oranges
4c48966ff8 Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is
not completely accurate, as subsystems can be delayed, however it's
useful to have this number as a multiplier or ratio, so that if in
future someone changes the subsystem wait time code correctly adjusts
how fast it applies effects

regexes used

git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i
's/DT_PROB/SPT_PROB/g'
git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i
's/delta_time/seconds_per_tick/g'
2023-04-11 21:31:07 -07:00
Zephyr
7fd64dcf3d Auxtools is now a config opt-in (#74501)
See https://github.com/tgstation/tgstation/pull/74497

Causes auxtools to not be a default part of the server environment and
requires server operators to manually enable it.

---------

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-04-05 15:36:26 -07:00
Tom
f4b5736283 Updates paper biscuits and the paper cutter (#74473)
## About The Pull Request

Well this started as a PR updating some of the spelling and grammar on
the biscuits... though spilled out a little into other aspects of the
relevant code.
There are a few things I've done here.

**Paper biscuits:**

- Updated spelling and grammar for paper biscuits. Confidental ->
confidential, that sort of thing.
- A little reorganisation and cleanup of the code itself. 
- Preset slips are now generated on init on the parent from a var,
rather than each having its own init proc.
- Early returns, clearer vars, etc


**Paper Cutters**
Ended up doing more here, even though it wasn't the original reason I
started looking at this code.

- Added one (1) paper cutter blade to the paper cutters cargo crate.
Raised the price a little. This is just a reskinned hatchet, so I don't
think it's much of a balance concern.
- Clarifies and docs vars
- Cleans up refs on destroy
- Many `to_chat`s to `balloon_alert`s
- Removed single-letter vars
- Cancelled attack chains when trying to actually use the cutter. You
now pick it up either by having the blade secured and no paper inside,
or by dragging it into your hand.

## Changelog
🆑
spellcheck: Paper biscuits now have more proper spelling and grammar
qol: You now get one spare paper cutter blade in the paper cutter cargo
crate.
tweak: You now use right click to cut paper with a paper cutter
fix: You can now remove paper from a paper cutter if you change your
mind.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-04-04 01:50:41 +00:00
Mothblocks
b6af63179d Optimize /atom/movable/Initialize with faster check for blocks_emissive [140ms on init] (#74453)
Quoting the comment:

This one is incredible.
`if (x) else { /* code */ }` is surprisingly fast, and it's faster than
a switch, which is seemingly not a jump table.
From what I can tell, a switch case checks every single branch
individually, although sane, is slow in a hot proc like this.
So, we make the most common `blocks_emissive` value,
EMISSIVE_BLOCK_GENERIC, 0, getting to the fast else branch quickly.
If it fails, then we can check over every value it can be (here,
EMISSIVE_BLOCK_UNIQUE is the only one that matters).
This saves several hundred milliseconds of init time.
2023-04-02 22:43:34 -06:00
tralezab
b0a44b0d77 Removes emergency meetings (#74437)
## About The Pull Request

Removes emergency meetings. Uh, let me know if I missed anything

## Why It's Good For The Game

We gotta come up with NEW ways to ruin the round each year, this one's
so old and busted

## Changelog
🆑
del: Votes out some sussy emergency meeting code
/🆑
2023-04-01 11:59:39 -07:00
DrTuxedo
bf37597c24 "Biscuit" cards, and also now slip papers are actually paper! (#74329)
## About The Pull Request
**This is not a literal biscuit which you eat. "Biscuit" is just a
nickname of this kind of snap-cards.**
Slip paper is now actually paper, before that, it was just literally
nothing, an object which does nothing. Because of that, the paper cutter
was useless as well, as it turned normal paper into useless paper slips.
Because of this now paper cutters are placed at:

- Bridge
- HoP office
- Warden office
- Cargo

Also adds biscuit cards. If you have no idea what it is, it's a kind of
card placed around a piece of paper usually to conceal some document and
it can be opened by cracking it with a crunchy sound (that's why it's
named a biscuit). Those are usually only opened in certain situations or
emergencies (The most famous example is the US president's nuclear
biscuit, which contains nuclear codes)

There are 2 biscuits: Normal and Confidential.
Normal is a plain biscuit with nothing really special, can be coloured
if you want as it's white.

![image](https://user-images.githubusercontent.com/42353186/229195802-4ac5ad96-6083-47dc-9ccd-13d132f690bf.png)

The confidential biscuit is blue and has "NT" on it.

![image](https://user-images.githubusercontent.com/42353186/229195753-207d64f1-1f17-418e-a01a-8bfa2c4abc51.png)

There is a not-sealed biscuit you can print in autolathe, it starts open
so you can put paper in and seal later making it a normal crackable one.

Now spare ID safe code automatically spawns in a confidential biscuit in
a new paper slip subtype - corporate slip paper. It's a plastic card
which is sturdier than the normal paper clip.

![image](https://user-images.githubusercontent.com/42353186/229195696-07075f78-c736-43a9-bd14-5cf9ca36ddc9.png)

You can also create the corporate paper slip paper using - normal paper
slip, plastic, and captain rubber stamp (making this paper having a rare
status)


![image](https://user-images.githubusercontent.com/42353186/229195599-75807483-02f9-44cb-ae24-d3388b509ccd.png)

![image](https://user-images.githubusercontent.com/42353186/229195610-5a264ed4-8b04-4452-9032-5755e2419423.png)


## Why It's Good For The Game
Paper slips being not paper is stupid and has no point in being that
way. This also made the paper cutter useless; hence, it was never placed
on any map (and never used).
This PR makes it paper, so it's usable when crew members need a paper
slip instead of a full-size sheet.

Placing paper cutters around the station makes it so the crew can
produce paper slips when they need them, this also gives it finally a
use and place on the station.

The 'biscuits' are cool and give more flavour to the spare ID safe
codes, as well as to other documents people might put in future PRs.
This also makes those paranoid captains which are scared of their spare
ID safe code being stolen and read can sleep tight, as now if someone
opens it up it's really obvious. Now also you can really make sure if
that head is lying about "not touching the spare ID", _but not as anyone
cares really._

**Okay, it's draft for now just so I can add some new things, and fix
the dupe bug:**

- [x] Being able to fax the paper biscuits
- [x] Make it impossible to cut paper slips into paper slips
- [x] Make corporate paper slips craftable or printable
- [x] Make confidential biscuits craftable or printable
- [x] Make paper cutters orderable at the cargo

_CRUNCH_
## Changelog
🆑 DrDiasyl aka DrTuxedo#0931
add: Added 'biscuit' cards! They can contain documents and can only be
accessed by cracking them open, you can't close them back. Nanotrasen
now stores spare ID safe codes in them.
add: Placed paper cutters around the station. They're in Bridge, HoP
office, Warden office, and Cargo.
add: Now you can order paper cutters at cargo.
fix: Now the paper slip is actually paper.
imageadd: The paper slips sprite was slightly tweaked to have text lay
more logically, added the corporate paper slip.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-03-31 22:27:26 -06:00
LemonInTheDark
1e58c1875d Fixes lava river genertation (It was broken for 2 YEARS) (#74359)
## About The Pull Request

Post 9ee4703133, river generation was
broken
It broke things by moving ruin loading to BEFORE world gen (river gen
happens w ruin loading for convienience), which, since rivers retain
their old area (and world gen is area based), meant that rivers just got
overriden.

I've fixed things by moving river generation to AFTER world gen, since
rivers rely on things like mineral walls existing

## Why It's Good For The Game

If we're gonna spend cpu time on these they should like, exist.
Closes #61371
## Changelog
🆑
fix: Lava and plasma rivers (openspace on icebox too) will generate now.
This was broken for 2 years wtf man
/🆑
2023-03-30 21:21:44 -06:00
Jordan Dominion
958ce2be83 Implement TGS DMAPI 6.1.0 features (#74341)
Mainly just addressing warnings #74324 (36396bb4c2) added
2023-03-30 16:17:23 -06:00
SomeRandomOwl
b2f6058c92 Music Widget Modifications + Request Music Verb (#74170)
## About The Pull Request

This PR alters the Play Internet Sound, First off it modifies the Widget
To clean up some info on the widget to hide information when that
information is not available to be shown. Secondly it makes the URL
input prompt for Play Internet Sound to be a TGUI text input box, as
well as adds in a warning if a song being played is >10 minutes long,
and adds in a proc to play music with a supplied variable.

Secondly This PR adds in a new player facing VERB in the OOC tab called
`Request Internet Sound` functionally the verb is similar to Pray but it
grants admins the ability to play URL's directly from the chat or
Request Manager, where it will prompt the admin if they wish to play the
song.

<details>
<summary>Screenshots/Videos</summary>


![dreamseeker_PJ1PCCWxT3](https://user-images.githubusercontent.com/2568378/226795466-541def6e-d1cc-4481-b14a-21d2690c80b3.png)

<details>
<summary>Widget</summary>


![image](https://user-images.githubusercontent.com/2568378/226794671-ab1f6f3f-08e4-44f7-9569-634ff70e8462.png)

![image](https://user-images.githubusercontent.com/2568378/226794685-4f2e71bd-c3f9-4409-86f1-8b5be28bed41.png)

![image](https://user-images.githubusercontent.com/2568378/226794696-2725fadf-0066-4cd4-b975-e9e69f1ef4c9.png)
</details>

<details>
<summary>New Prompts</summary>


![tO6QsZdHfe](https://user-images.githubusercontent.com/2568378/226794891-ce2e6737-409d-479c-90f2-57d55fc89561.png)

![RZVwU417nX](https://user-images.githubusercontent.com/2568378/226794912-0261e374-a7fa-4864-b5b8-99821cff32a8.png)
</details>

<details>
<summary>Videos</summary>


https://user-images.githubusercontent.com/2568378/226794939-4ca018b3-bba5-4893-9301-6858b0d433b9.mp4


https://user-images.githubusercontent.com/2568378/226794783-ca750840-3149-489c-9239-00014ac4ca5c.mp4
</details>
</details>

## Why It's Good For The Game

This cleans up the UI for the Play Internet Sound so that things to hide
info when admins choose to hide it, or to not show it if that
information exists at all. As well as grants players a ability to
request music to be played via Admin Midi and sorts them with prayers
and allows admins to directly play URL's simultaneously cleaning up any
music requests made through prays as well as a more obvious way for
people to request music rather than them Ahelping for music

## Changelog

🆑
add: New VERB, Request Internet Sound, It is in the OOC tab and allows
you to request music from admins to play, by default only allows
bandcamp, youtube, and soundcloud links
fix: Fixes the Admin Midi Widget UI to only present info that is
available to players to be seen
admin: Play Internet Sound URL input is now TGUI
admin: Play Internet Sound warns you if a song length is >10 Minutes
admin: Added new mute type to mute internet sound requests from a player
config: Added thee new config options, LOG_INTERNET_REQUEST,
REQUEST_INTERNET_SOUND, REQUEST_INTERNET_ALLOWED
/🆑

---------

Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2023-03-29 19:04:41 -06:00
san7890
ccef887efe Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR
TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW
RATHER THAN AFTER THE FACT.

## About The Pull Request

Hey there,

This took a while to do, but here's the gist:

Python file now regexes every file in `/code` except for those that have
some valid reason to be tacking on more global defines. Some of those
reasons are simply just that I don't have the time right now (doing what
you see in this PR took a few hours) to refactor and parse what should
belong and what should be thrown out. For the time being though, this PR
will at least _halt_ people making the mistake of not `#undef`ing any
files they `#define` "locally", or within the scope of a file.

Most people forget to do this and this leads to a lot of mess later on
due to how many variables can be unmanaged on the global level. I've
made this mistake, you've made this mistake, it's a common thing. Let's
automatically check for it so it can be fixed no-stress.

Scenarios this PR corrects:

* Forgetting to undef a define but undeffing others.
* Not undeffing any defines in your file.
* Earmarking a define as a "file local" define, but not defining it.
* Having a define be a "file local" define, but having it be used
elsewhere.
* Having a "local" define not even be in the file that it only shows up
in.
* Having a completely unused define*

(* I kept some of these because they seemed important... Others were
junked.)
## Why It's Good For The Game

If you wanna use it across multiple files, no reason to not make it a
global define (maybe there's a few reasons but let's assume that this is
the 95% case).

Let me know if you don't like how I re-arranged some of the defines and
how you'd rather see it be implemented, and I'd be happy to do that.
This was mostly just "eh does it need it or not" sorta stuff.

I used a pretty cool way to detect if we should use the standardized
GitHub "error" output, you can see the results of that here
https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792
## Changelog
Nothing that really concerns players.

(I fixed up all this stuff using vscode, no regexes beyond what you see
in the python script. sorry downstreams)
2023-03-29 10:17:03 -07:00
LemonInTheDark
8982828d05 Removes Starlight Config (#74289)
## About The Pull Request

It was config'd off to save init time, but having it function in testing
and mapping is more valuble then the time spend on it.

On that topic, we spend roughly 1.7 seconds of init on this. 
~1.3 is spent handling the light sources and their light object
modifications (this is potentailly inflated since other sources could
cause the same objects to need updates)
~0.3 is spent searching for space turfs around lighting_objects during
init.
This will impact change_turf slightly too, costing about ~0.07 in local
testing.

It does save time for live however, since we avoid these config checks.

## Why It's Good For The Game

I believe this time is worth spending. 
I've had people try to "fix" artifacts of starlight not being enabled,
things that aren't bugs.
The test environment should as much as we can make it reflect the visual
reality of the game. This helps ensure that

## Changelog
🆑
server: The starlight config has been removed, as it is enabled by
default
/🆑
2023-03-27 22:34:13 -07:00
san7890
d43ebd042d Log Active Turfs To Mapping Log (#74267)
## About The Pull Request

Was reminded of doing this via
https://github.com/tgstation/tgstation/issues/74245#issuecomment-1483943979

They're mapping issues, so let's log them to the mapping log. Quite
shrimple honestly.


![image](https://user-images.githubusercontent.com/34697715/227805458-5e6bcf01-629d-4b81-ab6a-b26e63d41ca3.png)
## Why It's Good For The Game

As the comments expound, the reason why we probably haven't done this in
the past is because any number of things can cause active turfs (like
ruin placement (either in icebox or in space)), or other silly stuff
like that. Thus, finding stuff like this would only really be viable
with stuff like the View Active Turfs verb, where you could visually
jump to and see all of the active turfs in that dynamic configuration
(and this still remains the best way to find active turfs).

This PR just makes it easier to do a "post-mortem" analysis on potential
active turfs, so that if it's very blatant, it can be fixed a lot
easier. It's best to try and find them during an ongoing round, but this
is life. (same as the unit tests concession, not too enthused on that
but we would have spontaneous errors out the ass without _something_)
## Changelog
Nothing that concerns players.

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2023-03-26 21:47:17 -05:00
Zephyr
ecbcef778d Refactors Regenerate Organs, and a few organ helpers (#74219)
## About The Pull Request

Refactors regenerate organs to be slightly more intelligent in handling
organ changes and replacements.
Noteably:
- We don't remove organs that were modified by the owner; such as
changing out your heart for a cybernetic
- We early break out of the for loop if they aren't supposed to have an
organ there and remove it
- We check for the organ already being correct, and just healing it and
continuing if it is

Also changes the names of some of the organ helpers into snake_case
### Mapping March
Ckey to receive rewards: N/A

## Why It's Good For The Game
## Changelog

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-03-26 17:54:36 +01:00