* 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>
* I hate coders
This includes myself.
* Web edit~
* I give up, this is the best I got
* Make species take their alternate language instead of uncommon! Make language selection reflect foreigner, if selected!
* Remove code that assumed old foreigner add proc was called
* whyaremidroundspawnshandleddifferentlythanroundstartswhatthefuck
* Apply suggestion!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Address last review at long last
* Apply suggestions!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Object Window Niceties (#69825)
* Object Window Niceties
Alright. I got bored and polished up the object/alt click window.
It had a few issues:
First, we generated all our images in bulk, as soon as requested
Second, the caching was global, despite only working on a client to
client basis
Third, we only generated up to 10 images. This could be fine, but the
javascript code will continuiously rerender assuming unrendered images
will come eventually, and they well, weren't. This caused MASSIVE
clientside lag
Fourth and finally, I did not like how moving away from the viewed turf
lagged behind, in sync with the stat tab update. Looked bad.
I've resolved all these.
I solved the first three issues by reworking how obj images were
generatated and managed.
Rather then storing a basic cache on the subsystem, and doing all the
image generation at once, we queue up image generation as we like, and
generate images inside a new processing subsystem fire.
This isn't the best solution, since it still eats cpu somewhat, but it's
a whole lot better then the other options, outside either removing the
need to getflat, or somehow predicting what items a client will want to
see
I've started storing three bits of info. First, a list of all the
objects we currently want to display.
Second, a list of atom -> image html
Third, a list of atoms to imageify.
This information is stored on a datum on /client, since I want this to
have a lifetime linked to well, clients.
I've used this datum to solve that fourth bit, using a component I made
for parallax a bit back. This lets me react to our client's mob, and
update the tab linked to that, rather then on a subsystem call by call
basis.
That's about it.
Co-authored-by: san7890 <the@ san7890.com>
* Object Window Niceties
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Adds lazyloading to the asset subsystems (#69454)
* Adds lazyloading to the asset subsystems
This currently applies only to spritesheets because of how monumentally
expensive they are.
If an asset is requested it will immediately be fully loaded, but
otherwise we slowly load them in with a separate subsystem.
This allows us to not hold up initialize with hair stuff. Saves roughly
33% (16 seconds with LOW_MEMORY_MODE) of initialize on my machine
My target is something closer to the 9 second init that had back in
2019, this is a good first step. Lets see how much more we can do yeah
lads?
Co-authored-by: san7890 <the@ san7890.com>
* Adds lazyloading to the asset subsystems
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Resolves is_banned_from headaches and lag (Speeds up roundstart significantly) (#69376)
About The Pull Request
Just to be clear, when I refer to time here, I am not talking about cpu time. I'm talking about real time.
This doesn't significantly reduce the amount of work we do, it just removes a lot of the waiting around we need to do for db calls to finish.
Adds queuing support to sql bans, so if an ongoing ban retrieval query is active any successive ban retrieval attempts will wait for the active query to finish
This uses the number/blocking_query_timeout config option, I hope it's still valid
This system will allow us to precache ban info, in parallel (or in batches)
With this, we can avoid needing to setup all uses of is_banned_from to support parallelization or eat the cost of in-series database requests
Clients who join after initialize will now build a ban cache automatically
Those who join before init is done will be gathered by a batch query sent by a new subsystem, SSban_cache.
This means that any post initalize uses of is_banned_from are worst case by NATURE parallel (since the request is already sent, and we're just waiting for the response)
This saves a lot of headache for implementers (users) of the proc, and saves ~0.9 second from roundstart setup for each client (on /tg/station)
There's a lot of in series is_banned_from calls in there, and this nukes them. This should bring down roundstart join times significantly.
It's hard to say exactly how much, since some cases generate the ban cache at other times.
At base tho, we save about 0.9 seconds of real time per client off doing this stuff in parallel.
Why It's Good For The Game
When I use percentages I'm speaking about cost per player
I don't like how slow roundstart feels, this kills about 66% of that. the rest is a lot of misc things. About 11% (it's actually 16%) is general mob placing which is hard to optimize. 22% is manifest generation, most of which is GetFlatIcons which REALLY do not need to be holding up the main thread of execution.
An additional 1 second is constant cost from a db query we make to tell the server we exist, which can be made async to avoid holding the proc chain.
That's it. I'm bullying someone into working on the manifest issue, so that should just leave 16% of mob placing, which is really not that bad compared to what we have now.
Changelog
cl
code: The time between the round starting and the game like, actually starting has been reduced by 66%
refactor: I've slightly changed how ban caches are generated, admins please let me know if anything goes fuckey
server: I'm using the blocking_query_timeout config. Make sure it's up to date and all.
/cl
* Resolves is_banned_from headaches and lag (Speeds up roundstart significantly)
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* "What are you in for?" Prisoners can now select their capital offense. (#69446)
New preference, like security department, but for prisoners. They can pick why they're in prison, and they'll get a record about it roundstart.
Classified and Other are for people who want to build their own background, that none of the options currently fit.
Current options:
Abhorrent Criminal Negligence = Incompetently risked numerous lives.
Attempted Development of Cloning = Attempted illegal research in the cloning sphere. Cloning, cloning construction, and cloning-related R&D was outlawed in 2560.
Attempted Murder = Attempted to maliciously kill someone.
Classified = Consult Legal.
Corporate Espionage = Conducted espionage against Nanotrasen for commercial purposes.
Counterfeiting = Engaged in widespread fraud.
Enemy of the Corporation = Acted as or knowingly aided an enemy of Nanotrasen.
Grand Sabotage = Engaged in malicious destructive actions seriously threatening Nanotrasen employees and or infrastructure.
Grand Theft = Stole items of high value or sensitive nature.
Identity Theft of High-Ranking Figure = Impersonated a high-ranking figure.
Murder = Maliciously killed someone.
Mutiny = Attempted to overthrow/subvert Chain of Command.
Other = Consult Legal.
Tampering of Artificial Intelligence = Uploaded malicious negligent or otherwise blacklisted directives to an Artificial Intelligence.
Worship of Blacklisted Deities = Practiced worship of blacklisted deities.
* "What are you in for?" Prisoners can now select their capital offense.
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Account for the fact GLOB.language_datum_instances doesn't get populated until part way through the load process which I couldn't test because my dumb DD doesn't respond for like 2 minutes and getting to the 30s mark on the UI
* Account for the fact people do indeed use multiple characters, so it would be a good idea to fix languages on characters that are being switched to while avoiding saving more than is necessary to ensure the server isn't lagged to death should some smartass decide to switch between characters really fast to screw with the server
* Commit suggestion!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Apply recommendations!
* Fix outdated languages being applied by default!
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>