Commit Graph

2701 Commits

Author SHA1 Message Date
Emmett Gaines
4be51f846d Pipe gas visuals (#78217)
## About The Pull Request

Primarily this pr is all about getting pipes to have a visual display
for the gas within them. A couple other things of note have been done to
make that easier though:

- A sprite generator that outputs to a dmi has been made for all pipe
variants and the layers. This is because I didn't want to work with
hundreds of pipe sprites just to do minor changes. In the future I would
like to generate things like this during a github action but for the
moment this is just a helper you can use for generating the pipe dmi
files.
- Some minor reorganization of the code in the pipe dm file.
- Some doc comments on things that bothered me

## Why It's Good For The Game

Gives a bit of visual feedback when working with pipes that should
hopefully make people more comfortable around them if they can easily
see if the pipes are empty or are filled with an unknown gas mixture.
Can also serve as a warning to those keeping an eye out for things like
plasma floods.

🆑 ninjanomnom
add: Pipes now have a colored visual display that shows their contents
at a glance.
/🆑

~~The colors for gases could stand to be better, if anyone wants to
suggest alternatives to what I've used please do as I put only a bare
minimum of thought into each choice.~~ I've switched to using the gas
colors defined in tgui constants.


![dreamseeker_2023-09-26_07-32-56](https://github.com/tgstation/tgstation/assets/1234602/0a3a5636-c9b9-4046-83b9-0d116f8232d1)
2023-10-08 23:39:04 -06:00
AnturK
57df597138 Fixes runtime on initalizing science programs (#78842)
Datums don't have location, so there's no z level to search here.
2023-10-08 23:01:55 -06:00
ArcaneMusic
9073290d8a ArCargo: Adds the Galactic Materials Stock Market V1.2 (Free Market Edition) (#78500)
## About The Pull Request

**This PR is a rerelease of #78164, with some bells and whistles.** As
such, most of the core functionality is the same, but with some tweaks
to balance the gameplay and prevent bike levels of profit. I've tried to
bold the new additions to make it easier to read for those coming back
for the second pass.


![image](https://github.com/tgstation/tgstation/assets/41715314/ff9bf038-524d-44fc-81bb-c6ff97fef6dd)
This PR adds a new machine that can be bought called the **Galactic
Mineral Market** (GMM). The Galactic Mineral Market (GMM) allows you to
buy and sell minerals wholesale from the market machine. It goes
something like this:

### 1. Getting the Machine:
The GMM can be bought as an un-assembled machine for 600 credits from
cargo. It's a low cost, but its not mapped in standard, so if you're
confident in your miners, you shouldn't necessarily need one for the
department. Otherwise, it's available for other crewmembers to buy for
cost.

The cargo pack comes will all supplies necessary to finish the machine.
Tools not included.

### 2. Buying Low
Using the machine's UI, you can see all traded minerals and their
associated prices. Buy prices are played straight, and can be bought for
material price, times the quantity. The order is then instantly placed
on the cargo shuttle, and will be deducted from the buyer's account on
shuttle send. **A single order can only have 10 different stacks of
materials in it. So, that can be 100 sheets of iron and 1 of everything
else, or 500 sheets of iron. After that you're blocked from buying more
sheets until you've sent the order.**

Cargo staff with standard cargo access may toggle the machine to order
directly from the cargo budget. Otherwise, materials are only purchased
from private accounts.

All purchases are treated as private and must be opened by the recipient
like private orders.

### 3. Selling High

It's stocks time. To sell minerals on the market, simply insert any
relevant metal stock into the machine. This produces a totally original
and not-a-bounty-cube stock block, which can be sold on the cargo
shuttle for cargo funds. Stock blocks can also be price-tagged as well
following their standard process.

**Stock blocks start out a bright pink and are worth the value of that
material at that time, but over time their color will degrade. After a
full 5 minutes, stock blocks will switch over to a purple hue, and their
value will once again become liquid, subject to the current market
value. This encourages players to be a bit more fast on their feet than
before instead of just waiting forever for all of their investments to
arrive at the perfect value, before the inevitable "rest of the game"
tries to upend your investing.**

Sold cargo stocks are subject at a 20% processing fee as part of the
galactic mineral market.
### 4. Outside Factors

**In-game events like the Crab-17 or the Market crash event will cause
stocks to bottom out completely, and for the market to become
unavailable until the market stabilizes. Thankfully, once the market has
crashed, typically stocks will recovery and gain back some value,
allowing for fast acting market movers to capitalize on rough markets.**

**Additionally, low value materials like iron and glass have an extra
stipulation, as their value goes all the way down to 0 credits. In that
case, you are unable to buy them at that value as a market protection.
Be careful that you don't see a reset or crash when you're planning on
selling your horde of iron and glass stocks!**

Additionally, market events can occur during the round that can more
sharply adjust a single stock's price and completely rebound it's
trajectory. These events are always mentioned in the station
announcement's economics report.

### Other notes:
The market does not cover all minerals, partially for consistency
purposes as well as for balance reasons. Plasma, being a unique material
that only Nanotrasen has their hands on, is the sole exporter of plasma
in the system, so it stands to reason that it's not on the market, and
remains a solo export. Bananium, as it has a rare and expensive
conversion rate, works the opposite way, and as such isn't listed on the
market either, with the sole source being single cargo sales. All others
just don't make much sense to include into the market at this second, so
I left them out for now.

**Alright now below I'm going to cover the math and shit so if that's
not what you care about then please scroll past.**
<details>
  <summary>Warning: Arcane is about to talk about the math</summary>
Alright.
So this adds a new stock_market subsystem, which fires once every 20
seconds. I'm still fairly new to subsystem design so I'm probably going
to need some feedback on cleaning this up to make it look nicer and run
smoother.

So we have 4 associated lists, each attached to the relevant traded
datum; this tracks prices, market trends, how long that trend is going
to last in SS fires, and market quantity.

Prices fluctuate between 0.5x and 3x the material's single sheet value.
This could be tweaked even farther in the future, but for now I'm
keeping it at this nice clean margin. Prices fluctuate based on a
gaussian normal distribution that is centered on different points based
on their **trend**. Upward trending materials are centered in such a way
that they'll almost certainly go upwards, but being that it's based on a
random chance, not always. Vis versa, downward trends should tend to
lose value at about the same rate. We also change our rounding based on
this trend data, in order to prevent low price values like iron and
glass from getting stuck in the same value or freefall drop over time
just because of rounding down. Similarly, neutral trending materials
will not change nearly as much, and will generally stay at around the
same amount.

When buying or selling a material, the quantity of that material will
change on the market. The magnitude of that change depends on how much
of that material currently exists on the market. Buying a low quantity
material like diamond for example will tangibly increase that material's
cost, while buying stacks and stacks of iron and glass won't do much
damage to the price of iron as there's usually around 500 full stacks on
the market to start with. It's applied at a relative percentage of
(qty_changed / new_total_on_market) * price of goods bought/sold at.

In addition to that, there are random "market events" that can occur
randomly, which you might miss if you don't follow the newscaster
economy news. These three events are fairly barebones now, but in
general they have a 1% chance of happening per material, and can more
dramatically increase, decrease, or fully reset the value of a material
on the market back to it's standard value. This opens up for doing more
with it in the future, but that's a later problem.
</details>


## Why It's Good For The Game

This independently resolves some issues related to #78040, that being
that lowpop stations, or shifts with few miners would have a new way to
be able to still get some access to minerals in a given round. This also
provides a unique minigame and alternative way to acquire money in a
given shift, using minerals.

**"But Arcane,** I hear you ask. **"Isn't this just the same thing you
tried doing way back when and then reverted in #50537?**
Well, fuck man, how you doing I haven't see you around in forever also
no you're completely wrong and here's why

**This PR is no longer contingent on the rest of ArcMining in it's
current iteration.** I have introduced some extra factors into the
gameplay as well to try and curb the creation of bikes within gameplay.
This also provides a massive benefit to round progression and gives the
QM and the cargo members the ability to prevent round progress from
stalling by buying round-critical resources.

Not to mention, as the GMM is not cargo required, more cargo integrated,
it also functions as economy content for the rest of the crew.

## Changelog
🆑
add: A new export has arrived in the imports section, the Galactic
Materials Market! You can use this to buy and sell minerals for profit
or cost, as well as stock your station when you don't have any miners.
add: Insert sheets of minerals into the Galactic Materials Market to
convert them into a stock block, allowing you to lock in your price for
5 minutes. Wait too long and it'll be subject to market value again!
add: Minerals can be bought on the market either using the station's
cargo budget by cargo crew, or privately by everyone else.
del: Any material stacks that can be bought and sold on the market
before have been removed from the cargo catalog.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-30 08:58:56 -04:00
MrMelbert
9ebfb27940 Fix roundstart crewmembers not getting their radio hint message / Examine blocks out starting job information (#78647)
## About The Pull Request

- Fixes roundstart jobs not getting information from
`radio_help_message`

- Adds extra information for the Captain

- Examine blocks out roundstart / latejoin job information

Roundstart:


![image](https://github.com/tgstation/tgstation/assets/51863163/908b5618-fd74-443d-9683-2f98e83a4ef4)

Latejoin:


![image](https://github.com/tgstation/tgstation/assets/51863163/52dc0404-07c6-4c68-91be-b645e70cf6d6)

## Why It's Good For The Game

1. Roundstart mobs weren't getting radio information due to them not
being cliented yet, this has been fixed.
2. The roundstart block was pretty cumbersome to read and easy to have
your eyes glaze over, this should make it easier.

## Changelog

🆑 Melbert
qol: Examine blocked out roundstart / latejoin job information.
qol: Captain gets a little bit more information about how their radio
works roundstart.
fix: Fixed roundstart players not getting radio information.
/🆑
2023-09-28 11:37:52 -06:00
LemonInTheDark
99950517aa Quick Harddel Fixeees (#78253) 2023-09-27 21:05:55 -04:00
carlarctg
047f7aa316 Fixed headless zambos and the oversight of no bio armor resistance (#78589)
## About The Pull Request

Fixed zombies being able to infect headless corpses (Including former
zombies)

Fixed bio armor being totally useless against zombies. Now it checks how
hurt your limb is: If it's more than the bio armor value, you get
infected. THICKMATERIAL clothing guarantees at least 25 damage required
to infect you, non-thick clothing reduces effective defence by 25. In
practice this means people with MODsuits, biosuits will resist infection
unless they're pummeled into crit, and wearing a firesuit will save you
from the first few slashes.

Fixed the bomb hood armor not having the same bio armor value as bomb
armor.

Added a message to the zed when they succesfully infect someone.

Turned some proc names into snake_case rather than, uh, nospacecase.

## Why It's Good For The Game

> Fixed zombies being able to infect headless corpses (Including former
zombies)

This is pretty cool but it also means you can't actually permanently
kill a zombie if they just get slashed again by another zombie.

> Fixed bio armor being totally useless against zombies. Now it checks
how hurt your limb is: If it's more than the bio armor value, you get
infected. THICKMATERIAL clothing guarantees at least 25 damage required
to infect you, non-thick clothing reduces effective defence by 25. In
practice this means people with MODsuits, biosuits will resist infection
unless they're pummeled into crit, and wearing a firesuit will save you
from the first few slashes.

Melbert told me this is an oversight, so I, uh, 'fixed' it? This also
lets people have some true actual defence against zombie infections,
without making them immune to it.

> Fixed the bomb hood armor not having the same bio armor value as bomb
armor.

Bug I noticed while going over bio armors. 

> Added a message to the zed when they succesfully infect someone.

QoL and good feedback

> Turned some proc names into snake_case rather than, uh, nospacecase.

what the hell do you call isuckatnamignprocs(). what case is that.
cougarcase?

## Changelog

🆑
fix: Fixed zombies being able to infect headless corpses (Including
former zombies)
fix: Fixed bio armor being totally useless against zombies. Now it
checks how hurt your limb is: If it's more than the bio armor value, you
get infected. THICKMATERIAL clothing guarantees at least 25 damage
required to infect you, non-thick clothing reduces effective defence by
25. In practice this means people with MODsuits, biosuits will resist
infection unless they're pummeled into crit, and wearing a firesuit will
save you from the first few slashes.
fix: Fixed the bomb hood armor not having the same bio armor value as
bomb armor.
qol: Added a message to the zed when they succesfully infect someone.
code: Turned some proc names into snake_case rather than, uh,
nospacecase.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-27 06:56:41 +02:00
Iamgoofball
dd87788877 TTS: Gas Mask muffling, Hailer Mask voice effects, support for more filters that use samplerate, voice effects for lizards, ethereals, and xenomorphs. (#78567)
## About The Pull Request


https://github.com/tgstation/tgstation/assets/4081722/7c8df2e2-8795-4048-b11e-e831f749a097


https://github.com/tgstation/tgstation/assets/4081722/d0bec7fd-25b1-4bdd-98a6-0ebfea749551


https://github.com/tgstation/tgstation/assets/4081722/31c0259a-2bd4-4575-a758-a2044ccf17b0


## Why It's Good For The Game

Improves TTS audio immersion.

## Changelog
🆑
qol: Gas masks now muffle your voice with TTS.
qol: Security Hailer masks now disguise your voice to protect your right
to brutalize greytiders.
qol: Lizards, Ethereals, and Xenomorphs now have a vocal effect.
qol: Security Records now show someone's voice name.
/🆑
2023-09-27 01:01:47 +00:00
Jacquerel
517d33e6f0 Basic blob mobs (#78520)
## About The Pull Request

I remembered today that blob code is ass, especially blob spores.
There's still a lot to improve but I cleaned up _some_ of it by
converting these mobs.
Now they use a newer framework and more signal handling as compared to
circular references.

I _expect_ the behaviour here to largely be the same as it was or
similar. I haven't added anything fancy or new.

This is a reasonably big PR but at least all of the files are small?
Everything here touched every other thing enough that it didnt make
sense to split up sorry.

Other things I did in code:
- Experimented with replacing the `mob/blob` subtype with a component.
Don't know if this is genius or stupid.
- AI subtree which just walks somewhere. We've used this behaviour a lot
but never given it its own subtree.
- Blob Spores and Zombies are two different mobs now instead of being
one mob which just changes every single one of its properties.
- Made a few living defence procs call super, because the only thing
super does was send a signal and we weren't doing that for no reason.
Also added a couple extra signals for intercepts we did not have.

## Changelog

🆑
fix: Blob spores will respond to rallies more reliably (it won't runtime
every time they try and pathfind).
fix: Blobbernaut pain animation overlays should align with the direction
the mob is facing instead of always facing South
refactor: Blob spores, zombies, and blobbernauts now all use the basic
mob framework. They should work the same, but please report any issues.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-09-26 15:28:26 -06:00
Watermelon914
2b9a07e5db Fixes some more issues with job configs not being loaded by ResetOccupation (#78596)
## About The Pull Request
Job configs would get reset by ResetOccupation and not loaded
afterwards. This fixes that.

## Why It's Good For The Game
Bugfix

## Changelog
🆑
fix: Fixed job configs not being loaded properly.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-09-26 15:27:26 -06:00
Watermelon914
8fe5d046d6 Fixed overflow role not actually being overflow anymore after ResetOccupation is called (#78556)
## About The Pull Request
See title. Calling ResetOccupation doesn't re-apply the overflow role
correctly so it has reduced slots when it shouldn't.

## Why It's Good For The Game
Bugfix

## Changelog
🆑
fix: Fixed the overflow role having less slots than it actually should.
/🆑

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-09-24 18:23:21 +01:00
Watermelon914
41bba9931f Prevents players from getting antagonist if they can't qualify for any role beforehand. (#78511)
## About The Pull Request
As the title says, you can no longer become an antagonist if you can't
qualify for a role beforehand. How this works is that it runs job
assignment before antagonist roles are handed out to see which players
can qualify for a job role. It then undoes job assignments and then runs
antagonist assignment.
This is to prevent players from setting a highly contested role to low
priority so that they have a 0% chance of ever getting it, whilst still
being eligible for every antag role.

It's not completely foolproof as it's not really possible to account for
the fact that some players may become antagonists, thereby freeing up
some job slots. Since it's an approximation, it means that players who
put themselves at a high chance of returning back to lobby due to their
preference choices have an overall lower chance of becoming an
antagonist as they can be excluded from the antagonist roll due to the
random nature of job selection.
If players want to prevent this from happening, simply set a lot of jobs
to low/medium priority or adjust the "Return back to lobby" preference
to any other preference.

## Why It's Good For The Game
Prevents players from rolling antag without ever intending to play the
game as a non-antagonist.

## Changelog
🆑
fix: Fixed players being able to roll antagonist without ever being
eligible to play any role. Players who have their preferences set up so
that they're likely to return to lobby when the round starts have a
lowered chance of becoming antagonist.
/🆑

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-09-23 20:42:45 -04:00
Jeremiah
a3849062b8 Feature: bitrunner, a new supply role (READY) (#77259)
## About The Pull Request
[Design doc](https://hackmd.io/@shadowh4nd/r1P7atPjn) 

Adds a new supply role centered on short dungeon-esque runs with a focus
on unifying the job with the fun part. Some virtual domains are combat
related, some are silly, some focus on "objectives". Avatar health is
linked to your physical presence and retries are limited.


<details>
<summary>Photos, WIP</summary>

Net pod stasis

![netpod](https://github.com/tgstation/tgstation/assets/42397676/d99073a4-2438-4600-83c0-cafb7b3fee55)

Server loaded

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304774976278759/dreamseeker_N14j6dwLcK.gif)

Server cooldown

![](https://cdn.discordapp.com/attachments/1131433451841662996/1135304775945179217/dreamseeker_NkIwWLJZma.gif)

the quantum console UI
![Screenshot 2023-08-05
105742](https://github.com/tgstation/tgstation/assets/42397676/3a45feaf-8c80-46b2-81c9-355932d1b014)

Cyber police antag page
![Screenshot 2023-08-16
205303](https://github.com/tgstation/tgstation/assets/42397676/fc28bcdd-2a2a-487b-927c-904f224c1b89)

A safehouse

![image](https://github.com/tgstation/tgstation/assets/42397676/c22ac115-4e00-432a-aeeb-b6afdb1ef750)

Domain info page, every domain gets this (and sometimes help text)
![Screenshot 2023-08-04
141859](https://github.com/tgstation/tgstation/assets/42397676/ba9ed6d9-a318-4466-b246-d2da0fa05676)

Me getting steamrolled in one of the missions

![syndicant](https://github.com/tgstation/tgstation/assets/42397676/3eb3099a-f9b2-4431-854d-50d8cad9b7f0)

Ghost roles getting notified that server is kicking them out
![Screenshot 2023-08-04
135454](https://github.com/tgstation/tgstation/assets/42397676/edab916c-6255-4b83-b2e7-155df2f03aab)

Players enjoying the new combat missions
![Screenshot 2023-08-05
005727](https://github.com/tgstation/tgstation/assets/42397676/e302a66f-610d-4fe1-82e0-7c8aec3913ea)

Players exploring some of the virtual maps
![Screenshot 2023-08-06
220919](https://github.com/tgstation/tgstation/assets/42397676/75a92a0b-6aa1-4bac-8fd1-c9fb47c955da)

(Not part of the PR, but)
![Screenshot 2023-08-06
221527](https://github.com/tgstation/tgstation/assets/42397676/012475ec-bfa5-4fd3-9dcb-31d222bb7bef)

New bitrunner vendor

![dreamseeker_V62h2BGdEl](https://github.com/tgstation/tgstation/assets/42397676/37ca8f69-f75e-45c9-b324-e6b31696c7b7)

</details>

## Why It's Good For The Game
Content, firstly, and moreso being supply department content.

The framework that this implements is a great (preauthorized)
replacement for two systems which are collecting dust: BEPIS and the
gateway. They integrate into this system and it's a direct upgrade.

This adds a way for the players on station to generate materials (if
that remains). The nice part about it is that I can throw balance and
believability to the wind, as unlike its unrelated predecessor VR or
away missions, bitrunning entirely washes its hands of the map and mobs
each reboot.

It offers a very expandable map framework to add content and it's all
fairly well documented.

I'd like to add a feature that represents the idea that jobs don't have
to be mundane and "external" jobs can stay tied to the main gameplay
loop.

## Changelog
jlsnow301, kinneb, mmmiracles, ical92, spockye
🆑
add: Adds Bitrunning to supply department- a semi-offstation role that
rewards teamwork.
add: Adds new machines to complement the job- net pod, quantum server,
quantum consoles, and the nexacache vendor.
add: Adds several new maps which can be loaded and unloaded at will.
add: Some flair for the new bitrunning vendor.
add: Adds a new antagonist for the virtual domain only. Short lived
ghost role that fights bitrunners.
del: Removes the BEPIS machine, moves its tech into the Bitrunning
vendor.
/🆑

<!-- 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. -->

---------

Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
Co-authored-by: Ical <wolfsgamingtips@gmail.com>
Co-authored-by: spockye <79304582+spockye@users.noreply.github.com>
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-23 11:14:12 +02:00
lessthanthree
a9945183e0 Supermatter Surge Event (#78244)
## About The Pull Request

Adds a new random event, Supermatter Surge.

For the duration of the event a powerloss inhibition is added, causing
the crystal to retain more of its internal energy. Engineers have to
keep the crystal stable for a few minutes until it passes.

The amount of additional heat is balanced around a roundstart nitrogen
engine with no freezers running (*icebox has freezers because planetary)
so that even the most basic setup can reasonably be responded to.

The event requires at least 3 engineering crew (or one CE) to run.

engine_alert3.ogg is a shortened version of bloblarm.ogg

## Why It's Good For The Game

Adds an engineering related event that while isn't too difficult to
respond to, makes the SM less of a 'set it and forget it' piece of
equipment in the round. The gas properties reduce heat generation as it
depletes during the event progression, so it remains relatively under
control compared to a massive 10K+ SM fire.

It creates a series of events that engineers can respond to in their own
way, be it adding more cooling, throwing in freezers, using a borg with
a fire extinguisher or whatever else they can think of.

## Changelog

🆑 LT3
add: New random event: Supermatter Surge
code: Individual supermatter crystals can have custom gas properties
/🆑

---------

Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-09-19 17:56:27 +00:00
Zephyr
1b96345e44 Multi-Z Support for Lazy Templates | Cleans up some turf flag misuse (#77786)
## About The Pull Request

Adds multi-z support for lazy templates
Also fixes some improper use and placement for turf flags
## Why It's Good For The Game

Shadow needs/wants this for bit runner maps.
Turf flags are also why lava has been generating in places it shouldnt.
(inside of ruins)
## Changelog
🆑
fix: Lava can no longer occasionally generate inside of previously
loaded templates and breach and/or destroy shit
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2023-09-19 01:06:08 +00:00
Ghom
da42afcbae Reworks the fishing minigame into a game screen object from a TGUI interface (#78052)
Refactors fishing minigame from tgui window to dm screen objects
2023-09-18 11:18:27 +02:00
lessthanthree
29cb4b5f35 Emergency shuttle is aware of security level (#78271)
## About The Pull Request

The emergency shuttle maintains its security level coefficient and does
the calculation instead of outside procs that aren't aware of what alert
it was when the shuttle was first called.

If the shuttle auto-call timer should be capped at the current security
level timer, that can be done in a different PR.

## Why It's Good For The Game

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

## Changelog

🆑 LT3
fix: Emergency shuttle should correctly scale timer up/down when
changing security levels
/🆑
2023-09-13 23:06:22 +01:00
Jacquerel
55cee5dc8e Increases midround traitor starting reputation (#78189)
## About The Pull Request

Reputation for traitors serves two goals:
_Primarily_ it is a timelock. Secondarily, it can drive interaction with
secondary objectives by giving you a little reward.

The way that progression traitors work is that reputation is earned
every minute, so that when a developer is adding a new item for the rep
cost they can just write "30 MINUTES" and it means that the item will be
available when 30 minutes have passed, or a little earlier if the
traitor does some secondary objectives.

_Currently_ when traitors arrive on the station they get reputation
equal to _60%_ of the reputation that they would have had if they became
a traitor at the start of the round and then had hidden in a locker
until the current time.
This PR increases that to 100%, so if you are activated as a sleeper
agent 30 minutes into the round you will immediately have 30 minutes of
reputation. With this and your standard 20TC you can buy almost anything
in the uplink, such as a syndicate bomb.

## Why It's Good For The Game

Given that it is primarily supposed to be a time lock to prevent people
from immediately accessing items which can rapidly pivot the round, it
doesn't make sense that late joining traitors are "penalised" in this
way. If we're ok with a roundstart traitor having a bomb right now, we
should be ok with a latejoin one having one too.
As far as I am concerned secondary objectives should be something you do
for a _bonus_, and anything which can drag people away from being 100%
mechanically focused in order to chase the increasing number in favour
of just being able to do their damn gimmick is a good thing.

## Changelog

🆑
balance: Traitors who are activated as sleeper agents or arrive late on
the arrivals shuttle will begin with more reputation and likely be able
to immediately access most of the uplink catalogue.
/🆑
2023-09-08 20:10:28 +02:00
John Willard
aa820c08fe Oldstation now has their own RND (#78132)
## About The Pull Request

This PR does many things and I expect to be asked to atomize some stuff.

### Oldstation Additions

Oldstation now has their own research server, generating their own
points. To help alleviate major concerns, they have a few stuff to help
with this:
- They now have a pre-built operating computer
- They now have an Autopsy scanner
- They now have access to Experimental Dissection

Experimental Dissection is the old dissection, giving research points in
the form of paper notes on completion. They must be turned in to the RND
server (only works on the Oldstation one, so you can't abuse this) for
points. This was an idea I've had for some time, as Oldstation is used
somewhat as a representation of how ss13 used to be (through its use of
directional windows (before they got removed, but I'd like to bring them
back), old IDs, RTGs, and old engines before they got removed from the
game fully)

Considering there are 11 alien mobs in Oldstation, there is 27.5k
research points to get from alien corpses, enough to bring them up to
speed with whatever they wish to do. This is their 'alternative' for
experiments (which they can still do if they want, but it is very hard
to do, outside of dissection which is needed for the node).

This surgery isn't repeatable, isn't upgradable, and isn't removed by
being healed. It is not mutually exclusive with autopsy (so you can't
ruin yourself doing the wrong surgery).

### Other stuff

- Ninjas now drain RND points from the server they drain from, rather
than always hitting science
- Syncing machines to research roundstart is now a macro, and now
immediately syncs to a server on your Z-level. Machines will
automatically connect to the Science servers if none else are available.

### non-player facing

- Science, Admin, and Oldstation techwebs are now no longer vars on
research, but stored in research's list of techwebs.
- ``get_available_servers`` and ``find_valid_servers`` are now procs on
the research subsystem, rather than the experisci component.
- Oldstation code has been split into separate files.

## Why It's Good For The Game

Oldstation is one of my favorite ruins, but it is also one of the
largest complaints for RND (along with Golems) because they use the
station's Science nodes & points (I recently tried de-hardcoding Science
stuff to help prepare for this, but I didn't get everything in advance).

The complaint stems from these ghost roles, who are meant to be a fun
activity to do while waiting for the next round, using the station's
research points for their own stuff, completely untrackable unless
someone goes out of their way to grief a ghost spawn just for using
points to get things they need. These roles make their own servers to
drain the station, and I find that unfun and quite boring for everyone-
it's also not very flavorful, why would Charliestation know of the
station's RND to take advantage of it?

This hopes to fix those issues, make Charliestation more worthwhile, and
more flavorful.

## Changelog

🆑
fix: Getting a node researched now properly makes it no longer hidden.
fix: Ninjas draining RD servers now drains it from the connected
techweb, rather than sniping Science.
balance: Machines will first try to connect to a techweb with servers on
their z-level, with the Science techweb remaining as fallback.
add: Oldstation RND, comes with their own Techweb and special surgery to
gain research points through dissecting Xenomorphs.
/🆑
2023-09-07 17:59:17 +01:00
san7890
4b8de7b79f Refactors the notransform variable into a trait. (#78146)
## About The Pull Request

Hey there,

There were more than a few times (like in cinematic code) where we might
need to accurately know the source of what's adding this trait (or have
multiple sources for the whole 'we don't want this mob to do shit while
we transform this mob'), so in order to rectify this potential issue,
let's refactor it into a trait.

## Why It's Good For The Game

Some code already declared that there might be issues with this being a
boolean var (with no way of knowing _why_ we don't want this mob to not
transform (or not do anything idk). Let's remove those comments and any
future doubt in those instances with the trait macros. Also, stuff like
`TRAIT_IMMOBILIZED` which does a similar thing in many contexts was
already a trait that was regularly added in conjunction with flipping
the variable, so we're able to flatten all that stuff into
`add_traits()` and `remove_traits()` now. nice

I also cleaned up quite a bit of code as I saw it, let me know if it
should be split out but I guarantee that if I didn't do it- no one will
for the next two years.

## Changelog

🆑
refactor: If you transform into another mob and notice bugs with
interacting with the game world, please create a bug report as this
framework was recently refactored.
/🆑

Probably fucked up somewhere, lmk

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-09-07 16:45:50 +01:00
Time-Green
1be0841d98 Removes COMSIG_AREA_INITIALIZED_IN (#78143)
Literally just me stealing #77207 completely muhahahhahahah screw you
@Mothblocks
I did add some documentation and some radnebula related cleaning and
testing to make it work well

Copied from original PR:

> Please do NOT add code to InitAtom, it is extremely hot. The
conditions on this alone were costing nearly 200ms on my extremely
powerful machine.
> 
> Changes the radioactive nebula to perform its work by looping over
every space tile on init (which on my machine is faster than the time
being wasted on this signal), and adds a subsystem that does this in
SS_BACKGROUND every 30 seconds (usually completeable in about half a
second) for any new atoms, because the effect is hardly noticeable
anyway with how green space is.

Honestly we really don't care that much about stuff being initialized in
space. Everything that walks into space (about everything that matters
to players), is completely unaffected by this change, but roundstart is
now slightly faster
2023-09-06 15:32:44 +00:00
Acantharctia
f83c5f72a0 Adds a "Hurt no More" quirk (#78102) 2023-09-05 15:49:24 -04:00
Whoneedspacee
3692ad837b Demonic Frost Miner can spawn again (#78067)
## About The Pull Request

Fixes #72943
Fixes #62901

This fixes specifically icebox multi-z ruins not spawning with their
counterpart below ruins because the area for the underground portion of
icebox was not whitelisted so there were no valid spawn positions.

## Why It's Good For The Game

Multi-z icebox ruins working is good.

## Changelog

🆑
fix: Multi-z Icebox ruins including the Demonic Frost Miner can now be
placed again
/🆑

---------

Co-authored-by: Changelogs <action@github.com>
2023-09-03 06:45:56 +02:00
DrTuxedo
a49b804ab3 Better alert/announcment sounds and Status displays (#78047)
## About The Pull Request
**Simplified version of #72179**

### SOUNDS

Changes next sound files:
- airraid.ogg
- bloblarm.ogg
- alert.ogg

Adds next sound files:
- notice3.ogg
- announce_syndi.ogg

Now `announce.ogg` plays when a Captain joins round, and
`announce_dig.ogg` for Requests Console announcements.
The `announce_syndi.ogg` plays when an announcement is made through an
emagged communications console. It also plays when the evacuation
shuttle is fully hijacked or Cultists fully corrupt the evacuation
shuttle.
You can listen to them all here:


https://github.com/tgstation/tgstation/assets/42353186/10c5e597-6db7-464a-b693-f5a2672dc3d0

_All of the sound files are either made by me from existing sounds in
the game or taken from freesound.org and properly credited._

### STATUS DISPLAYS
Status displays are fully replaced with the addition of a few new ones.
<details>
<summary>Status display monitor</summary>


![monitor](https://github.com/tgstation/tgstation/assets/42353186/3ad61a98-d4c7-47da-9107-b39a2fcedace)

![logo](https://github.com/tgstation/tgstation/assets/42353186/38f48aa9-1451-46c0-bccb-7f61d8aa6731)

</details>
<details>
<summary>Misc displays</summary>


![biohazard_big](https://github.com/tgstation/tgstation/assets/42353186/54204671-308b-4a0d-b6a1-a91ad6014eec)

![lockdown_big](https://github.com/tgstation/tgstation/assets/42353186/5d603daa-75b3-4390-a5df-2f6546d66bbf)

![radiation_big](https://github.com/tgstation/tgstation/assets/42353186/d77c5ff6-4a3b-46de-91ad-b3da7326f8b2)

</details>
<details>
<summary>Alert displays</summary>


![greenalert_big](https://github.com/tgstation/tgstation/assets/42353186/adc96267-c722-46e5-8e55-1998860e1c30)

![bluealert_big](https://github.com/tgstation/tgstation/assets/42353186/9a4d2da7-c29a-4987-8333-b2041b0ccb42)

![redalert_big](https://github.com/tgstation/tgstation/assets/42353186/427d4fed-19a2-49c1-86fe-d04c25f0417d)

![deltaalert_big](https://github.com/tgstation/tgstation/assets/42353186/72717e79-bb04-4961-ab06-baf714924139)

</details>

Now the communications console Status Display menu replaced the "Red
Alert" display option with the "Current Alert" which showcases the
current alert display.
Also, the Status Display menu has an additional "Radiation" display
option.
## Why It's Good For The Game

I believe this Pull Request is a good game for a couple of reasons:

1. It better conveys the gravity of emergency situations, such as Code
Red, by utilizing a more intimidating and recognizable sound. This gives
more weight to these situations, making them feel more urgent and
important in the game. Players always tend to not notice that it's in
action.
2. The replacement of the old and outdated Status Display sprites with
newer, more eye-catching ones is a great improvement. This helps to
emphasize the importance of emergency situations even further by making
them more noticeable. Status Displays was one of the last wall-mounts
using ancient sprites.
3. The Captain's arrival using another sound effect from other
announcements gives more status to the Captain as the ultimate head of
the station.
4. Heads announcement using `announce_dig.ogg` makes the sound itself
more used outside of SM cascade, and also makes Head announcements more
noticeable.
5. Emagged console using `announce_syndi.ogg` making Traitor
announcements more noticeable. Also, it is played after evac shuttle is
fully hijacked or corrupted by Cultists giving a more ominous effect
## Changelog
🆑
sound: Adds/modifies next sound files: airraid.ogg, bloblarm.ogg,
alert.ogg, notice3.ogg, announce_syndi.ogg
sound: Code Red, Delta, and other extreme emergencies now possess more
unique alarm sound effect
sound: Captain's arrival now is announced by Captain's announcement
sound, but not for Acting Captain's
sound: Making Captain announcement through emagged console; hijacking or
fully corrupting evacuation shuttle now plays more ominous sound
sound: Making announcements through Requests Console now plays a more
noticeable sound
image: Status Displays sprites have been fully changed. Now they include
displays for every Security Level
qol: The "Red Alert" button in the Communications console status display
menu has been replaced with a "Current Alert" button showing the current
station Security Level display on Status Displays
qol: Communications console status display menu got a new "Radiation"
button which shows radiation symbol on Status Displays
/🆑
2023-09-03 06:10:41 +02:00
Jacquerel
9f3430b360 Generate theft objective target list more consistently (#78045)
## About The Pull Request

Fixes #77943
Moves the generation of traitor theft objective targets from `new` of
`/datum/objective/steal` to `initialize` of
`/datum/controller/subsystem/traitor`

`/datum/objective/steal` we would generate the full list of possible
theft targets _only_ if the list was already empty.
A recent PR added a secondary "destroy item" objective which has no rep
prerequisite, as a result it is initialised as soon as a traitor datum
is assigned. Importantly this happens _before_ the traitor's theft
objective is assigned.
The "destroy item" objective generates its own item targets using the
"theft item" datum as it is a type of thievery, this pollutes the list
to contain more than 0 entries.
From this point on the only things people can be assigned to steal are
the items that traitors can be assigned to destroy early in a round,
which aren't valid for most kinds of theft objective.

Making the subsystem generate the list before traitor datums are
assigned resolves the race condition, the number of rounds where
_nobody_ has any kind of theft objective and this list is unused is
exceedingly small.

## Why It's Good For The Game

You can get primary theft objectives again.

## Changelog

🆑
fix: Traitors should generate with "free objective" less often, and will
once more be assigned to steal things.
/🆑
2023-09-01 11:54:36 -04:00
jimmyl
59e91513b8 makes mice not spawn on multiz cable hubs (#77753)
## About The Pull Request

makes them not spawn on multiz cable hubs

## Why It's Good For The Game

this is good because rats can no longer spawn on some isolated cable hub
in the middle of nowhere in maint and depower an entire floor

## Changelog
🆑
qol: rats no longer spawn on multiz cable hubs
/🆑
2023-08-27 02:11:29 +02:00
Ghom
d9ea578e53 Achievements now show how many people have unlocked them. (#77083)
## About The Pull Request
Checking the achievements UI now shows a line below the Unlocked/Locked
status for normal achievements, informing the user of how many players
have unlocked said achievement. It also contains a tooltip; within it is
a percentile comparison with the most unlocked achievement.

Beside that, I've added a check in the achievement unit test to
ascertain that all award categories are actually present in the UI, and
as well moved all `ui_data` to `static_ui_date` considering it is not
the sort of interface that has to be constantly updated like an air
alarm or an APC.

Here's a screenshot of the UI, with the tooltip where my cursor would be
(the hot damn! achievement was var-edited of course):
![Hot damn
th](https://github.com/tgstation/tgstation/assets/42542238/d80bfe3a-e755-4036-a360-276d5d3395dc)


## Why It's Good For The Game
This should provide some fundamental statistics for achievements, from
which contributors and players can deduct the rarity and bragging
rights.

## Changelog

🆑
qol: The Achievements UI now shows how many people have unlocked a given
achievement.
fix: The "Skills" Category for achievements should no longer be hidden.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Jordie0608 <4343468+Jordie0608@users.noreply.github.com>
2023-08-26 09:43:04 -06:00
san7890
018c10f9a0 Fixes Define Sanity (#77845)
## About The Pull Request

Hey there,

This was broken in an update from #74573
(3902973978), the RegEx was only catching
a fraction of the cases it was meant to be.

This is what we were finding on 74573 version of the RegEx:

![image](https://github.com/tgstation/tgstation/assets/34697715/a5040604-279f-4012-a5dd-3a1e9eea1b8e)

This is what we should be finding for all of the cases that
`define_sanity` will need to check for:

![image](https://github.com/tgstation/tgstation/assets/34697715/e33ad60e-fb36-448e-ae02-5494c916f450)

This is what was broken as a consequence:

![image](https://github.com/tgstation/tgstation/assets/34697715/567012db-a9c2-4118-aadf-f70996731af7)

As stated in the introductory PR #74333
(ccef887efe), it's not the end of the
world if we miss unmanaged local defines, but it's still useful to have
this as a maintainability tool to ensure that everything remains as
clean as it possibly can. I wish we could do the whole matching method
like the aforementioned PR supposed could happen, but it simply doesn't
appear to work the way we want it to.

## Changelog
Nothing player facing.

I tried to experiment with `UNLINT()` but I got absolutely ganked by
getting the regex to work, so the fix for the FA Icon file may not be
super duper great unfortunately. Let me know if you have a showstopper
idea, this is just a stopguard so this PR can get merged and I don't
have to keep talking about unmanaged local defines while reviewing PRs.
2023-08-26 02:25:16 +01:00
Bloop
4c870f71ca Fixes a bunch of callbacks that were being qdeleted, and code cleanup (#77904)
## About The Pull Request


![image](https://github.com/tgstation/tgstation/assets/13398309/559eb50a-461c-4220-b628-55412baaffc3)

Continuing the work of
https://github.com/tgstation/tgstation/pull/77850.

it started with finding one that was being missed and causing a
runtime...then I noticed a whole lot more. While I was doing this I
found callbacks that weren't being nulled in `Destroy()`, so I added
that wherever I found these spots as well as some general code cleanup.

There were a lot more of these than I initially hoped to encounter so
I'm labeling it as a refactor.

## Why It's Good For The Game

Fixes lots of runtimes, improves code resiliency.

## Changelog

🆑
refactor: fixed a bunch of instances of callbacks being qdeleted and
cleaned up related code
/🆑
2023-08-25 16:03:27 -06:00
LemonInTheDark
18bd0f8c4d Makes explosions consistently throw debris (#77880)
## About The Pull Request

It was possible for explosions to process throwing FIRST, then the
actual explosion. That's dumb, let's not do that.
Fixes a bug with SS explosions, it used SSair defines for its currentrun
default, which because of misordered defines lead to it running throwing
first for ONLY the first explosion. DUMB.
Changed how objects pick where they land. instead of using get_dir we
get the angle to the center, then invert it. Should lead to a nicer
picture

Unanchors broken disposal pipes so they'll get flung around Ups the
throw range for explosions. This needs more tweaking someday, but this
is ok for now

## Why It's Good For The Game

Throwing will happen consistently now, less fuckin floating shit sitting
in spac
2023-08-24 17:53:18 -06:00
LemonInTheDark
ed0999e4ea Adds error on qdeling callback, fixes errors this causes (#77850)
## About The Pull Request

You shouldn't ever qdel a callback. If you don't want to own it free
your ref (remove it from a list/set it to null). When all refs are
cleared it'll get cleaned up by byond itself
2023-08-22 21:32:30 -05:00
LemonInTheDark
6d3e268f6a Implements byond_status() for harddel hunting (#77818)
## About The Pull Request

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

byond_status() will dump as a part of find_references(). While I'd like
to expand that if we ever get a proper version, this is good for how we
have things setup rn.
2023-08-21 22:59:18 -07:00
spookydonut
a7f473d611 Use typepaths for the quirk blacklist (#77727)
## About The Pull Request
The string list is awful for maintainability and is the reason the
filter_invalid_quirks() proc wouldn't work properly.

randomise_quirks() is still broken though.

## Why It's Good For The Game
## Changelog
🆑
fix: Incompatible quirks in existing savefiles shouldn't be possible
anymore.
/🆑
2023-08-19 12:21:32 -06:00
san7890
bae1aef3b4 Refactors Regal Rats into Basic Mobs (more titles edition) (#77681)
## About The Pull Request

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

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

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

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

FYI: Beyond a few code touchups, I haven't touched the actions at all. I
do not believe myself to be enthusiastic about fixing anything involving
the actions code as of this moment so that this PR is more overbloated
unless it's unbelievably stupid or easy to fix.
2023-08-18 23:09:07 +01:00
Iamgoofball
d4697a5c7a Revert "Add the ability to use blips as your character's voice" (#77715)
Reverts tgstation/tgstation#77640


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

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

@MrStonedOne pls i need that TTS repo im begging you pls
2023-08-18 22:55:15 +01:00
Mothblocks
fcad1c76dc Move hot procs to CODEOWNERS for dev cycles initiative (#77599)
Someone touched these recently and added seconds of init time, I don't
want it to happen again without me knowing because it is hard to remove
after the fact without just killing the entire features that rely on it
2023-08-17 21:59:06 +00:00
necromanceranne
c8266cf0a2 Settler Quirk: Tame the Outdoors! Have trouble with tall shelves... (#77654)
## About The Pull Request

Adds the Settler quirk. This gives you bonuses to taming animals and
fishing, as well as making you gain hunger slower than others.

However, you are quite a bit slower than most people, and have trouble
with vaulting objects. You do, however, suffer significantly less from
equipment slowdown. (to the point that it is almost zero)

Settler riders are faster on their mounts than others if they're at
least sane. They start to slow down if they're less sane.

You are also shorter than most people. 

<details>
  <summary>Typical Settler encounters the typical Spacer</summary>
  

![Dr_Xr1nU0AAMsSE](https://github.com/tgstation/tgstation/assets/40847847/86ed4947-de5f-4bdf-a8ae-521dc7c30662)
  
</details>

## Why It's Good For The Game

I wanted to add a lightweight quirk that was kind of the 'opposite' of
Spacer, but a little more focused on interacting with elements of the
game world that would enjoy some attention. So, I thought 'what about an
outdoorsman quirk?'

So, I based it around being from people who lived out on the rim, under
unideal circumstances (and probably heavier gravity than Earth), and
taming the land. The slower movespeed encourages finding an animal to
tame that you can ride, and the bonuses to taming should help make that
a bit easier. The other additions just made sense for someone living it
a bit rough in the wilderness.

Having a bunch of settlers taming cows and riding around on them all
shift just kind of sounds hilarious to me.

## Changelog
🆑
add: Settler quirk! Conqueror the great outdoors....in space. Just make
sure nobody asks you to get anything from the top shelf.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-08-17 12:09:08 -06:00
Mothblocks
05b5213ae3 Add the ability to use blips as your character's voice (#77640)
## About The Pull Request

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

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

## Why It's Good For The Game

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

## Changelog

🆑
add: You can now set your voice to just blips.
/🆑
2023-08-15 22:18:05 -04:00
Mothblocks
1479bb7802 Save 180ms on GetElement by avoiding more stringifying unless necessary (#77604)
list2params does all this normally and faster. Also avoids going through
the ID generation proc at all if there's only one argument in the list,
which happens with every item description attachment, which happens
frequently.
2023-08-14 04:57:39 +00:00
Watermelon914
c2b0d9bf29 More lua harddel fixes (#77556)
## About The Pull Request
Fixes some more lua harddel problems with lingering refs on the gc_guard
variable. This variable has been changed to a list instead and will get
cleared every time the SSlua subsystem fires so that lua instantiated
objects that are not tracked by the subsystem will essentially delete
themselves on the next tick, aka whenever the lua script sleeps.

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

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

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-08-13 14:46:51 -06:00
Jacquerel
497f18ea32 Spiders don't automatically grant an antag datum (#77523)
## About The Pull Request

Fixes #77501

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

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

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

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

## Why It's Good For The Game

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

## Changelog

🆑
fix: Giant Spiders only have an antag datum if created by the round
event.
balance: Flesh spider eggs hatch into adult spiders instead of baby
spiders.
balance: The eggs spawned by the start of the spider infestation event
hatch into adult Midwife spiders instead of baby ones.
/🆑
2023-08-11 20:43:04 -06:00
MrMelbert
c6fe13bf6c Fix antimagic effect never expiring (#77500)
## About The Pull Request

Fixes #77499 

I messed this up resolving merge conflicts. 

## Changelog

🆑 Melbert
fix: Fix antimagic effect not expiring 
/🆑
2023-08-10 20:48:44 -06:00
oranges
3611eec535 Wait for db queries to finish during db shutdown (#77311) 2023-08-05 16:14:00 -06:00
LemonInTheDark
1fed91837c Adds a system for logging metadata about hard deletes (#76956)
## About The Pull Request

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

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

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

I do think it's still useful tho. It's output ingame, in the logs, and
in unit test failures. Hopefully all nicely tho I'm only really 100%
sure about in game.
2023-08-04 14:15:00 -07:00
distributivgesetz
ebbc45b161 Improved PDA Direct Messenger (#75820)
## About The Pull Request

Fixes #76708, Closes #76729 (sorry Zephyr)

This PR expands the Direct Messenger UI, adding a chat screen for each
available messenger that you can find, and moving message sending over
to TGUI.

This chat screen includes a message log that displays messages sent by
you as well as messages received from the recipient. This gets rid of
the previous chat log, which just had all messages thrown together that
you received or have sent, in one big list.

Furthermore, all messaging is now done inside the UI. This kills all
TGUI popups you would ever need to send messages forever (except for
quick replies). Use the input bar on the bottom, press Enter or the Send
button, and it sends your message. Spam mode is now done in the UI too,
via a text field you can find in the contacts list.

Additionally, because I have a habit of blowing things massively out of
scope, I've also completely refactored how messages and chat logs are
stored in the PDA messenger. I plan on using this in a PR that merges
the chat client with the messenger, sometime in the future. Sorry this
took so long.

Stuff left to do before I open this PR for review:
- [x] Add "recent messages"
- [x] Add "unread messages"
- [x] Add message drafts
- [x] Make photo sending not shit
- [x] Implement the edge cases for automated and rigged messages
- [x] Make sure shit isn't fucked
- [x] Profit

<details>
  <summary>Screenshots</summary>
  

![dreamseeker_HIrEfrap5X](https://github.com/tgstation/tgstation/assets/47710522/97c713b7-dda3-44d3-a8f5-d0ec11c92668)

![qIOWhVld4l](https://github.com/tgstation/tgstation/assets/47710522/3ab4e2c1-a38f-4b20-8e9f-509ea14c0434)

![dreamseeker_LIqwi05i4O](https://github.com/tgstation/tgstation/assets/47710522/c051c791-b595-4166-a4d3-82cb7568411f)

![BIYxNVjGL7](https://github.com/tgstation/tgstation/assets/47710522/b9c97eab-52b5-449f-b00f-a0d8aa5f865c)

![dreamseeker_IWdoSsUinC](https://github.com/tgstation/tgstation/assets/47710522/2a4cd76a-2bdc-4283-b642-09e92476fef5)

![L9DxzFHDEF](https://github.com/tgstation/tgstation/assets/47710522/6a5b0e29-d535-4c7e-a88e-e9b71198719b)

![rAuDgqBLNE](https://github.com/tgstation/tgstation/assets/47710522/128a0291-91da-4f9e-9bc5-a65cf411ea6d)

![dreamseeker_voui6S8MUf](https://github.com/tgstation/tgstation/assets/47710522/6e3ba044-b8df-492d-b58d-6c73ab07233d)

![image](https://github.com/tgstation/tgstation/assets/47710522/522c1d85-b9cf-4e0e-9588-9d3993eea03f)

</details>

## Why It's Good For The Game

The UI has largely stayed the same since modular tablets were added a
year ago. Even better, direct messaging has been the same since PDAs
were first added *more than a decade ago*. Imagine that.

Now we finally actually (!) make use of those brand new features that we
got from the TGUI switch in this regard.
## Changelog
🆑 distributivgesetz
add: Updated Direct Messenger to v6.5.3. Now including brand new
individual chat rooms, proper image attachments and a revolutionary
message input field!
add: Added a "Reset Imprint" option to the PDA painter.
refactor: Refactored PDA imprinting code just a bit.
fix: PDAs should now properly respond to rigged messages.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2023-08-03 14:43:31 -07:00
Tim
83e604cbee Add "Hall of Fame" emergency shuttle (#77074)
## About The Pull Request
This adds a new emergency shuttle called the **Hall of Fame**.

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

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

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

## Changelog
🆑
add: Add a new 'Hall of Fame' emergency shuttle. It even comes with it's
own nifty photo album.
/🆑
2023-07-31 18:03:02 -07:00
Watermelon914
69827604c4 Improves the RPG loot wizard event. (#77218)
## About The Pull Request
As the title says. Adds a bunch more stat changes to various different
items and a somewhat simple way of modifying them whilst minimizing
side-effects as much as possible.
Added a new negative curse of polymorph suffix that can randomly
polymorph you once you pick up the item.
Curse of hunger items won't start on items that are not on a turf.
Curse of polymorph will only activate when equipped.

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

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

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

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

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

---------

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2023-07-31 17:09:53 +00:00
Time-Green
a695a79f01 [no gbp] Fixes runtime in SSstation (#77231)
No excuse, just dumb. Random layer is the randomly generated parallax
layer, which is null 30% of the time, so this would runtime in SSstation
setup in 30% of rounds

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

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


![image](https://github.com/tgstation/tgstation/assets/7501474/650242f7-bc33-49eb-98d9-d8e3619ab808)
2023-07-30 23:58:19 -07:00
MrMelbert
298b5d3719 Doubles the time you can get the "Long shift" achievement, makes it not grant on admin restarts (#77195)
## About The Pull Request

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

- Admin restarts no longer give out "Long shift"

## Why It's Good For The Game

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

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

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

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

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

## Changelog

🆑 Melbert
balance: The "Long Shift" achievement is now feasibly obtainable, and
admins can no longer trigger it unknowingly
/🆑
2023-07-29 13:00:16 -06:00
ArcaneMusic
72379e9e8d Arconomy: Balance Update 2023 (#77055)
## About The Pull Request
Hey everyone I've been dead and tired and distracted and wage cage'd and
hopefully you'll see why in the coming weeks but this isn't that PR this
is something slightly different

So! Changes in this Pull Request:

- I've implemented the changes in #76999 but with the commented
suggestion so that now, mechanically, the foreign species modifier is
now considered to be the floor payment amount. This means a functional
buff to human paychecks, but in game it's still represented as a
non-human nerf.

- The inflation mechanic on vending machines has been removed. This
means that vending machines will keep a consistent cost at all times.
Inflation as a mechanic is still utilized for mail, as well as kept on
the SS level in order to ensure that the market crash events still works
properly.
- Market Crash event has been improved, with some new flavor messages
added, as well as using a new formula where inflation increases for the
period of the event along a 5.5*log(time) scale.

- Tweaks have been made to the accounting computer TGUI to better follow
standard conventions and not use a labeledList. It also properly shows
the player facing paycheck modifier as well. It also looks a bit better
now!

## Why It's Good For The Game

Justification for the change on the 90% paycheck modifier change has
been discussed in #76999 already, but going with the more positive spin
angle.

The inflation mechanic in general has rather unintuitive for a number of
reasons, but the biggest one being that the mechanic doesn't really have
any bearing that players in-game can really effect. Especially with
passive paychecks, the only way to work around inflation is to make...
other players spend their money. That's hardly an easy task with a 10
player crew, let alone a 90 player crew. Plus, the outcome is that it...
punishes players for engaging with the economy if done correctly? Point
being it was a decent idea but it doesn't mash with the desired outcomes
of the player economy in it's current state.

Improvements to the accounting TGUI showcase were necessary as a result,
and just look a bit nicer (I will get a screenshot in a moment). There
is still room to potentially look into command staff being able to give
raises/pay-cuts to crew but I'd want to treat that similar to opening up
crew slots, so I'm putting that off for now.

## Changelog

🆑
qol: Improvements to the accounting console in the HOP office.
balance: Non-human species now receive a 90% racial paycut, up from 75%.
balance: The inflation mechanic affecting vending machines has been
removed, except during the market crash event.
balance: The market crash event now stands as it's own separate event,
and ramps up the cost of vendor items until finally popping and
returning to normal. Market crash now lasts longer to have more impact
while it scales with time.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-07-29 15:39:27 +00:00
Time-Green
8f053721a6 Starlight colors with parallax, small parallax code clean-up (#77020)
The space gas parallax now colors starlight in the color of the gas: 


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

<details>
  <summary>Others</summary>
  

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

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

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

</details>

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

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

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

## Why it's good for the game

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