* Fix lack of to_chat_immediate in client code that disconnects clients. (#73575)
these clients are about to be disconnected, they can't wait for the mc
to tick next
* Fix lack of to_chat_immediate in client code that disconnects clients.
---------
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
* Adds a config option for warning clients about older builds (not just older versions) (#73549)
## About The Pull Request
MSO was being tsundere about this and it seemed useful, so here we go
## Changelog
🆑
config: Added a warning build config setting, you can now lightly
repremand but not block clients with older builds but fine major
versions
/🆑
* Adds a config option for warning clients about older builds (not just older versions)
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Reworked PDA menu & NtOS themes (#73070)
## About The Pull Request
This is a port/rework of
https://github.com/yogstation13/Yogstation/pull/15735 - I changed a lot
of how it acted (some themes are locked behind maintenance apps).
The original author allowed this port to happen, and I really liked how
it looked there so I'd like to add it here.
### Applications
Removes the hardware configurator application, as all it did was show
you your space and battery now that all hardware was removed. These are
things your PC does by default, so it was just a waste of space.
Adds a Theme manager application instead, which allows you to change
your PDA's theme at will.
Adds a new Maintenance application that will give a new theme, however
it will also increase the size of the theme manager app itself as it's
bloatware.
### Menu
There's now a bar at the top of the menu showing 'special' tablet apps
which, for one reason or another, should stand out from the rest of the
apps. Currently this is PDA messenger and the Theme manager
Flashlight and Flashlight color is now only an icon, and is shown on the
same line as Updating you ID
https://cdn.discordapp.com/attachments/961874788706574386/1069621173693972551/2023-01-30_09-10-52.mov

### Themes
Adds a lot of themes to choose from, although SOME are hidden behind
Maintenance applications, which will give you a random theme. These are
bloatware however, so they come with some extra cost to the app's
required space storage.
Themes are now supported on ALL APPLICATIONS! If you have a computer
theme, you will have that theme in EVERY app you enter, rather than just
a select few.
ALSO also, emagging the tablet will automatically set & unlock the
Syndicate theme, which makes your PDA obvious but you can disguise it if
you wish through just re-painting it to something else.
https://cdn.discordapp.com/attachments/828923843829432340/1069565383155122266/2023-01-30_05-29-53.mov
### Preferences
This also adds a pref for theme, reworking the ringtone code to work
with it as well. I also removed 2 entirely unused PDA prefs just 'cause.
Screenshot not up-to-date, they now have proper names.

### Other stuff
Made defines for device_themes
Added support for special app-side checks to download files
Fixed programs downloading themselves TWICE because defines all had the
same definition
Removes the Chemistry computer disk as it was empty due to chemistry
app's removal
Removes the 'run_emag' proc, since apps can directly refer to the
computer to check for emag status instead.
Moved over and added better documentation on data computer files, and
moved the ordnance ones to the same file as the others.
## Why It's Good For The Game
It makes PDAs a lot more customizable while adding more features to
maintenance applications. I think the themes look cool and it fits with
PDAs being "personal" anyways.
I also explained most of my other arguments in the about section, such
as the hardware configuration application.
## Changelog
🆑 Chubbygummibear & JohnFulpWillard
add: A ton of new NtOS themes, which are accessible by the new Themify
application that comes with all PCs.
add: Emagging a PC now defaults it to the Syndicate option (and adds it
to go back to it if you wish)
add: There's a new maintenance app that gives you rarer themes
qol: The NtOS Main menu was moved around, added "header" applications
that are shown where the Flashlight is, such as your Theme manager and
PDA messenger.
code: Made defines for device_themes
code: Added support for special app-side checks to download files
code: Removes the 'run_emag' proc, since apps can directly refer to the
computer to check for emag status instead.
fix: Programs no longer download twice.
del: Removes the Chemistry computer disk as it was empty due to
chemistry app's removal
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Reworked PDA menu & NtOS themes
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* literally just hook asay into tgui say (#73212)
## About The Pull Request
pressing f3 now opens asay in tgui say
## Why It's Good For The Game

also fixes double-escaped special characters caused by #72407 and
finally gets rid of the gross regular tgui input popup
## Changelog
🆑
fix: asays are no longer double-escaped
admin: asay now uses tgui say
/🆑
---------
Co-authored-by: Scriptis <scriptis@ duck.com>
* literally just hook asay into tgui say
---------
Co-authored-by: scriptis <scriptif@gmail.com>
Co-authored-by: Scriptis <scriptis@ duck.com>
* Quirks are passed an incoming client when applied, allowing quirks to read preferences in `add` and `add_unique`. Renders visual quirks on the preference menu dummy.
* fixes quirk order to match upstream
* Modular quirk updates
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
Admin alert for communications console messages (#72412)
Adds an audio alert when a CentCom or Syndicate communications console
message is sent, for things such as ERT requests.
It is optional and can be toggled in the Game Preferences menu.
Also fixes an incorrect line in the prefs readme.md
Less missing CentCom messages because you're busy doing other things,
less complaining that you're ignoring them.
* Refactors bar drink icons into datum singletons / unit tests them (#71810)
- Refactors bar drink icons.
- Juice boxes no longer have a hard-coded list of a bunch of reagent
types in their update state, and use a system similar to bar drinks.
- Glass and shot glass icon information are no longer stored on the
drink. Instead, they are now stored in glass style datums. These datums
store name, description, icon, and icon state of a certain container +
reagent type.
- Glass styles are applied via the `takes_reagent_appearance` component.
Glasses, shot glasses, and juice boxes have this component.
- This comes with support for being able to have drink icons from
different files, rather than requiring the drinks DMI.
- The britmug is now a subtype of mug.
- 1 new icon: britmug filled.
- Various small code clean-up around drink reagents.
- Unit tests icon state setups for glass styles as well as all `/drink`
reagent container subtypes.
- Splits up the massive `drinks.dmi` into separate files.
*Disclaimer: Much of the drinking glass datums were written via script
automatically, so there may be errors present.*
- Much easier to add new drink styles, much more modular.
- It is no longer necessary for new drinks to be added to the massive
`drinks.dmi`. People working with drinks in the future can simply add
their glass style datum and point it to their file wherever it may be.
- Expandable system. Adding a new type of reagent container that works
similarly to bar drinks but for different types of icons is a breeze.
- Ensures going forward no bar drinks have invisible sprites.
🆑 Melbert
refactor: Refactored how bar drinks set their icons. Juice boxes now use
the same system.
/🆑
* Well that's all of them, unit tests prove me wrong
* now its a mapping pr lmao
* SHUT THE FUCK UP
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
Co-authored-by: Jolly-66 <70232195+Jolly-66@users.noreply.github.com>
* Pride pin quirk + pins can be infinitely reskinned (v2) (#72143)
## About The Pull Request
Neutral pride pin quirk added. Pride pins can be infinitely reskinned
now. Changes "sexuality" to "pride" in description of pin.
## Why It's Good For The Game
Pride pins are cute and having to buy them every round is a chore. Pride
pins are purely cosmetic and have no reason to be locked into only being
reskinned once.
## Changelog
🆑
add: Pride pin quirk! Start the shift off with a pride pin in-hand.
qol: Pride pins can be infinitely reskinned now.
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Pride pin quirk + pins can be infinitely reskinned (v2)
Co-authored-by: iwishforducks <65363339+iwishforducks@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* What am I looking at?
* Okay, now limbs and switching to the three other types of synth!
* Hey, it compiles, but *definitely* doesn't work!
* Has a slight chance of working now!
* Actually compiles properly now!
* Nice one, dork
* Fuck limb code.
* And this is the story behind where the last 8 hours of my life went!
* My code will now throw the rattle if you do dumbdumb.
* I'M SORRY, MODULARITY
* Final code, maybe?
* Hmm, yes, today I will leave debug logs in my commits.
* Hmmm, maybe not enable that by default.
* Oh yea, nice one, dork.
* Oh yea, digitigrade exists. Also fixes all known runtimes. Also fixes me forgetting a couple of *very* important things.
* I feel special.
* Small bit of code cleanup!
* Android parts!
* Go away Blueshift compile error!
* E
* More code fixes!
* Synthliz fix
* Haha, shitcode go brrrr
* AAAAAAAAAAAAAAA
* Fix screenshot tests!
* Listen here you little shit-
* idontknowwhythisisbreakingantennasbutyoucankeepthenameiguess
* FUCK
* Turns out some antennas *do* use more than one colour, ugh.
* Nice one, genius.
* Address reviews, and also change IPC antennas to tri_bool instead of toggle- woops!
* Now that I know roughly how sprite accessories work, let's fix this at long last so I can finally get this merged.
* Oh yea, this!
* Oops, nice catch, unit tests!
* Very cool, PDA update
* Yeet!
* Apply suggestions!
* Oops!
* WHY DIDN'T YOU COMMIT
* I'm getting tired of fixing these conflicts.
* Ugh.
* Fix my shitcode, also make erp genitals check less intensive
* FUCK
* I am still suffering
* Fix
* e
* Fucking LEGS
* Fucking GREYSCALE
* REMOVE THIS BEFORE MERGE, DUMBASS
* Nevermind, this is unironically the best way to do it due to how our really weird prefscode works... pain.
* Stupid organic interface code edit
* Adds logic to provide leniency for drag clicks (#71082)
## About The Pull Request
Ok so like, in byond. if you click on something and release the click
without moving off its sprite, that counts as a "click"
If you however move your mouse off its sprite, or it does so on its own,
any further releases count as dragdrops.
We already have logic for catching drag -> mouse back over sprite. The
code I'm adding here basically is just a bit nicer about how exact you
need to be
I'm adding tweakable values for how much your mouse is allowed to move
(This isn't perfect currently, since if the target itself moves we don't
care, need to work on this) in a short time period. If you meet these
cases, we instead call it a click.
They're globs for now cause I don't have a good feel for em, will tweak
over time. I want to reduce dumb clickspam and click dragging moving
mobs/drifting items by accident.
Oh also fixed a bug in ai behaviors that came from not knowing what
get_active_hand did
Fixes a monkey behavior of using their held item
It turns out it never worked, and the only reason it didn't runtime was
because of an if() check that got passed the result of an invalid proc
call. this fixes that
## Why It's Good For The Game
Spam clicking and drag clicking are stupid. they should be less stupid
## Changelog
🆑
add: Adds a grace period for hit detection, between clicking ON someone,
and then moving your mouse off before releasing the click. It's short,
hopefully it helps with stupid
/🆑
* Adds logic to provide leniency for drag clicks
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Psykers (#71566)
## About The Pull Request
Finishes #66471
At burden level nine (or through a deadly genetic breakdown), you now
turn into a psyker.
This splits your skull in half and transforms it into a weird fleshy
mass. You become blind, but your skull is perfectly suited for sending
out psychic waves. You get potent psy abilities.
First one is brainwave echolocation, inspired by Gehennites (but not as
laggy).
Secondly, you get the ability of Psychic Walls, which act similarly to
wizard ones, but last shorter, and cause projectiles to ricochet off
them.
Thirdly, you get a projectile boost ability, this temporarily lets you
fire guns twice as fast and gives them homing to the target you clicked.
Lastly, you get the ability of psychic projection. This terrifies the
victim, fucking their screen up and causing them to rapidfire any gun
they have in their general direction (they'll probably miss you)
With most of the abilities being based around guns, a burden level nine
chaplain now gets a new rite, Transmogrify. This lets them turn their
null rod into a 5-shot 18 damage .77 revolver. The revolver possesses a
weaker version of antimagic (protects against mind and unholy spells,
but not wizard/cult ones). It is reloaded by a prayer action (can also
only be performed by a max burdened person).
General Video: https://streamable.com/w3kkrk
Psychic Projection Video: https://streamable.com/4ibu7o

## Why It's Good For The Game
Rewards the burdened chaplain with some pretty cool stuff for going
through hell like losing half his limbs, cause the current psychics dont
cut it as much as probably necessary, adds echolocation which can be
used for neat stuff in the future (bat organs for DNA infuser for
example).
## Changelog
🆑 Fikou, sprites from Halcyon, some old code from Basilman and
Armhulen.
refactor: Honorbound and Burdened mutations are brain traumas now.
add: Psykers. Become a psyker through the path of the burdened, or a
genetic breakdown.
add: Echolocation Component.
/🆑
Co-authored-by: tralezab <spamqetuo2@ gmail.com>
Co-authored-by: tralezab <40974010+tralezab@ users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
* Psykers
* commented out stuff is now in
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: tralezab <spamqetuo2@ gmail.com>
Co-authored-by: tralezab <40974010+tralezab@ users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
* Adds a preference that disables intensive rendering on different multiz layers (#71218)
## About The Pull Request
It's kinda hacky, but it is nearly the same as just rendering one z
layer.
We allow people to ENTIRELY REMOVE most plane masters from their screen.
This has the side effect of disabling most visual effects (AO is a big
one) which saves a LOT of gpu.
We rely on planes being essentially layers to ensure things render in
the proper order. (outside of some hackyness required to make parallax
work)
I've kept parallax and lighting enabled, so visuals will still look
better then multiz pre plane cube.
It does also mean that things like FOV don't work, but honestly they
didn't work PRE plane cube, and FOV's implementation makes me mad so I
have a hard time caring.
Reduces gpu usage on my machine on tram from 47% to 32%, just above the
27% I get on meta.
I'm happy with this.
Oh also turns out the parallaxing had almost no cost. Need to remove it
as a side effect of what I'm doing but if I could keep it I would.
There's still room for in between performance options, like disabling
things like AO on lower z layers, but I didn't expect it to make a huge
impact, so I left things as is
Also fixes a bug with paper bins not respecting z layer. It came up in
testing and annoyed me
## Why It's Good For The Game
Ensures we can make multiz maps without running into client performance
issues, allows users to customize performance and visual quality.
## Changelog
🆑
add: Adds a new rendering option to the gameplay preferences. You can
now limit the rendering intensity of multiz levels. This will make
things look a bit worse, but run a LOT better. Try it out if your
machine chokes on icebox or somethin.
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds a preference that disables intensive rendering on different multiz layers
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* JSON Savefiles | Player Saves use JSON
* few fixups
* yeah this will need a migration in the future to use a different tree for skyrat stuff
* this can be null
* forgot to sanitize these ones
* TM st
* get it working
* Update code/modules/client/preferences_savefile.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Particle editor (#71110)
## About The Pull Request
Demo: https://streamable.com/wnj3mf
Features:
- Full support for most gradients/vectors/numbers/generators/transforms
( I might have forgotten some of the more esoteric ones)
- A "tutorial" section that explains the different rand/generation types
and how physics works with pictures
- Button for viewing what each var does
- Selecting a particle type to set immediately
- The generator types use defines now
Not included:
Color matrix support for color generators (I'm sorry but hell no)
Special thanks to @ jlsnow301 for explaining js things to me
## Why It's Good For The Game
Making cool stuf
## Changelog
🆑
refactor: Added a particle editor to VV dropdown which can be used by
coders and admins to edit particle values on the fly easily.
/🆑
Co-authored-by: TiviPlus <572233640+TiviPlus@ users.noreply.com>
* Particle editor
Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com>
Co-authored-by: TiviPlus <572233640+TiviPlus@ users.noreply.com>
Crop moth wings to 32x32, saving about 0.18s in init time (yes really) (#71243)
Crops all moth wings to 32x32 and saves the very expensive Crop cost in the preference icon generation for moth wings.
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Easy's Super Omega "unarmed strike based species var moved to limbs" refractor, unarmed strike striking with specific body parts rather than it just being flavor, and brain based attacking limb selection extra chunky edition. And also bodypart traits.
* Removed all the conflicts, and started converting all the arms and legs to the proper typepaths
* Actually makes the game compile :)
* Makes the maps compile too!
* Early mirror of #71143 because it's more relevant to us
Co-authored-by: itseasytosee <55666666+itseasytosee@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Ensures bunkering someone doesn't runtime due to a divide by 0 error (#71081)
## About The Pull Request
HAHHHHHHHHHHHHHHHH
* Ensures bunkering someone doesn't runtime due to a divide by 0 error
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* minor refactor to suicide code (#70960)
## About The Pull Request
Removes a redundant if statement and moves the code up an indentation
## Why It's Good For The Game
Makes the code look better
## Changelog
🆑
refactor: suicide code doesnt check damagetype multiple times
/🆑
Co-authored-by: etherware-novice <candy@ notarealaddr.com>
* minor refactor to suicide code
Co-authored-by: texan-down-under <73374039+etherware-novice@users.noreply.github.com>
Co-authored-by: etherware-novice <candy@ notarealaddr.com>
* Go away, I'm done with your code.
* Haha copypaste go brrrr
* Remove this dead code
* This annoys me too much after looking over my diff
* Tired of waiting, let's get this bread.
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Fixes job preference entries persisting after they have been nulled (#70577)
I know this doesn't actually change behavior, but it's confusing, and
adds a potential point of failure if someone doesn't realize it can
happen. Let's be consistent
* Fixes job preference entries persisting after they have been nulled
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Fixes opening Game Options and then spawning making you random
* Refactors mutant and cursed char prefs to not require running is_available first()
* oop
* minor cleanup of eye emissive application
* Update modular_skyrat/master_files/code/modules/client/preferences/_preference.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Fixes people getting digitigrade legs when they shouldn't be
* accidental false return
* Make vox bodycolor option only appear when a Vox Primalis
* Remove option to change legs on teshari - they never have had 2 leg types
* Digi legs pref now only appears and applies for digi optional species
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
This took a long time to review, but at long last, it's done.
* HUD clutter, good bye, you will not be missed.
* Oh my god so much pain
* No commented code. Bad.
* Uwaaaa
* Add a couple of warning messages for common scenarios, use defines
* AAAAA
* AAAAAAAAAAA
* UWAAAA
* UUUUWAAAA, DOCUMENTED SNOWFLAKE CODE
* FUCK
* Apply suggestions!
* Apply suggestions part one!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Apply suggestions part two!
* Static list
I think this is how it works, it compiles, sooo
* Split the giga monolith that's known as technical_stuff_for_lewd into two parts, human_helpers, and whatever else isn't a human helper. Also add a helper proc for mass update_inv on organic interface slots.
* I can't believe you did this
* Did you know that organic interface code didn't clean up it's defines? Neither did I!
* Less ifs
* Apply last suggestion that I know how to
* That was a lie
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
I HAVEN'T EVEN TOUCHED THE WORST CODE
* Oops
* Pain
* No copypaste
* Proc is 🦀
* No, bad, no commenting code.
* List prittification for chems, reduces the sheer amount of update_body calls
* Allow non-lewd empath users to not have to suffer raunchy inspect messages
* Oop
* DEEEEEEEEEEEEFINES
* Oh yea, that review. Definitely remembered.
* Formatting
* Breast defines
* MUCH cleaner and MUCH MUCH EASIER to expand incubus draft code
* Credit myself if I'm gonna spend days of my time combing through this
* Oops
* Chems cleanup
* Whyyyyyyy
* Climax rework, suffering.
* Wtf is this name
* Oh yea, arousal clamping.
* Haha, oops
* Bad, this is stupid easy to modularize
* Why is body_size in here
* List formatting, grammar stuff, and also breast size is now letters
* This took too long for me to figure out and I'm not proud
* Even I can make shitcode!
* Oops, typo
* You know, this makes more sense.
* Mhhh, this shouldn't be named like this
* Wrong file
* Rename `adjustPain`
* Dead code go yeet
* Y U NO READ DOCS
* Doc proc, minor optimisation
* Reviews part 1
* Whoever made this should read good coding practices. For any language.
* DEEEEFINNNEEEEESSSS
* SUFFER
* No more fluids
* EEEEEEEEEEE
* AAAAAAAAAAAAAAA
* MOB IS 🦀
* AAAAAAAAAAAAAAAAAA
* AAAAAA
* UWA
* And also solve tastfish's reviews!
* Partial revert, cause DM hates that
* I am very smart
* EEE
* AAAAAA
* Haha keyboard go click clack
* CODE
* FUCK
* FUUUUUCK
* PERFORMANCE
* Reset horny to 0 if erp disabled
* Arousal minimum is now 0, cause negatives are dumb and I hate them
Also cuts out some code that isn't needed as far as I can tell.
* Apply suggestions!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* AAAAA
* AAAAAAAAAA I CAN'T CODE
* Aaaaa
* WHY GIT
* I am very smart part... uh, four?
* Minor formatting changes
* Oops, fix potential cause of multiple climax attempts
* WAIT, WHY AREN'T YOU USING THE DEFINE?!
* Magic number slightly less magicky, sorta.
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>