* Updates Coderbus and Adminbus Ruin (#73675)
## About The Pull Request
Updates the people inside the coderbus and adminbus. Removes the
meatballs, because... well, they used to be called something that
actually accurately describes the admin team but now they're just
meatballs. The banhammer now takes the driver seat of adminbus, with a
sacrificial altar in the back. RIP to all the good players lost when
they became admin
## Why It's Good For The Game
It was really out of date lol
## Changelog
🆑
add: Updated the bus ruin
/🆑
* Updates Coderbus and Adminbus Ruin
---------
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Sourced Component Backend (#73571)
## About The Pull Request
Adds a backend for sourced components. which was requested by @ Fikou
Also cleans up a little bit of the AddComponent logic
## Why It's Good For The Game
Backend for fancy stuff and having a component from multiple sources
---------
Signed-off-by: GitHub <noreply@ github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Sourced Component Backend
---------
Signed-off-by: GitHub <noreply@ github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Optimizes INVOKE_ASYNC by making it a macro and avoiding a proc call (#73264)
## About The Pull Request
This is quite literally the same behavior but faster, and also catches
improper arguments better than the old macro/proc approach.
Credit to Lohikar for writing the macro.
Port of https://github.com/DaedalusDock/daedalusdock/pull/196
Also, `world.ImmediateInvokeAsync()` never set a return value, so
expecting one was never valid behavior.
At MSO's request, the documentation of `spawn(-1)`:
As per the reference, calling `spawn()` with a negative value will
execute the spawned code until a blocking action (such as `sleep()`) is
encountered. Then, it will step outside of the spawned code, and
continue the proc. This is the same behavior as calling a `waitfor =
FALSE` proc. Specifically, under the hood, `spawn(-1)` creates a copy of
the callstack like `sleep()`, incase the spawned code is blocked and
needs to be rescheduled.
As an added bonus, `spawn(-1)` silences SHOULD_NOT_SLEEP errors, whereas
`waitfor = FALSE` does not.
## Why It's Good For The Game
ITS FREE FUCKING CPU TIME
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Optimizes INVOKE_ASYNC by making it a macro and avoiding a proc call
---------
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@ gmail.com>
* Vote System: Approval Voting (#73749)
## About The Pull Request
Approval Voting is a system in which voters can select as many maps as
they want, instead of selecting only one. Final tallies show how many
votes each map received, and the winner is the map with the most
support.
## Changes since https://github.com/tgstation/tgstation/pull/73413
- Custom votes can now be started using either system
- Icon during AV votes indicating your selections
- Map population filter counts active players and participating ghosts
https://user-images.githubusercontent.com/83487515/222580901-61506cc3-dc42-4435-9775-1e6291a3f734.mp4
## Why It's Good For The Game
First-past-the-post (our current voting system) has flaws such as
creating a bunch of wasted votes, in that a large number of selections
ultimately have no impact and for example, a map can win a 3 way race
11/10/10, even though 2/3 of the votes were not for that map. This leads
to people having to vote strategically, and perhaps not what their true
choice is.
Approval Voting solves this by instead allowing the player to select all
the maps they would like to play, so they can vote for their true
preferred choice, as well as alternates.
For example, a player that wants Metastation, is okay with Icebox, and
doesn't want Delta may feel pressured to vote Icebox if it's in a 2 way
race with Delta.
AV lets them vote for Meta, and Icebox or as many others as they want as
their alternates and creates a more fair outcome of a map vote.
Map population filter removing AFK/lobby screen dwellers gives a better
number of active players so as to not trip the map filter's population
cap earlier than it should.
tl;dr: Less of this

## Changelog
🆑 LT3
rscadd: Added new multi-vote system
balance: Map votes are now calculated using multi-vote instead of the
old single-vote system
admin: Admins can now use either multi-vote or single-vote for custom
votes
code: Map choice filtering uses active player count, not all connected
clients
/🆑
* Vote System: Approval Voting
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* this code is so fucking funny it makes me want to merge w/o looking
* safety component stuff
* safeties should be finished
* I loooove safety component
* I swear that's all for gun safety
* manufacturer component
* cant forget this
* this is so awful
* 1100 line long gun file
* ok it actually compiles now
* that should not be an addition of any sort
* these defines should not be used anymore
* why?? the fuck??? are there var edited fire modes on black mesa?????
* how did that even happen
* maybe ci will shut up now
* oh man so many guns are lacking autofire now
* probably fixes safety toggling
* that should reference the gun not the component
* that should probably return
* makes it replicate current behavior, defaults safeties to being ON
* and that is all i have to say about that
* its automagically
* Fixes hijacked shuttles not counting as escaped, cleans up associated code (#73623)
## About The Pull Request
Fixes#72240
So, in the past, `onCentCom` ran a check at the end that said "if we're
on centcom z, in centcom area, or in shuttle that is endgame launched:
return TRUE"
Meanwhile its brother `onSyndieBase` did not need to run the same
checks, because it was also on the centcom z-level.
This meant that for the purposes of `considered_escaped`, `onCentCom`
pretty much entirely eclipsed `onSyndieBase`, only mattering for, well,
Nuke Ops
So the fix was simple - add the check for "in shuttle that is engame
launched" to `onSyndieBase`.
I took this opportunity to do a quick audit of associated "escaped" and
"alive" code. Did you know that hardcore random only checked that you
were on centcom to award survival points? Instead of any other checks
for escaped like stat?
Also the ancient "romerol zombies can't be used as an easy way to
greentext escape" was broken, because it checked the wrong species ID?
Bonus performance optimization: `in area` -> `in
area.get_contained_turfs()`
## Why It's Good For The Game
Hijack does not turn around to become an L
## Changelog
🆑 Melbert
fix: Hijacked shuttles now count as "escaping alive" once agian
fix: Hardcore random survival now actually checks that you've escaped
alive, and not just made it to centcom
fix: Intelligent zombies can now escape.
fix: Infectious zombies now don't count as escaped as intended.
/🆑
* Fixes hijacked shuttles not counting as escaped, cleans up associated code
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Lawyer PDAs can't be painted by the HoS (#70697)
## About The Pull Request
Removes the Lawyer's PDA from the head of security's PDA painter, as
they're a Service job.
## Why It's Good For The Game
They're a Service job, there's no reason for the Head of Security to be
able to have any authority over them or their equipment.
## Changelog
🆑
fix: The HoS' PDA painter can no longer paint PDAs into Lawyer ones.
/🆑
* Lawyer PDAs can't be painted by the HoS
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Fully removes departmentType var from Requests Consoles (#72916)
I was thinking about updating the requests console's UI, when I noticed
that #67219 started the process of moving away from the ancient
departmentType field. I have decided to put off the UI update until
later, and finished the necessary map updates using the power of
UpdatePaths.
Also autodocced the requests console vars and procs.
Finishes the removal of a deprecated (and may I say, badly named)
variable. Mappers will not accidentally try to set the outdated bitflag
fields, instead they will the more descriptive fields.
* Fully removes departmentType var from Requests Consoles
* Update CentCom.dmm
* update paths
* fix var edits
* fix
* a
---------
Co-authored-by: Profakos <profakos@gmail.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
* Blacksmithing!
THIS SHOULD, SHOULD BEING THE KEY WORD, add blacksmithing as a job along with their workstations on our 4 maps. Their workstations are in beta and currently they share access with curators.
* wood added
forgot to add wood
* Working Blacksmith
Blacksmith.Dm moved to modular_zubber/jobs/job_types/
landmarks.dm for blacksmith moved to modular/zubber/game/object/landmarks
temporary ID_Trim added to /modular_zubber/datum/id_trim/jobs.dm
Blacksmith now spawns in the correct location. But is lacking relvant apperal. Also didn't touch plasmamen.
* Move Blacksmith to Cargo instead of Service and Give plasmamen the right suit
Blacksmith should now be considered Cargo. Starting with pants and boots instead of shorts and shoes.
* undoes map changes
* Update VoidRaptor.dmm
* Update VoidRaptor.dmm
* Update IceBoxStation.dmm
* Update IceBoxStation.dmm
* Update IceBoxStation.dmm
* fuck this shit so fucking hard holy shit who MADE AUTO MAPPING I WANT THEM DEAD
* all but tram trimmed up and smithed
* should be final mapping changes, hopefully, also fully removes automapping and adds skyrats auto mapped stuff to the default maps, besides barbers, for now.
* its back,,,,
* automap test yay
* fixes what i assume is a typo
* automapper gone?>!!?!?!?!
* ITS BACK
* *sobbing and crying sounds*
* is the nightmare over?
* test
* test over
* NO MORE HAIRCUTS!!!! for now
* gdsfYEASLGHJKF FUCK EAH
* CATPAWAS
* KILL
* heg,,h,,m
* kills my hopes and dreams
* Update _basemap.dm
* typofix
* it donut exist
* Give the blacksmith a more appropriate Mail list.
* fixes a small mapping error with the zlevels
* fixes another weird mapping error.
* Adds blacksmith area, new blacksmith heirlooms
Adds the new area to be placed on maps.
Adds appropriate heirlooms.
* Adds the new areas to the DME.
* Update IceBoxStation_bubber.dmm
* Update IceBoxStation_bubber.dmm
* Update IceBoxStation_bubber.dmm
* Repaths modular stuff into the right folders, let's bite the bullet now.
Also adds access for barbers.
* Blacksmith access mapping helper
* Update tgstation.dme
* New blacksmith shop for Deltastation!
* NT Consultant returned to Delta
* Delta Update (bones & sinew)
* Unit test fixes
* Tramstation Blacksmith
* Tramstation Barber
* Update tramstation_bubber.dmm
* super crazy icebox changes
* icebox fixes
* fixes
* Final blacksmith area change
* icebox pipenet fix
* .dme out of order fix
---------
Co-authored-by: JimmyDrop <85446983+ShamanSliph@users.noreply.github.com>
Co-authored-by: KathrinBailey <kat892@outlook.com>
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
* Fix for the glasses drawing over hats, & limits this fix to only the snouts that it is needed for
* Small adjustment
* Typo in doc
* This was probably only going to cause problems + some final cleanup
* thank you linters
* Small fix + doc
* Some trimming of unneeded code
* unending pain
* Fixes an issue with nightmare revival, Unit tests some fully heal stuff (#73612)
## About The Pull Request
- Same issue as Ethereals. Owner was `null`ed because the heart was
recreated. I opted for a more permanent solution, that being introducing
a new flag to avoid recreating organs.
- Adds some unit tests for fully heal stuff to make sure it works.
## Why It's Good For The Game
More cases of revival working as expected
## Changelog
🆑 Melbert
fix: Nightmare revival acts less funky - stops it from re-creating the
Light Eater.
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes an issue with nightmare revival, Unit tests some fully heal stuff
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Return to Tiny: Reworks heights to use filters, allows spacemen to have varying heights (#72344)
Re-pr of #66644 with some changes to get it working

- [x] ~~Huds get cut off~~ Resolved
- [x] ~~Very tall helmets get cut off~~ Resolved
- [x] Hair gets cut off
- [x] ~~Needs optimization before releasing to the world as a pref~~ jk
lol
Look at that fella so cute
🆑 Melbert, That REALLY Good Soda Flavor, FatFat, AndreyGusev
add: Spacemen can now have varying height. (Admin only for now)
add: Dwarfs are now slightly shorter, but look way better.
/🆑
Co-authored-by: Jack LeCroy <3073035+jacklecroy@users.noreply.github.com>
* fix conflict
* clarity
* update rouny
* update screenshots
* Revert "update screenshots"
This reverts commit a5427a5238e574869fe364568b7f043bbd287c79.
* Fixes the dwarf screenshot.
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jack LeCroy <3073035+jacklecroy@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Medical/Security records now use the max/min age.
* merge conflict
* Refactors crew records (#72725)
I have attempted or otherwise started this project at least 4 times. I
am sick of it being on my calendar. The code needs it. I need it.
- This makes crew records a proper datum rather than assigning
properties record.fields.
- General, medical, and security records are merged.
- Did some slight refactoring here and there for things that looked
obvious.
- Wanted states are now defined (and you can suspect someone through
sechud)
- pAI (unrelated but annoying) had some poorly named exported types that
i made more specific
- Job icons are moved back to the JS side (I wanted to get icons for
initial rank without passing trim)
<details>
<summary>previews</summary>
Editable fields & security console

Medical records

Look and feel of the more current version

</details>
TGUI'd some of the worst UIs in the game.
Creating new records is made much simpler.
Manifest_inject is made readable.
Probably bug fixes
🆑
refactor: Crew records have been refactored.
refactor: Medical records -> TGUI
refactor: Security records -> TGUI
refactor: Warrants console -> TGUI
qol: Players are now alerted when their fines are paid off.
qol: Cleaned up sec hud examination text.
qol: Adding and deleting crimes is easier.
qol: Writing crimes in the console sets players to arrest.
qol: You can now mark someone as a suspect through sec hud.
/🆑
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* I've got something that now actually works
Just got to incorporate the records into what players can actually see.
* Turns out that client has already been transferred after all
* Adds the past records in the TGUI records (they're kinda ugly but it works, so y'know)
* Whoops
* Hate you too sometimes Prettier
* Fixes ghost roles using LITERAL records, which caused problems
* Fixes the leaks caused by ghost roles not getting their name right because of the stupid freaking special() proc
* I hate list operations man they're so stupid
* Fixes the stars on the crew manifest!
---------
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Write roundstart logout report to admin log (#73672)
## About The Pull Request
- Writes the roundstart logout report to the admin log
- Increases the threshold for the report, clients > 10 minutes are
deemed AFK
## Why It's Good For The Game
While the report is broadcasted in chat, it's not actually saved in the
log. Sometimes we want to go back and read this later.
## Changelog
🆑 LT3
admin: Roundstart logout report is written to the admin log
admin: Roundstart report threshold is now 10 minutes
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Write roundstart logout report to admin log
* timer
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
Co-authored-by: lessthnthree <three@lessthanthree.dk>
[NEW GHOST ANTAG] The Paradox Clone (#71141)

[DESIGN DOC]
https://hackmd.io/@tGKknGe5Q7qtddEspif79g/BJ3w9QLri/edit
Bluespace technology has destabilized the very fabric of reality, even
time itself!
Sometimes during a shift, it's possible for a PARADOX CLONE to spawn
somewhere on the station (usually maintenance). This paradox clone has
the exact appearance and DNA as a random crew member on the station,
wearing the same clothes they were at the start of the shift, including
their ID.
To maintain timeline coherency, the paradox clone must now hunt down and
kill the original and take their place or die trying, if the original
survives they have failed.
The only thing the paradox clone spawns with is a mechanical toolbox
that helps them from being stuck in maints if their ID doesn't have
maints access.
The inclusion of this antag encourages good crew coordination and adds a
less destructive, more personalized antag to the roster.
This antag rewards good detective work, as both the clone and the
original are identical in every way, and will therefore require a
detective to break out their detective skills to figure out who the
clone is.
Also a possible tie-in with the Chrono Legionnaires in the future.
🆑
add: Time and space has destabilized even further due to Nanotrasen
bluespace research, now, on occasion, clones from different timelines
can appear on the station and hunt you down to maintain timeline
stability! Beware the Paradox Clone!
/🆑
---------
Co-authored-by: 1bw0kopy <xz2rbf23@protonmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
(cherry picked from commit 214174874c)
Co-authored-by: Shadyyy66 <114319683+Shadyyy66@users.noreply.github.com>
* Optimize cardboard cutouts saving 1.5s+ on init times (#73404)
New regression in init times. Closes
https://github.com/tgstation/dev-cycles-initiative/issues/32. CC @ Fikou
- Instead of creating a human and icon for *every* cardboard cutout when
initialized, only creates the one we're actually using. When you're
about to use a crayon, creates all of them.
- Instead of using getFlatIcon, uses appearances directly.
* Optimize cardboard cutouts saving 1.5s+ on init times
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@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>