Commit Graph

2995 Commits

Author SHA1 Message Date
Ghom
467c8357b3 Fish mounts for trophy fish. (#88373) 2024-12-26 17:29:57 +01:00
Aylong
2d549e2945 Allow to hide Initialized mesages (#88681)
## About The Pull Request
Adds `Debug` group to initialization messages

## Why It's Good For The Game
You can finally hide those annoying messages, and leave it on special
Logs/Debug tabs

<details><summary>Video</summary>


https://github.com/user-attachments/assets/0b0d5219-d420-4d49-aa90-069961dcdaeb

</details>

## Changelog

🆑
qol: Now you can hide `Initialized some shit within 0s` messages, by
unchecking `Debug Log` checkbox into the chat tabs settings
/🆑
2024-12-26 11:07:07 +01:00
John Willard
2e4d70afe5 Updates href uses for 516 (#88699)
## About The Pull Request

Was just scrolling through the Paradise github since they seem to have
more work done for 516 to see if there's anything I can port over, found
this and thought why not.

Ports parts of https://github.com/ParadiseSS13/Paradise/pull/25105
Specifically, updaing all hrefs to use the internal ``byond://``, and
adding it to grep.

## Why It's Good For The Game

More work towards 516.

## Changelog

Nothing player-facing.
2024-12-24 11:42:20 -08:00
Aylong
7a817300fd Improve and extend fieldset_block and examine_block (#88678)
## About The Pull Request
Maked `fieldset_block` and `examine_block` more stylish and neat, also
`fieldset_block` no longer has a centred title.
Renamed `examine_block` to `boxed_message` and adds
`custom_boxed_message` which can be colored.

- AdminPMs, admin tickets and vote results has been wrapped into
`fieldset_block` for comfort and visibility
- Health Analyzer results painted to blue
- Vote notice and tips of the round wrapped to purple
`custom_boxed_message`
- Tooltip text border color, now uses text color, not just white

## Why It's Good For The Game
Demonstration in both themes

<details><summary>Dark</summary>


![image](https://github.com/user-attachments/assets/7175379b-b053-4fb7-bd25-65c744a21c56)

![image](https://github.com/user-attachments/assets/1728e72b-0110-4b81-9d61-8779f5fdc3a0)

![image](https://github.com/user-attachments/assets/5e6f9604-35b8-4840-b6b4-35a68f49a997)

</details>

<details><summary>Light</summary>


![image](https://github.com/user-attachments/assets/6a3d693b-e0dc-4a4b-b4d7-2ded54ce0d67)

![image](https://github.com/user-attachments/assets/c4f5e089-180f-4d13-806a-fa64f01740a3)

![image](https://github.com/user-attachments/assets/a46d52c4-ad37-4637-8cae-c4b00139efc1)

</details>

## Changelog

🆑
qol: AdminPMs, admin tickets, vote results and started vote notification
are now much more visible in the chat.
qol: Boxed messages in chat (like examine), has been restyled.
/🆑
2024-12-24 11:32:38 -08:00
Roxy
2603a4f3ee Add reboot countdown to stat panel (#88438)
## About The Pull Request

Rewrite ticker `Reboot` proc slightly to use a timer and callback for
the delay before the reboot, tracks this timer in the stat panel for
players to see. Also adds a verb to cancel a pending reboot independent
of the delay round end verb.

## Why It's Good For The Game

It's nice to be able to see exactly how much time is left until the
server restarts, and it's even nicer to see that the round end has been
delayed when the "admin has delayed round end" message gets buried in a
fast moving chat.

## Changelog

🆑
qol: The time until the server reboots is now visible in the status tab.
admin: Added a cancel reboot verb to the server tab.
/🆑
2024-12-22 05:46:09 +01:00
Lucy
7d283d5791 Add a notice to the stat panel for clients on 516 (#88622)
## About The Pull Request

This adds a constant notice to the stat panel for clients on BYOND 516.

![2024-12-20 (1734739281) ~
dreamseeker](https://github.com/user-attachments/assets/af220a22-241d-4456-9b5c-652dc0953be0)

## Why It's Good For The Game

Best to make sure everyone knows that various UIs will likely be
janky/borked on BYOND 516. Hopefully this is hard to miss.
2024-12-21 18:25:21 -06:00
grungussuss
d1e437ee29 You will no longer die of motion sickness from gibtonite on icebox (#88608)
## About The Pull Request
- if an explosion epicenter is not on a station area, then it will not
screen shake all mobs on the z level if it was really far
## Why It's Good For The Game
- why should a bomb from 100 tiles away screenshake the entire z level?
- players have brought up their annoyance with icebox gitbtonite shaking
the entire z level every time one explodes.
## Changelog
🆑 grungussuss
del: screenshake from explosions will no longer happen when it's really
far and not on a station area (turf)
/🆑
2024-12-21 22:19:28 +01:00
SmArtKar
92d224d48f Fourth! Time's the Charm: Actually fixes jetpack race conditions this time around (#88492)
## About The Pull Request

A) Queue time can be null and it'll be valid for hotstarting loops
B) Pushoffs working even when you're moving feels much better
C) Jetpacks were having race issues with drift handlers because those
were also using comsigs which is a remnant of old code back when they
were components. Handlers should fire last, post-comsigs.
D) We should not be hard-blocking jetpack movement when doing final
slowdown step. Like really.

## Why It's Good For The Game

Jetpacks ACTUALLY don't suck this time around.

## Changelog
🆑
qol: Jetpacks should ACTUALLY feel better now
/🆑
2024-12-15 04:49:30 +01:00
LT3
314e8cc4d5 Map vote picks winner out of choices (#88425) 2024-12-10 10:35:19 +01:00
SmArtKar
fabf382ab3 Fixes smokey remains flaky (#88422)
## About The Pull Request

Closes #88363

Smokey remains sometimes triggered instantly upon initializing, which
happens before the smoke SS is set up - thus runtiming due to attempting
to add newly created smoke to a non-existing carousel. Solved by moving
fluid SS init above atoms, god knows this'll probably happen more down
the line.

## Changelog
🆑
/🆑
2024-12-09 15:27:59 +01:00
Tim
189616ae2c Add better logging for ruins (#88403)
## About The Pull Request
~~This adds a new test for the CI/CD so that we can load all space ruins
instead of it being RNG.~~
Adds more robust logging for ruins so we can see when they fail/succeed
and how many are placed on a map.

This also removes a deprecated CI config setting. It prevented ALL ruins
from spawning during CI tests which is bad.

The config setting was made redundant in:
- #87910

## Why It's Good For The Game
More robust CI/CD.

## Changelog
🆑
code: Add better logging for ruins
/🆑
2024-12-08 15:11:09 +00:00
SmArtKar
f317c5796b [NO GBP] Hotfix for CI flaky due to the spacemove fix (#88408)
## About The Pull Request

We don't check if the loop is actually queued as we attempt to remove,
fire and queue it, which makes our loop potentially run in parallel with
a higher priority loop, which (for some reason specifically on during
engiborg tests and specifically on wawa) was causing a flaky CI failure.

Closes #88400

## Changelog
🆑
/🆑
2024-12-08 15:48:55 +01:00
SmArtKar
f58ebf1a6e Third Time's the Spessman: Solves jetpack struggles once and for all (#88317)
## About The Pull Request

This PR improves our jetpacks in 2 major ways: partially decoupling them
and intentional space movement from SSnewphys, and implementing
consistent pushoff speeds.

Currently jetpacks work by applying constant newtonian force whenever an
input key is held down by a client and stabilizing the movement every
time they get processed by SSnewphys which is an SS_TICKER subsystem,
which means that it attempts to fire prior to everything else and has a
wait of a single tick. This would be fine if we could guarantee that
there isn't another SS_TICKER subsystem with a higher priority that
constantly overtimes... oh right, that'd be the most important subsystem
of SSinput.

Newtonian impulses, both when starting a drift and when applying
continious force rely on SSnewphys to fire the loop, which can end up
not happening due to overtime in input (and is a frequent issue on
highpop). To circumvent this, newtonian impulses now forcefully fire
their drift loop regardless of SSnewphys, thus ensuring that the
movement always happens in the tick it was called (If you ask something
to move with an ``instant`` flag you'd expect it to move the same tick).

Second issue stems from the fact that jetpacks try to move you at your
movement speed, except when pushing you off objects they hijack normal
movement code that would've ran, resulting in a single tile of slow,
janky movement (Or, when moving along walls, making the controls feel
"sticky" and worse than what you'd have without a jetpack in the first
place). By forcefully applying enough force to make players move at
expected speeds, we can solve that issue.

Third issue stems from a minor mistake in SSnewphys processing order -
process() on jetpacks ran **after** moveloops have fired, so all
stabilization only applied next tick. I swapped fire orders around which
solves this problem too, although it won't be triggering much as
stabilization would now forcefully fire the related loop by itself.


https://github.com/user-attachments/assets/1068f68b-2cd1-49b0-bff0-1f79ed0aed5a

Also I've refactored wings to be jetpacks since they behave exactly the
same, which is a bit cursed if you think about it.

## Why It's Good For The Game

Jetpack movement is highly inconsistent in speed/smoothness, janky and
gets ruined by even a slightest amount of overtime in subsystems above
it - this should solve all of those issues.

## Changelog
🆑
qol: Jetpacks are significantly smoother and nicer to use now - and not
affected by lag anymore!
code: Cleaned up spacemove/jetpack code a bit and moved some common code
to helpers.
refactor: Wings are now... jetpacks. They behave exactly the same and
this should reduce the amount of copypaste code in spacemove
significantly.
/🆑
2024-12-07 00:15:36 +01:00
Ghom
63bcfdcc00 [NO GBP] Fixing fishing lures (#88296) 2024-12-01 11:55:12 +01:00
Ghom
1dff5f6de3 Aquariums are now potential fishing spots. (#88243)
## About The Pull Request
You can now fish from aquariums if you wish to. This includes some
backend changes to make it possible for the fish table from
get_fish_table() to contain instances, and all that it entails up to
spawn_reward(), which is a requirement for the gimmick to respect the
various traits and other variables of the already instantiated fish
rather than read from cached properties.

## Why It's Good For The Game
The fish progress score/index had only little nasty flaw that has been
nagging me since day one: Not all fish species can be caught. Skipping
McGill, which is a peculiar case that for cheevo purposes should be
considered a standard goldfish, there is the one, unsignificant yet rare
purple sludgefish which can only be gotten as a rare evolution of the
generic sludgefish. Talk about petty, but this may be a long-term nit I
prefer to handle right now.

Also why not? The 'unmarine mastodon' is near impossible to get unless
you somehow find a oil well which is locked behind a specific ruin.

## Changelog

🆑
fix: Aquariums are now potential fishing spots.
/🆑
2024-11-29 03:33:18 +00:00
Lucy
a17ad68508 Fix double-encode in AI shuttle call reasons (#88245)
## About The Pull Request

This fixes double html encoding with AI shuttle calls, due to
`tgui_input_text` being called without setting `encode = FALSE` -
`SSshuttle.requestEvac` expects unencoded text.

I added documentation to `SSshuttle.requestEvac`, including clarifying
that it expects non-html-encoded text.

## Why It's Good For The Game

&​#​39;​ is annoying

## Changelog
🆑
fix: Fixed double-encoded messages with AI shuttle call reasons.
/🆑
2024-11-29 04:28:46 +01:00
MrMelbert
75696ab873 Fixes random stuff spilling into ooc tab (#88221)
## About The Pull Request

`boldannounce` is NOT for use ICly it's only for OOC stuff. `bolddanger`
is identical it just doesn't carry the same baggage

## Changelog

🆑 Melbert
fix: Stuff like the SM exploding will no longer output to your OOC tab
/🆑
2024-11-27 17:41:52 +01:00
Lucy
d04d513d55 Replace caller args in pathfinding code with requester (#88084)
## About The Pull Request

Somewhat of a port of
https://github.com/ParadiseSS13/Paradise/pull/26401, albeit re-done from
scratch (with the power of find and replace)

Caller is a protected/reserved var in 516. We use it a lot. It's used in
more places than this, but I'm a perfectionist and can't think of better
names for most of the other uses (mostly mob AI, holocall, and
`InterceptClickOn` related), so I'm just doing pathfinding for now.

## Why It's Good For The Game

Prep for compiling on 516

## Changelog

No user-facing changes - this is merely renaming vars.
2024-11-25 00:03:54 +01:00
SmArtKar
bbb7a41743 Guncode Agony 4: The Great Projectile Purge (#87740)
## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.

### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.

<details>

<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>


Before:


https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e

After:


https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915

</details>


<details>

<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>


Before:


https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348

After:


https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238

</details>

### But how will this affect the ~~trout population~~ gameplay?

Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.

This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.

Closes #71822
Closes #78547
Closes #78871
Closes #83901
Closes #87802
Closes #88073

## Why It's Good For The Game

Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.

Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.

## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
2024-11-23 04:02:35 -08:00
Penelope Haze
b67a0901f2 Fix issues discovered via TypeMaker (#87596)
## About The Pull Request
Fixes issues with var typing and proc arguments, discovered using
OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd
upstream yet).

## Why It's Good For The Game
Codebase maintenance.
2024-11-19 15:24:52 -05:00
FinancialGoose
795f93622e Add ignition sound and roaring fire to atmos fire (#84280)
## About The Pull Request
Add ignition sound to whenever a hotspot is created and add a grouping
system for hotspot to play a sound at its "center"
Drafting for now for review
## Why It's Good For The Game
For such an engaging part of our simulation it really does lack sound

Fire ignition sound


https://github.com/user-attachments/assets/52433d82-8ee7-4a80-9a3b-51977cbfeeb8

Roaring fire sound


https://github.com/user-attachments/assets/3967aaa3-60a1-4c0e-8bed-ab7b08b848f4




## Todo List
- [ ] Add support for hot group splitting for when rooms are split 
- [x] Chop up the original roaring fire sound file for better sound
looping
## Changelog
🆑
sound: added ignition and roaring fire sound to plasma/tritium fire
/🆑

---------

Co-authored-by: Afevis <ShizCalev@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2024-11-17 05:11:23 +01:00
Lucy
6046120e5f Updating player last seen info and connection log no longer blocks (#87906)
## About The Pull Request

Was investigating some stuff downstream related to undeleted SQL
queries, and these two queries were related.

thought it'd be best to make them not block
`/client/proc/set_client_age_from_db`, as the results are never checked
anyways, not even for errors.

I've added a new proc to SSdbcore, `FireAndForget` - takes the same
parameters as NewQuery, but instead of returning the query, it just
asynchronously executes and then deletes it.

## Why It's Good For The Game

less undeleted sql queries, less blocking. yay?

## Changelog

does this count as user-facing? unsure how i'd changelog this tbh
2024-11-15 23:49:13 +01:00
Lucy
9592b333e2 byond-tracy additions and refactors (#87067)
## About The Pull Request

This adds plenty of useful stuff regarding byond-tracy, altho mostly
focused on the [Paradise
fork](https://github.com/ParadiseSS13/byond-tracy).

- Adds two new config options **(THEY ARE DISABLED BY DEFAULT)**
- `ALLOW_TRACY_START` gives admins with +DEBUG the "Run Tracy Now" verb,
which will allow them to start profiling with byond-tracy mid-round.
- `ALLOW_TRACY_QUEUE` gives admins with +DEBUG the "Toggle Tracy Next
Round" verb, which will initialize byond-tracy during world init the
next round (in the same way as passing `-params tracy` or defining
`USE_BYOND_TRACY`)
- If byond-tracy fails to initialize, the error will be logged and
available to view for the whole round.
- If `MC_TAB_TRACY_INFO` is defined, information about byond-tracy now
appears in the MC tab - if it's running or not, if it errored (and what
the error is), why it's running, if its queued for next round, etc.
- byond-tracy is now properly shut down when the world shuts
down/reboots, minimizing the risk of data loss or crashing
- More info regarding byond-tracy init is sent to `world.log`

## Why It's Good For The Game

Profiling is super helpful, and this should make things quite easier

## Changelog

No user-facing changes
2024-11-15 09:04:32 +01:00
Lucy
b8013f5e76 Rebuild plane masters after client login if switching between 515 and 516 (#87889)
## About The Pull Request

This makes `/datum/player_details` properly track BYOND version and
build separately, as opposed to just the full version string.

Whenever a client logs in, and their BYOND version is 516, while their
previous version was 515, or vice versa, it'll set a newly added client
var, `rebuild_plane_masters`, to TRUE.

During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD
(`/datum/hud/proc/client_refresh`), it will check to see if
`rebuild_plane_masters` is TRUE - if so, it will set the appropriate
`relay_loc` of (based on client BYOND version) of its plane master
groups, and rebuild their plane masters.

## Why It's Good For The Game

Makes testing stuff across 515 and 516 easier, as your screen won't
break when switching between the two.

## Changelog

516 is _still_ in private alpha, so no user-facing changes.
2024-11-14 19:50:35 +01:00
carlarctg
c7c48ba59a spellecheck: existence not existance (#87862)
## About The Pull Request

existance doesnt exist so i changed it to existence

## Why It's Good For The Game

existance dosent exist

## Changelog

🆑
spellcheck: spellecheck: existence not existance
/🆑
2024-11-14 01:28:31 +01:00
MrMelbert
239797a4ee Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)
## About The Pull Request

1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are
2024-11-12 17:24:27 +01:00
harryob
30345725d2 fixes some dynamic rulesets purging their candidate pools (#87760)
## About The Pull Request
autotator, malf and blob's candidates would all get wiped out by this,
as `can_roll_midround()` returns TRUE if they can roll midround

## Why It's Good For The Game
seems like we want candidates in these roles, given the game is trying
to get some

## Changelog
🆑
fix: dynamic rulesets can get candidates for their roles
/🆑
fixes #87535
2024-11-09 16:57:45 +01:00
tonty
d5daa9c9b8 [NO GBP] Renames mob/camera to mob/eye and makes everything follow suit (#87684)
## Why It's Good For The Game

Clarity and consistency regarding DM's systems. 
Internally, `eye` is used for anything that controls the client's view.

![image](https://github.com/user-attachments/assets/7d1291e1-7a6a-4736-a14b-97834e89846f)
How `eye` is used in DM is consistent with how we use the term, so I
figured this would add clarity.

Being named mob/camera also makes it unclear exactly what it's doing.
The name implies that it would function similar to how mob/camera/ai_eye
does, but most of the time it's only used as... an eye.

My ulterior reason for this PR is that I want to clean up
mob/camera/ai_eye and it's subtypes after this.
## Changelog

🆑
server: mob/camera has been renamed to mob/eye, which may break
downstreams
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-11-09 10:57:45 +00:00
BluBerry016
437145131e Makes #87029 Opt-Out (#87714)
## About The Pull Request
Adds a new boolean that lets you opt out of automatically linking
zlevels in `LoadGroup()` (as implemented in
https://github.com/tgstation/tgstation/pull/87029); and forwards that
support to map jsons. Does ***not*** change any /tg/ map jsons in the
process; as they all still work as intended.

A modified Icebox JSON loading correctly:

![image](https://github.com/user-attachments/assets/5f7a731d-3d4a-461f-9d86-04e1bf162885)

### How do I disable automatic z-level linking?
Add the following to your json; under planetary:
```	"height_autosetup": 0, ```

For each z-level's trait; you can then add either `"Up": true` or  `"Down": true` to link them manually, as you would've prior to #87029 .
## Why It's Good For The Game
tl;dr, map experimentation. It was prior possible to have station segments separated by z-level that weren't vertically linked; which was put to practice most prominently on Nova Sector, of all places, - but #87029 made it automatically assume that they should be linked in that manner.

This middleground keeps the new assumption while preserving the old manual process for any mapping projects that need it.
## Changelog
🆑
code: Mappers can now opt out of automatically linking their up/down station traits.
/🆑
2024-11-08 03:23:42 +01:00
Contrabang
8e8591c34e Removes S (#87687)
## About The Pull Request
Removes S

## Why It's Good For The Game
Removes S

## Changelog
🆑
code: Removes S
/🆑
2024-11-05 14:08:22 +13:00
Ghom
e6253c7812 Adds a score for all species of fish that you've caught. (#86049)
## About The Pull Request
I'm adding a score that tracks which types of fish you've caught across
multiple rounds. To do so, I had to add a new score subtype that manages
the score value not being a number. Thankfully the achievement code is
fairly flexible so not a whole lot had to be done, although I've to add
a new column to the achievements table in the DB, because the 'value' is
for integers, while we need one for text strings ~~(the contents of the
list are converted to text with a delimiter before being saved cuz I'm
not sure if and how our DM slash SQL integration handles using lists
directly and I don't want to waste time finding it out)~~.

EDIT: It's mostly done beside the reviews that are going to point out
things that need to be changed. The UI changes are done. It's time for
reviews.

Here are screenshots of the UI with all fish still uncatched beside one
(I've since then the typo on its name and removed an extra zero from the
index number, as well as a nit with the spacing between cells):

![immagine](https://github.com/user-attachments/assets/a1dcfeb6-6d26-461e-aaa1-97c619f5cbfa)

![immagine](https://github.com/user-attachments/assets/768f6621-c992-4932-9bca-979dd1e43d6f)


## Why It's Good For The Game
We have about dozens over dozens of different fish in the game now, many
of which are just fluff anyway. It's getting to the point it's perhaps
doable to add a score or something to be a braggard about.

## Changelog
🆑
add: Added a new score that keeps track of all different fish that
you've caught between shifts.
server: Added a new schema table to store the aforementioned entries and
the ckeys associated to them, with an additional timestamp column.
/🆑
2024-11-04 13:48:25 -08:00
grungussuss
d09316667a Sound mixer attempt 2 (#87529)
## About The Pull Request

![image](https://github.com/user-attachments/assets/131caab0-5495-4f28-b9e0-46ce4ebc7b40)
## Why It's Good For The Game
gives players more control over how loud they want certain sounds to be
## Changelog
🆑 grungussuss
sound: the volume that ship ambience, ambience, radio noise and
announcements play at can now be tweaked in preferences, check your
preferences!
/🆑
2024-11-05 09:13:38 +13:00
Roxy
413207b9c2 Refactor gene combination recipes to not use strings (#87629)
## About The Pull Request
Rewrite `/datum/generecipe` to have two variables, `input_one` and
`input_two` that hold the type path of the ingredients for the recipe,
instead of it being a semicolon-separated string.

## Why It's Good For The Game

Better code, will catch invalid type paths in recipes at compile-time.

## Changelog

No player-facing changes
2024-11-03 14:40:42 +01:00
13spacemen
43cc12c1e3 Let alert polls function after roundend (#87578)
Fixes #86331 
Fixes #87060 

## Why It's Good For The Game

Admins keep trying to spawn stuff postgame and it doesnt work

## Changelog
🆑
fix: alert polls work past roundend
/🆑
2024-11-01 13:50:56 +01:00
Jerry
314217b5cf Separate forced injection between latejoin and midround (#87557)
## About The Pull Request

Fixes an issue mentioned in
https://github.com/tgstation/tgstation/issues/72526, where pressing
"Now!" in the game panel for injecting a latejoin, caused midround one
to occur as well. This was because the same boolean was used for forcing
both, which caused both to happen.

* Closes https://github.com/tgstation/tgstation/issues/72526
## Why It's Good For The Game

Improves admin tools by fixing a bug.
## Changelog
🆑
admin: doing a latejoin injection no longer causes a midround one as
well
/🆑
2024-11-01 13:47:06 +01:00
Ghom
778ed9f1ab The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.

This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).

And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.

## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.

Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.

Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

![immagine](https://github.com/user-attachments/assets/2bb625c9-9233-42eb-b9b8-e0bd6909ce89)

## Changelog

🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
2024-10-30 08:03:02 +01:00
LemonInTheDark
7f5d9d7e09 Tick checks unplanned controllers (#87506)
Shakes fist at random overtime
2024-10-30 09:48:27 +13:00
Time-Green
d170a410d4 Recovered Crew | Medical+Cargo Respawns (#87072)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2024-10-26 09:36:57 +02:00
grungussuss
95d1940ee1 ghosts don't get ambience cut off when changing areas (#87407)
## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/85568
## Changelog
🆑 grungussuss
sound: ambience no longer gets cut off for ghosts
/🆑
2024-10-24 14:50:49 +02:00
SmArtKar
c2d2b4f6b7 Fixes a large amount of bugs caused by ghost polling returning empty lists instead of null (#87291)
## About The Pull Request

Closes #86760

## Changelog
🆑
fix: Ghost polling/events no longer runtime or freak out when nobody
signs up for them
/🆑
2024-10-20 12:12:46 +03:00
SmArtKar
df00d85356 Eye wounds, scars and a new ~Pirate~ RP quirk (#87209)
## About The Pull Request

Upon getting stabbed in your eyes or having a bullet fly through your
head there's a chance (minor for stabbing, extremely low for headshots)
you'll receive a new "Eye Puncture" wound which causes profuse bleeding
out of your now-empty eye hole. Once healed you'll have to deal with a
scar on your eye which cannot be cured and requires surgical
replacement. Eye scarring will reduce your eyes' max health by 15, give
you a minor screen tint and a fancy visual on your character sprite.
Getting scarring on both eyes will turn you completely blind.


![image](https://github.com/user-attachments/assets/c1ae4ff3-6844-405d-819b-9c390511e321)

This PR also introduces a new quirk which gives you eye scarring on the
eye of your choice and an eyepatch to go alongside it, just make sure
that it sits on the right eye.

Also added medical(white) subtype of eyepatches to loadout for those who
want that version instead. Credits to AnturK on discord for the idea.

## Why It's Good For The Game

Its a neat lil' feature that makes the game more immersive, and unlocks
more roleplay opportunities for players. New quirk gives access to this
feature for players who want to make it a part of their character's
backstory (or maybe as a part of permanent scar roleplaying).

## Changelog
🆑
add: Getting stabbed or shot in the eyes has a chance of giving you a
new wound and a semi-permanent scar, blinding you on one side
add: Added new "Scarred Eye" quirk which blinds you on one eye but gives
you a fancy eyepatch
add: Medical eyepatches have been added to loadout
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2024-10-19 13:39:19 +02:00
jimmyl
6b77ce5416 moves the movement subsystem off background (#87247)
## About The Pull Request

movement subsystem now has the SS_BACKGROUND flag removed
excuse me if this isnt any correct like i know daedalus did this for
some reason at best

## Why It's Good For The Game

(stuff controlled by) movement ss is not actually THAT costly (compared
to Throwing)
![2024-10-15 22_07_17-Boss' Fat Camp
82](https://github.com/user-attachments/assets/0b0ffe3f-5703-4e32-87a7-4d84cc0979f3)
(when i nuked metastation on local)
and i think being able to move when you slip on oil or whatever eg
jetpacks during lotsa lag is pretty important
this does not actually make it immune to lag it just seems to mitigate
the issue by a slight margin


## Changelog
🆑
code: Movement Subsystem no longer is a background subsystem. This means
that you should no longer get stuck after slipping on oil during
instances of high usage.
/🆑
2024-10-16 23:12:53 -04:00
DATA
a6ce2bd30a [NO GBP] Fixes server hop fade out (#87170)
## About The Pull Request

Turns out that if you don't test if you fix works, it probably won't!
I've actually managed to test this one, and even though it gave me a
handshake error when joining the other server, at least the fade in
worked! The fadeout is set up in the same way, so it should be fine

## Why It's Good For The Game

ACTUALLY fixes #29496

## Changelog

🆑
fix: ACTUALLY fixes server hop fade in
/🆑
2024-10-15 19:46:25 +00:00
Zephyr
779958e2f5 map votes are now simple, and tell you what the effective tallies were (#87218)
🆑
qol: map votes are now winner take all instead of weighted.
/🆑
2024-10-15 10:34:50 +13:00
Ghom
96c0c0b12c Fish infusion (#87030)
## About The Pull Request
I'm adding a new infusion ~~(actually four, but two of them are just
holders for specific organs tied to a couple fish traits)~~ to the game.
As the title says, it's about fish.

The infusion is composed of three primary organs, plus another few that
can be gotten from fish with specific traits.

The primary organs are:
- Gills (lungs): Instead of breathing oxygen, you now need to stay wet
or breathe water vapor.
- fish-DNA infused stomach: Can safely eat raw fish.
- fish tail: On its own, it only speeds you up on water turfs, but it
has another effect once past the organ set threshold. It also makes you
waddle and flop like a fish while crawling (I still gotta finish sprites
on this one)

Other organs are:
- semi-aquatic lungs: A subtype of gills from fish with the 'amphibious'
trait, falls back on oxygen if there's no water. Can also be gotten from
frogs, axolotl and crabs.
- fish-DNA infused liver: From fish with the 'toxic' trait. Uses
tetrodotoxin as a healing chem instead of a toxin. Also better tolerance
to alcohol if you want to drink like a fish (ba dum tsh).
- inky tongue: From fish with the 'ink production' trait. Gives mobs the
ability to spit ink on a cooldown, blinding and confusion foes
temporarily.

The main gimmick of this infusion revolves around being drenched in
water to benefit from it, In the case you get the gills organ, this also
becomes a necessity, to not suffocate to death (alternatively, you can
breathe water vapor, without any benefit). To enable the bonus of the
organs set, three organs need to be infused. They can be gills, stomach,
tail and/or liver, while the inky tongue doesn't count towards it.

Once the threshold is reached, the following bonus are enabled:
- Wetness decays a lot slower and resists fire a bit more.
- Ink spit becomes stronger, allowing it to very briefly knock down
foes.
- Fishing bonuses and experience
- Resistance to high pressures
- Slightly expanded FOV
- drinking water and showers mildly heal you over time.
- for felinids: You won't hate getting sprayed by water or taking a
shower.
- While wet:
- - If the fish tail is implanted, crawling speed is boosted.
- - You no longer slip on wet tiles.
- - You also become slippery when lying on the floor.
- - You get a very mild damage resistance and passive stamina
regeneration, and cool down faster.
- - You resist grabs better.
- - get a very weak positive moodlet.
- However, being dry will make you quite squisher, especially against
fire damage, slower and give you a modest negative moodlet.

While working on it, I've also noticed a few things that explained why
tetrodotoxin (TTX) did jackshit at low doses, because livers have a set
toxin tolerance value, below which, any amount of toxin does nothing.
Also I've felt like reagents like multiver & co were a bit too strong
against a reagent that's supposed to work at very low doses, with slow
metabolization, so I've added a couple variables to buff TTX a bit,
making it harder to purge and resistant to liver toxin tolerance (also
added a bit of lungs damage).



## Why It's Good For The Game
I wanted to take a shot at coding a DNA infusion and see how chock-full
I could make it. DNA infusions are like a middle point between "aha,
small visual trinket" and organs with generally ok effects. I seek to
make something a bit more complex ~~(also tied to fishing ofc because
that's more or less the recurrent gag of my recent features)~~ primaly
focused around the unique theme of being strong when wet and weaker when
dry.

EDIT: The PR is now ready, have a set of screenshots of the (fairly mid)
fish tails (and gills, barely visible) on randomly generated spessman
and one consistent joe:

![immagine](https://github.com/user-attachments/assets/a4965508-22e2-4d3a-8523-29fec6bce91e)


## Changelog

🆑
add: Added a new infusion to the game: Fish. Its main gimmick revolves
around being stronger and slippery when wet while weaker when dry.
balance: Buffed tetrodotoxin a little against liver tolerance and
purging reagents.
/🆑
2024-10-09 02:03:50 +02:00
LemonInTheDark
91d9827e07 AI Controller MC Yielding (#87094)
## About The Pull Request

AI controllers do not respect their tick limits, behaving as if they
need to process all controllers in one tick.

This means every time the idle subsystem runs we process 500 controllers
at once. This is bad, and induces overtime for free, which sucks.

I can't think of a reason we would need to do all this work at once.
2024-10-08 23:15:56 +02:00
necromanceranne
834f983f3a Adds the Fundamentally Evil quirk. Interactions with Empathy and Honorbound. (#87045)
## About The Pull Request

Adds the Fundamentally Evil quirk. The quirk does nothing in of itself.

If an Empath examines you, they will be shaken up by the fact that you
are totally evil.

Mindreaders can literally see that you're evil. If they're ALSO evil, it
gives a gives a unique message.

Honorbound chaplains can freely attack you without first declaring you
evil. You are already evil. There is no outward tells for this fact, but
if the chaplain pays attention to the medical records, you might have a
problem on your hands.

You are significantly harmed by holy water and holy explosions. So don't
drink holy water if you can help it.

## Why It's Good For The Game

I just think it'd be funny to have some crew, for whatever reason, be
fully committed to being evil for no reason other than it is funny to
bother empaths.

I want a chaplain to come to the realization that I'm evil and see what
happens.

## Changelog
🆑
add: Fundamentally Evil quirk. You might act normal, but you know deep
down that you totally don't give a shit about anyone but yourself.
Empaths better watch out.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
2024-10-08 07:27:13 +02:00
Ghom
cdebe98a17 refactoring how materials effects are added to atoms (#86901)
## About The Pull Request
I'm "cooking" the materials system a bit, specifically the code
responsible for applying and removing effects. My goal is to move most
of the code to the objects-side, split it in smaller procs that can be
more easily overriden or called for object-specific modifiers and
effects, while also revamping things all around to better support items
made from multiple materials (the cleric mace will most likely be one in
this PR, with the handle and tip made of different materials).

PR NO LONGER WIP, TESTED AND ALL, CLERIC MACES CAN NOW BE MADE OF TWO
MATERIALS.

## Why It's Good For The Game
One of the nastiest flaws with the materials system is that it's just
unfeasable to have items made of multiple mats (with effects enabled)
right now, as they easily tend to override each other, where some of the
modifiers and effects should only be applied the main material.

Beside, the system's starting to show signs of its time, from the
several type checks used to apply different effects, the one letter
variables to the the material flags that are still being passed down as
arguments when you can access them from the atom/source arg anyway. It
would be disonhest of me if I went ahead and coded material fishing rods
or whatever fish fuckery with materials without ensuring it won't
further the technical debt the feature currently has.

## Changelog
🆑
refactor: Refactored materials code. report any issue.
add: Cleric maces (The autolathe-printable weapon design from outer
space) can now be made of two different materials.
balance: Buffed cleric maces a little.
fix: toolboxes' stats are now affected by materials again.
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2024-10-06 21:56:20 +02:00
Ilán Mori
2f4db9bb65 Adds more extensive config settings for human authority (#86886)
## About The Pull Request
Before there were two settings for human authority:
`ENFORCE_HUMAN_AUTHORITY` and `ENFORCE_HUMAN_AUTHORITY_ON_EVERYONE`
The first, if enabled, would not let non-humans be heads of staff unless
they had a specific var on their job set to TRUE.
The second, if enabled, would simply ignore that var and reject the
non-human anyways.

This PR replaces both of those settings with a single one,
`HUMAN_AUTHORITY`. You can set it to one of four settings:
* "OFF": human authority will be turned OFF. Non-Humans will be able to
be heads of staff.
* "HUMAN WHITELIST": human authority will be turned OFF, HOWEVER; if a
job has its new `human_authority` variable set to
`JOB_AUTHORITY_HUMANS_ONLY`, then whoever picks that job will be forced
to be human.
* "NON-HUMAN WHITELIST": human authority will be turned ON. However, if
a job has its `human_authority` variable set to
`JOB_AUTHORITY_NON_HUMANS_ALLOWED`, a non-human can become that job.
This is what we have now, it works the same as if
`ENFORCE_HUMAN_AUTHORITY` were turned on. This is also what I've set as
the default value.
* "ENFORCED" human authority will be turned ON. Non-Humans will never be
able to be heads of staff. This is what
`ENFORCE_HUMAN_AUTHORITY_ON_EVERYONE` used to do.

You can also now set the `human_authority` variable through
`jobconfig.toml`!

## Why It's Good For The Game

Allows more configuration options for downstreams, and lets keyholders
and headmins have more options over how to set up human authority.

## Changelog
🆑
config: Both human authority settings were combined into a singular one,
allowing for more flexibility
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-10-06 17:48:39 +00:00
grungussuss
8acdb0f581 fixes syndicate AI roleban and spawning new core without client (#87049)
## About The Pull Request
`SSpolling.poll_ghosts_for_target` returns a 0 length list when no
candidates are chosen so it will spawn an AI core without a client, so
instead of `if(isnull(ghost)` we do `if(!ismob(ghost))`.
closes https://github.com/tgstation/tgstation/issues/86976

## Changelog
🆑 grungussuss
fix: fixed a clientless AI spawning when a ghost poll for syndicate
modsuit AI had no volunteers
admin: AI rolebanned players can no longer role for Syndicate modsuit AI
/🆑
2024-10-06 17:26:20 +02:00