* Allows adding a hypernoblium crystal to portable atmospheric devices to suppress reactions (#68447)
The main functionality is allowing for reaction suppression in canisters to still be a thing by allowing people to add a hypernoblium crystal to a can/pump/scrubber to add a toggleable option to stop it from reacting. The crystal can only be retrieved by deconstructing the canister to make transferring 1 crystal between 5 different cans less of an option.
Some other changes included in this:
Hypernoblium crystals are now single use, and their cost has been halved to reflect this. (So players dont have to waste 2 uses of a crystal on a can)
Canister UI's cell charge display style has been slightly changed.
Removed unused id_tag variable from scrubber UI code that was from 5 years ago
Some various variable name changes (snake_case to camelCase) in relevant UI code for consistency with other JS UI code.
Allows some preservation of the ability to stop canisters from reacting when wrenched in #68420, while also making it more intuitive and giving an incentive for people to make hypernob crystals
You can now insert a hypernoblium crystal into portable atmospheric devices (ie. canisters, pumps, and scrubbers) to allow you to toggle reactions inside the can on and off, similar to how wrenching and unwrenching it on a connector did previously.
The crystal once inserted cannot be removed without deconstructing the canister. However, hypernoblium crystals are now single-use items, and their cost has been halved to account for it.
Variable names in canister, pump, and scrubber UI code have been changed to camel case for consistency.
The canister UI has been slightly changed in terms of how it displays cell charge.
* Allows adding a hypernoblium crystal to portable atmospheric devices to suppress reactions
Co-authored-by: RandomGamer123 <31096837+RandomGamer123@users.noreply.github.com>
* Verbose Vote Initiation Feedback Tooltippery (#69763)
* Verbose Vote Initiation Feedback Tooltippery
Hey there,
So basically, the old implementation had it such that when a vote was disabled and you tried to trigger it, you could get a very nice message in your chat explaining why you could not trigger that vote in that moment. HOWEVER, there's a current fatal flaw in this logic:
You can't ever get that to_chat reason as to _why_ this vote is disabled since you can't click the button. I don't know if this ever worked, which is sad, because we had a lot of these nice messages that one would never see. So, let's leverage the power of TGUI and add messages.
The messages are applied per-datum singleton, and are a generic explanation of what the vote does when there is no specific reason assigned to it when the can_be_initiated() proc runs. If it can not be initiated, we change the message to reflect exactly why the player can not initiate the vote. It ends up looking something like this:
In order for this to work well for the restart vote and to lessen the amount of copy-pasting I might have to do, I created a new proc that checks to see if a valid admin is online, and uses that for both updating the message and restarting the server if the vote clears.
* fixes messages not resetting
* removes misleading section
the admin can always restart the server if they wish
* Verbose Vote Initiation Feedback Tooltippery
Co-authored-by: san7890 <the@san7890.com>
* Makes AnimatedNumber overperform (at 60 FPS) (#69731)
* Replace `AnimatedNumber` with the 60 FPS counter for techfabs
* stylemistake changes: round 1
* Revert some refactoring
* Revert some more refactoring
* Revert that one last stray hunk
* Fix an oversight in NumberInput
* Match the style of `DraggableControl` 1:1
* Use `textContent`
* Drop dead import
* Makes AnimatedNumber overperform (at sixty frames per second)
Co-authored-by: scriptis <scriptif@gmail.com>
* Automatic R&D sync (#69735)
* Automatic R&D sync
* One second instead of a half-second
* Moth changes + more
- Actually use SIGNAL_HANDLER
- Use update_static_data_for_all_viewers instead of only updating static data for the current user
* Batch techweb updates
* Automatic R&D sync
Co-authored-by: scriptis <scriptif@gmail.com>
* Restricted input can now work with negative numbers (#69527)
* int
* Update tgui/packages/tgui/components/RestrictedInput.js
Co-authored-by: Aleksej Komarov <stylemistake@ gmail.com>
Co-authored-by: Aleksej Komarov <stylemistake@ gmail.com>
* Restricted input can now work with negative numbers
Co-authored-by: Stan_Albatross <66756236+stanalbatross@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@ gmail.com>
* tgui for techfabs 1.5: the parts I should've done last week edition (#69665)
* Set minimum width for window
* Adjust window height
* Material cost is always on
* QOL the hell out of techfabs
* Smash techfab into more components
* All designs; not all recipes
* Use `type` instead of `interface`
* Drop access modifiers on `AnimatedQuantityLabel`
* tgui for techfabs 1.5: the parts I should've done last week edition
Co-authored-by: scriptis <scriptif@gmail.com>
* [MDB IGNORE] APC controller and Power Monitor/AmpCheck fixes, aka How do I write PR titles (#69146)
About The Pull Request
bgug fix stuff
APC controller UI has its elements section'ed off. The backend has been redone to make the behaviour of the APC controller a bit less janky. The console should be more stable, and all the soul has been removed from the code and the UI.
before this PR stales out from nobody wanting to review my pr, I should probably outline what exactly changed:
APC controller consoles have had their APC code almost entirely reworked. They no longer have to hold a reference to the person using the controller currently, and APCs themselves no longer hold a reference to the controller, instead to the person directly. A lot of code was moved to APC themselves to make it a lot more stable.
APC controller used to call toggle_breaker without passing args, causing a runtime. Fixed in
Fixes the power flow control console not actually being able to toggle breakers #69343
APC controller UI has had the Window.Content tags moved up to the top component, and a lot has been sectioned off to make the UI more sane.
AmpCheck used to look for a wire on it's turf, or as a fallback look for the Area APC. A check to see if the APC has a terminal did so on a weakref, causing a runtime and preventing the program from ever finding a valid APC in it's area, making it show nothing. This has been fixed. On the other hand, the power monitor console did not store the ground wire or APC terminal as a weakref, this has been updated. As a fallback, if there are still no APCs in the powernet, the UI will show a dimmer popup.
There was a "secret" power monitor variation in code so PDAs could not access monitors in hidden places. With the removal of PDAs, this control console is useless.
Why It's Good For The Game
Tiny bit of (much needed) polish on some useful tools in the engineering department.
Changelog
cl
fix: Fixed runtime when using AmpCheck without connecting the console with a wire.
fix: Fixed a few runtimes that could occur when using APC controller consoles.
qol: Sucked soul out of APC controller code and UI.
del: Removed "secret" power monitor console.
/cl
* [MDB IGNORE] APC controller and Power Monitor/AmpCheck fixes, aka How do I write PR titles
* update paths
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Faxing of unusual objects (#69651)
* Fax machines have a wire panel.
Fax machines can be hacked to allow unusual input, throw their contents on receipt, and be invisible to the network.
Fax machines will accept some additional paper-like items by default.
Fax icons moved to their own file.
* Unpunctuates screentips.
You can send cash now also.
* Removes unnecessary "var".
Adds salami to food list.
* Faxing of unusual objects
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Displays a popup if you're converted into a shade who needs to follow instructions (#69319)
About The Pull Request
Fixes#68918
A week or so ago I soulstoned someone and they just spent the whole time yelling at people to try and get me killed until I got tired of it and chucked them into some lava. After that they actually noticed the text telling them they were supposed to have been my new spectral pal.
Then I looked at the issue list and noticed someone else had this problem.
Text is easy to miss, so I made it display a big popup instead.
It looks like this.
image
Example with a longer name
It also gives you the usual antag button to re-display it, in case you want to check who your master is.
This window will display if:
You are placed into a soulstone for the first time by someone who is not in the cult.
You are placed into a soulstone by someone who wasn't the original person who soulstoned you (they become your new master).
You were previoulsy a cult shade but your soulstone is exorcised by a chaplain.
You are still a cult shade but are soulstoned by a miner with a soulstone, which makes you loyal both to the cult and the miner. I am not sure how conflicts are resolved here but this isn't a mechanical change and is how the "text printed into chat" method already worked so that's up to general antagonist priority policy.
Why It's Good For The Game
If you've suddenly gained a restriction similar to an AI law, it should be as obvious as possible, especially if it's potentially to be the friend of someone who just killed you.
Changelog
cl
qol: Newly created Shades will be told much more clearly that they're supposed to be bound to their master, if they have one.
/cl
* Displays a popup if you're converted into a shade who needs to follow instructions
Co-authored-by: Jacquerel <hnevard@gmail.com>
* Standardize and improve status display UI's (#68976)
* Standardized and improves status display app, making it share the same UI as the Communication Console's version of it, and moves shared status display screens into global lists instead of vars.
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Standardize and improve status display UI's
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* LabeledList Kitchen Sink (#69532)
Looks like I've documented most of the labeledlist props in my previous PR so there is pretty much nothing else to do here except className.
Why It's Good For The Game
More examples for newer coders.
* LabeledList Kitchen Sink
Co-authored-by: vincentiusvin <54709710+vincentiusvin@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>
* Beepers Monitor Time
Modular change to CrewConsole
* Beep it Prettier
* Prettier actually Running
* Delete .prettierrc
* Restores TG Version
* Beepularize
* Old Bae
* Adds Life Status indicator
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* BLOOD FOR THE BLOOD GOD
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Lets LabeledList.Item's label wrap if they want. Docs the rest of the props. (#69459)
* Adds wrap toggle
* Documentation
* Less ambiguity
* Lets LabeledList.Item's label wrap if they want. Docs the rest of the props.
Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
* Vending machines now support categories (and premium/contraband is moved there), adds it to the Clothesmate (#69076)
* Initial setup and data
* Work on UI
* Final UI
* Remove TODO
* Section for categories
* Vending machines now support categories (and premium/contraband is moved there), adds it to the Clothesmate
* Adds the modular version of product_categories and implements it for the Clothesmate!
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Allows multiline text inputs to insert line breaks using Shift-Enter (#69219)
* Allows multiline text inputs to insert line breaks using Shift-Enter
Makes it so the limit of line breaks is two consecutive ones on multilines, and visual-only multiline will not be allowed to enter skiplines at all (but it will also not send it right away).
* No longer inserts spaces when removing all skiplines
* Updates the RegEx to be much smoother, and less shittily-coded
* Update the capitalization of the functions I added
* Allows multiline text inputs to insert line breaks using Shift-Enter
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Refactors operating tables to be event driven + QoL + Unit Test (#69015)
* Event driven table
* Operating computer fix + loosening of check
* Unit testing
* IT NEEDS TO BE FORCE MOVE YOU GOTTA CLIMB TABLES AAAAH
* Migrated patient to carbon instead of human
Has no real bearing on the experiments tbh
* DNAs can be null apparently
* Simplify replacement code
* Move comments
* Refactors operating tables to be event driven + QoL + Unit Test
* Refactors operating tables to be event driven + QoL + Unit Test
Co-authored-by: vincentiusvin <54709710+vincentiusvin@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Splits up 'Gross' food from 'Gore' and reshuffles taste preferences accordingly (#68899)
* Splits up 'gross' food from 'carrion'
* Adds a couple of missed burgers.
Moths dislike Carrion rather than it being poison to them.
* BEES is now BUGS
* It's always safe and a good idea to use find/replace
* Splits up 'Gross' food from 'Gore' and reshuffles taste preferences accordingly
* Splits up 'Gross' food from 'Gore' and reshuffles taste preferences accordingly
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Disables browserlist update message (#69209)
We only care about IE functionality here, the data updates are pretty irrelevant for us and it's confusing for new coders.
* Disables browserlist update message
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
* Adds support for "realistic" public elevators (elevator doors, elevator panel, etc) (#68888)
* Elevators are a bit more friendly part 1
- Emaggable elevator buttons / support for emaggable device assemblies
- Delayed travel between floors
- Elevators can now show a warning sign to areas below while travelling
- Elevators can now optionally wound heavily instead of gibbing
* Adds supoprt for "lift doors"
* Comment tweak
* Splitting these variables
* Functional prototype
* multiz debug
* Elevator button framework
* Unifies these behaviors
* Emergency doors
* Lift button framework
* UI closes on floor change
* Testing changes
* Fix
* UI Tweaks
* Panel works pretty swell
* Minor tweaks
* Move to static
* Bonus tram change
* User experience
* Slight tweak to mapload stuff
* This is silly
* Some UI tweaks, need to update css
* CSS and ui overhaul
* Documentation updates.
* Multi-z lift support
* Multitile lift fix
* Adds support for "realistic" public elevators (elevator doors, elevator panel, etc)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fax Machine (#69083)
* Adds the Fax machine, which allows you to send and receive faxes from around the station.
Co-authored-by: twilightwanderer <twilightwanderer@ users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Fax Machine
* our maps
Co-authored-by: twilightwanderer <88540658+twilightwanderer@users.noreply.github.com>
Co-authored-by: twilightwanderer <twilightwanderer@ users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
* woo
* fuck
* the fixening
* i told jake i'd do this
* unused define
* signal-ification
* that was a shit idea
* clarification
* prettier moment
* don't hurt me zone
Co-authored-by: jjpark-kb <55967837+jjpark-kb@users.noreply.github.com>
Co-authored-by: jjpark-kb <mccorvey.norman@gmail.com>
* Lua UI improvements (#68887)
Atomized from #68816, with a little addition. Fixes some dumb formatting issues with the lua editor, adds a "jump to bottom" button when viewing the state log, and paginates the state logs.
* Lua UI improvements
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
Spends 6 hours teaching Papercode how to conform to better standards and practices, and also fixes a trivial 5 minute bug with command reports.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* fixes HPLC to show purity and corect volume (#68979)
* hplc shows purity again, rounded in percentage. Also fixes reagents showing an incorrect number of units in some cases.
Co-authored-by: Holoo <oleksanr.kozyr.yr1@ gmail.com>
* fixes HPLC to show purity and corect volume
Co-authored-by: Holoo <38228316+Holoo-1@users.noreply.github.com>
Co-authored-by: Holoo <oleksanr.kozyr.yr1@ gmail.com>
* [MDB Ignore][Bounty][Complete Refactor] Papercode Redux: Too Many Damn Files <Map Conflict Edition>
* Fixes merge conflicts and compilation errors, alongside fixing the joker card to make it fully functional again
* Fixed a bunch of info variables in map files
* Alright this is why I wanted this merged yesterday
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Fixes a lua state null return related to the print wrapper, improves the lua editor ui formatting, and implements a stopgap lua lag fix (#68816)
This PR fixes this issue by making sure every proc called in the stack of /proc/wrap_lua_print which could sleep is called using INVOKE_ASYNC, and to prevent such problems in the future, marks all the wrappers as SHOULD_NOT_SLEEP(TRUE). I also figured out how to fix the dumb overflowing problem of the lua editor ui.
Due to lag concerns regarding lua states with a large number of global variables (including fields within global tables), I have made it so the global table and state log are hidden by default - they can be shown using a toggle button in the editor ui.
* Fixes a lua state null return related to the print wrapper, improves the lua editor ui formatting, and implements a stopgap lua lag fix
Co-authored-by: Y0SH1M4S73R <legoboyo@earthlink.net>
* Had to commit this because of conflicts, rest coming soon (thanks tom :) )
* Adds some more bodytype defines
* Adds some more defines for taur slots and limbs
* Removes a random merge conflict I found along the way
* Added a new file for invisible taur leg sprites
* Added the ability to have non-surgically-removable bodyparts
* Added actual taur legs, which are non-dismemberable and impossible to remove surgically
* Makes it so shoes don't show up on taurs that shouldn't show shoes
* Added some comments about undocumented non-modular changes
* Adds a flag for sprite accessories to allow them to prevent shoe display
* Refactaured (teehee) how the taur body extension is handled, making it an external organ, amongst other things
* Adds a missing keyword to Remove(), better documents some variables and removes an unused one
* Fixes taur bodies not allowing you to customize their colors properly
* Okay, okay, what if I told you, no more lower half of clothes?
* Adds a few stuff that won't get cropped on taurs
You know, could maybe change gets_cropped_on_taurs to be in supports_variation_flags.
* Adds the icon_state manually to the mutable_appearance generated by the female clothing proc, so indexing mishaps should no longer occur.
* Refactored fundamental circuit components that have varying inputs. Improvements to the integrated circuit UI. Improves and rebalances the drone shell (#68586)
* Refactored fundamental circuit components that have varying inputs. Made the integrated circuit UI slightly better.
* Fixes with UI
* Removes logger
* Ran prettier
* Fixed documentation
* Rebalances drone circuit
* Drones can now charge in chargers
Co-authored-by: Watermelon914 <hidden@ hidden.com>
* Refactored fundamental circuit components that have varying inputs. Improvements to the integrated circuit UI. Improves and rebalances the drone shell
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <hidden@ hidden.com>
* Fixed the scrolling for the lua editor not working properly in some cases (#68720)
* Fixed the scrolling for the lua editor not working properly in some cases
* quick fix
* Removes extra ref var
Co-authored-by: Watermelon914 <hidden@ hidden.com>
* Fixed the scrolling for the lua editor not working properly in some cases
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Watermelon914 <hidden@ hidden.com>
* Drastically improved the USB connection for air alarms. Any airlock can now be made into a shell (#68632)
The USB connections for air alarms have been improved and now include scrubber control, vent control and the setting of the air alarm mode. Also fixes a bug where the limits were not being properly set.
The scrubber, vent and limit control can be duplicated in the circuit to allow multiple limits/scrubbers/vents to be controlled by one circuit.
Any airlock can be made into a shell during construction by configuring the airlock electronic before insert.
* Drastically improved the USB connection for air alarms. Any airlock can now be made into a shell
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
* Give NtOS messenger a scrollbar (#68840)
Makes the NtOS messenger app scrollable for people who don't have a mousewheel, a small QoL change.
* Gives NTos messenger a scrollbar
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Makes result of decal painter and tile sprayer not cleanable like the map-start decals
* Update code/game/objects/items/airlock_painter.dm
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Fix: #67960 Mech tgui does not let you drop some crates from cargo compartment (#68167)
* Fix: #67960 Mech tgui does not let you drop some crates from cargo compartment
Co-authored-by: Matt <gavxn@zanidrak.com>
* Changes Traitor flavor text to no longer say the Syndicate provided you with codewords (#68388)
* Replaces 'The Syndicate' with 'Your Employer' in Traitor's flavortext, as non-syndicate Traitors (including NT sided) are possible.
* Changes flavor text for NT agents to no longer say the Syndicate provided you with codewords
Co-authored-by: SuperSlayer <91609255+TymurShatillo@users.noreply.github.com>