mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-06 06:40:42 +01:00
ed94de4ddf7edad8694badefc577392e0f762bf5
2242 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
0b29e77985 |
Adds user feedback for going over order limits in cargo console (#76344)
## About The Pull Request This'll prevent weird "above the max by accident" cases, and also uses defines instead of hardcoded stuff. This code is often duped, wish we had a better way of handling it. Oh also removes a few safety copies before for loops that aren't actually needed (for x in list copies the list) ## Why It's Good For The Game Better UX, slightly saner code |
||
|
|
eac3c9d91c |
Emergency Relief Capsule (#76457)
## About The Pull Request Getting back into coding by making some soul PRs. Adds a new kind of bluespace capsule which replaces the default one when the "budget pods" station trait runs, and is available from the vendor for a (marginal) discount.   The Nanotrasen Emergency Relief Capsule provides a port in the storm for people with an urgent need, and very little else. ## Why It's Good For The Game This one is mostly just kind of funny I'll be honest. I guess it uuuuuuuh provides a kind of pod with no GPS signal if you really want to go off the grid? But anything I write here is secondary to the point of "someone suggested it on the forums and I liked it". ## Changelog 🆑 add: Budget cuts can sometimes effect the station's supply of Emergency Bluespace Shelters. /🆑 |
||
|
|
03c964ac45 |
Reworks Duffel Bags (Zippers) (#76313)
## About The Pull Request Reworks duffel bags in line with oranges proposed plan.  Basically, instead of just making you slower all the time, they make you slower while you have them open, but give you the same speed while they're closed. As a trade off, opening and closing them takes time, 2.1 seconds (matches the sound) and 0.5 respectively. https://github.com/tgstation/tgstation/assets/58055496/555d2cd0-038e-4b0b-a693-0c66dac16f5b [Adds support for limiting extra storage, uses it to make syndie stuff cool](https://github.com/tgstation/tgstation/pull/76313/commits/d0b2bbf937435b36de3ba497c48771f563b76684) [d0b2bbf](https://github.com/tgstation/tgstation/pull/76313/commits/d0b2bbf937435b36de3ba497c48771f563b76684) Syndicate bags currently ignore downsides by just ignoring the slowdown, but that's kinda boring so let's just buff em instead. They now support holding a limited amount of bulky items (3), filtered down to things that would otherwise constitute going loud (or otherwise be useful to carry around as a loudish traitor) I may have gone a bit overboard on what I whitelisted here, lemme know yeah? I also did some fenangling with backpack uses of create_storage, I don't like this pattern it was a bad idea I think. ## Why It's Good For The Game I'm unsure if these delays enough, I think any length of time is decent since it means you need to stop moving and focus on it for a bit. My hope is this will make them a proper sidegrade, rather then something that goes unused/acts as newbie bait ## Changelog 🆑 balance: Duffelbags will now only make you slow while they are unzipped. As a tradeoff, you now need to stand still and zip/unzip them to access their contents/not move real slow. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
3396d13ed5 |
Adds shark plushie, removes pickle Rick plushie (#76206)
## About The Pull Request Come on, look at it. It's adorable.   Sprites courtesy of INFRARED_BARON Available for purchase from Cargo as a goodie. Acts as a replacement for the pickle Rick plush which is going to Brazil where it belongs  ## Why It's Good For The Game Everyone needs a shark plushie. Happy pride! ## Changelog 🆑 add: Adds a shark plush, obtainable from Cargo for a nominal fee. del: Removed plush cucumber by popular request. Cucumber has been replaced by the shark plushie in arcade machines. /🆑 |
||
|
|
903eea5a69 |
Air Sensor are Craftable, Removed from RPD UI, Have New Linking System (#75869)
## About The Pull Request **1. Craftable & Removed from RPD UI** 1. Air sensor's are now craftable 2. You can turn them on/off with hand. Even though turning off the sensor will change it to a diffrent type[from `obj/machinery/air_sensor` -> `obj/item/air_sensor`] it's I/O port's are sill preserved when turning them on although you have to assign it a new name again which is usefull if you want to change the sensor's purpose in game. 3. They can now only be deconstructed by a welding tool and should be wrenched in place to turn them on. 4. Turned off air sensor's once unwrenched can be picked up like any regular item 5. Air sensor's are removed from the RPD UI because they don't go with pipes so it logically doesn't make sense to group them with pipe related device's Removed unused code in the process https://github.com/tgstation/tgstation/assets/110812394/3439a0f3-9c48-43ac-8f4b-98135435ec13 **2. New ID System** The problem with air sensor's is that each sensor is assigned a unique ID which is then stored in `GLOB.objects_by_id_tag` list. Each sensor name it's assigned based on the gas it's trying to sense(for naming only even though it can detect other gases) So if 2 sensor's having the same ID are made they will overwrite each other in this list leaving one sensor orphaned in the world which cannot be referenced because it's value was overwritten by a new sensor having the same ID in this list. The Solution? Rather than having all atmos computer's look up sensor's from this 1 global list make each computer keep track of all sensor's it's responsible for in it's own local list[which i called `connected_sensor's`] this way 2 sensor's can have randomly generated names in the global `GLOB.objects_by_id_tag` list but the computer will know what sensor to look up in this list based on the stored sensor ID's in the `connected_sensor's` list Basically what i am getting at is now you can make as many air sensor's as you wish but you will know have to connect that sensor to the computer using a multitool. Notice in the video how i made 2 sensor's called `Supermatter Chamber Sensor's`] and every time you try to connect an sensor which has the same name[`Supermatter Chamber Sensor's` in this case] they will ovewrite the old sensor in it's list as shown in the video https://github.com/tgstation/tgstation/assets/110812394/b5283c3b-c8a1-4b94-a6a8-8ba7a0007615 **Why it's good for the game**  I agree. Also air sensor's taking up a full Tab/Section in the RPD UI wasted a lot of UI space so that's removed now. Also making the air sensor's wrenchable and pickable item's was also requested in https://github.com/tgstation/tgstation/pull/72019#issuecomment-1355499873 so you relate them to device's like meter's Another huge issue was that the number of air sensor's you can make in the world was limited because each sensor in the world must have a unique ID but that's finally fixed now so yeah make as many sensor's as you want. ## Changelog 🆑 add: air sensor's are craftable refactor: air sensor's can now be turned off by hand and can only be deconstructed by a welding tool refactor: removed `Params()` proc qol: unwrenched air sensors can be picked up & recycled like regular item's del: air sensor are removed from the RPD UI qol: air sensor's are no longer restricted by their unique ID's which mean you can craft as many air sensors as you want. /🆑 --------- Co-authored-by: Time-Green <timkoster1@hotmail.com> |
||
|
|
c0e46fabf7 |
Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving it on most welder tasks require a minimum of 1u of fuel, some longer tasks require a minimum of 2 or 3u welders now drain 1u every 5 seconds they're active ## About The Pull Request Prior to this PR welder fuel usage was random, a lot of tasks didn't use any welder fuel and welders were basically near infinite so long as you didn't use them for combat, it took 26 seconds of activity to drain 1u of fuel, that means an emergency welder alone could run for 5 minutes straight before needing a refuel After this PR all welders will drain 1u every 5 seconds instead of every 26 seconds, but welding objects won't require extra fuel anymore, making the fuel usage much more consistent. resolves #55018 ## Why It's Good For The Game Actually makes fuel tanks useful and relevant without making it obnoxious to do repetitive quick tasks like turn rods into plates, there's actually a reason to upgrade off the emergency welder now since it lasts 50 seconds rather than 5 minutes ## Changelog 🆑 qol: Welders now have a more consistent fuel usage /🆑 |
||
|
|
ae5a4f955d |
Pulls apart the vestiges of components still hanging onto signals (#75914)
## About The Pull Request Signals were initially only usable with component listeners, which while no longer the case has lead to outdated documentation, names, and a similar location in code. This pr pulls the two apart. Partially because mso thinks we should, but also because they really aren't directly linked anymore, and having them in this midstate just confuses people. [Renames comp_lookup to listen_lookup, since that's what it does](https://github.com/tgstation/tgstation/commit/102b79694fa8eb57ecf7b36032616a9e368ccced) [Moves signal procs over to their own file](https://github.com/tgstation/tgstation/commit/33d07d01fd336726b4f6f6f1b61bb0b3f11a00dc) [Renames the PREQDELETING and QDELETING comsigs to drop the parent bit since they can hook to more then just comps now](https://github.com/tgstation/tgstation/commit/335ea4ad081ec63c42cfa05856e582cca833af6e) [Does something similar to the attackby comsigs (PARENT -> ATOM)](https://github.com/tgstation/tgstation/commit/210e57051df63f88dac3dd83321236da825aae5e) [And finally passes over the examine signals](https://github.com/tgstation/tgstation/commit/65917658fb8a1e7d28ae23c9437a583d646f0302) ## Why It's Good For The Game Code makes more sense, things are better teased apart, s just good imo ## Changelog 🆑 refactor: Pulled apart the last vestiges of names/docs directly linking signals to components /🆑 |
||
|
|
cb4a836d41 |
Removes all uses of text() (#75766)
## About The Pull Request Apperantly it's deprecated. Also people misunderstand how to use it, which leads to silly looking code and redundant wraps. It is potentially useful to do a sort of format style string embedding, but we don't have anything that really warrents it IMO. ## Why It's Good For The Game Maybe byond will break on version upgrade slightly less now. Also the code's less cluttered, and boomer posting has been excised.    |
||
|
|
0c99bd28f4 |
Makes gasses use defines (#75542)
## About The Pull Request Adds defines for gasses and replaces uses I've found to instead use the defines. Can you believe I made this PR while trying to work with Xenos? This sucks! ## Why It's Good For The Game There's a lot of different uses of things like "o2" and "plasma", and they are pretty inconsistent. In some places, it's "hydrogen", in others it's "h2". In some it's "plasma", others "plasm". This unifies it all under defines so it has a less chance of breaking in the future. ## Changelog Nothing player-facing. |
||
|
|
3df5d3b42b |
Removes +x from files that shouldn't have it (#75574)
Each of these is an extra operation TGS has to do when copying the repo. Who is committing these? |
||
|
|
4b01dbe5d4 |
Connect air alarm to air sensor (#75187)
## About The Pull Request To control vents and scrubbers in ordinance, burn and engine chambers, mappers extend the area outside of the walls towards a tile where they place the air alarm. With this PR, they can now assign `chamber_id` to an air alarm and connect to the chamber with an air sensor. There is a new map helper for this. Also, this connection can be done manually. You need to click on a sensor with a multi-tool, then unlock certain air alarm, and click with a multi-tool on it. This action will link sensor to an air alarm, reporting gas mixture from the sensor tile and giving control over the vents and scrubbers of the sensor's area. ### TLDR Before: <img width="718" alt="ordnance_before" src="https://user-images.githubusercontent.com/3625094/236577769-5d79871f-2dce-43be-a20a-e6669bfbc1c6.PNG"> After: <img width="638" alt="ordnance_after" src="https://user-images.githubusercontent.com/3625094/236577786-3c7e9c9f-1501-4747-bbe1-292fc4947b0d.PNG"> This is how the area is setup on meta station right now vs if it was setup with a link  This is also true for the supermatter chamber - you can make the air alarm display the gas mix in the actual chamber and avoid using mapping area hack there too. <img width="954" alt="supermatter_after" src="https://user-images.githubusercontent.com/3625094/236578528-4650b426-6bf0-4634-a5b0-cad7a50d5b01.PNG"> ## Why It's Good For The Game The area hack is no longer needed and you can place air alarm to control certain remote area wherever you want when you design a map. Even 3 air alarms next to each other controlling 3 different burn chambers. The air alarm will also report the gas mix on the actual tile of a sensor, instead of the gas mix before the air alarm, which is usually a normal habitable environment. Also, now you can build such chambers manually because there are no precise area editing tools available in-game to repeat the area hack. ## Changelog 🆑 add: Air alarms can be connected to an area remotely via air sensor with multi-tool and corresponding access qol: Mapping: Added air alarm helper to link air alarm with certain chamber_id on map load /🆑 |
||
|
|
a98706ff8b |
Adds TTS to the game. Players can select their own voices in preferences. (#74775)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> |
||
|
|
4522f92922 |
Fixes records console sechuds glitch, ninja sechuds glitch (#75320)
## About The Pull Request Now when you set someone's arrest status with a record console, either via adding a crime or clicking the button directly, the sechud visuals will update immediately; same with the ninja hack which will now cause sechuds to update immediately as well. I believe this should close the following issues: https://github.com/tgstation/tgstation/issues/75296, https://github.com/tgstation/tgstation/issues/74469, and https://github.com/tgstation/tgstation/issues/73011 This issue: https://github.com/tgstation/tgstation/issues/73134 is related but was already mostly fixed (I don't know why it's still open) but this PR should hopefully clean up any last related bugs. ## Why It's Good For The Game Bug fixes. ## Changelog 🆑 fix: Setting arrest status with the records console now immediately updates sechud visuals. fix: Ninja security record hacks now immediately update sechud visuals. /🆑 |
||
|
|
1674f25725 |
New Medical job: The Coroner (#75065)
## About The Pull Request HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972 Adds a Coroner job to the game, they work in the Medical department and have their office in the Morgue. I was inspired to make this after I had played my first round on Paradise and messed around in there. The analyzer is copied from there (https://github.com/ParadiseSS13/Paradise/pull/20957), and their jumpsuit is also mostly stolen from it (i just copied the color scheme onto our own suits). Coroners can perform autopsies on people to see their stats, like this  They have access to Medbay, and on lowpop will get Pharmacy (to make their own formaldehyde). They also have their own Secure Morgue access for their office (doubles as a surgery room because they are edgelords or whatever) and the secure morgue trays. Secure Morgue trays spawn with their beepers off and is only accessible by them, the CMO, and HoS. It's used to morgue Antagonists. Security's own morgue trays have been removed. The job in action https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4 ### Surgery changes Autopsies are a Surgery, and I tried to intertwine this with the Dissection surgery. Dissections and Autopsies both require the Autopsy scanner to perform them, however you can only perform one on any given body. Dissections are for experiments, Autopsies is for the paper of information. Dissected bodies now also give a ~20% surgery speed boost, this was added at the request of Fikou as a way to encourage Doctors to let the Coroner do their job before reviving a body. I also remember the Medical skill, which allowed Doctors to do surgery faster on people, and I hope that this can do something like that WITHOUT adding the potential for exploiting, which led to the skill's downfall. ### Morgue Improvements Morgue trays are no longer named with pens, they instead will steal the name of the last bodybag to be put in them. Morgue trays are also removed from Brig Medical areas and Robotics, now they have to bring their corpses to the Morgue where the Coroner can keep track and ensure records are properly updated. ### Sprite credits I can't fit it all in the Changelog, so this is who made what McRamon - Autopsy scanner Tattax - Table clock sprites and in-hands CoiledLamb - Coroner jumpsuits & labcoats (inhand, on sprite, and their respective alternatives) - Coroner gloves - CoronerDrobe (the vending machine) ## Why It's Good For The Game This is mostly explained in the hackmd, but the goal of this is: 1. Increase the use of the Medical Records console. 2. Add a new and interesting way for Detectives to uncover mysteries. 3. Add a more RP-flavored role in Medical that still has mechanics tied behind it. ## Changelog 🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb add: The Coroner, a new Medical role revolving around dead corpses and autopsies. add: The Coroner's Autopsy Scanner, used for discovering the cause for someone's death, listing their wounds, the causes of them, their reagents, and diseases (including stealth ones!) qol: Morgue Trays are now named after the bodybags inside of them. balance: The morgue now has 'Secure' morgue trays which by default don't beep. balance: Security Medical area and Robotics no longer have their own morgue trays. balance: Dissected bodies now have faster surgery speed. Autopsies also count as dissections, however they're mutually exclusive. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
4de3df461e |
[MDB Ignore] Adds a unit test for typepaths that are required to be mapped onto each station map (#74985)
## About The Pull Request Inspired by #74967 and #68459 , and the fact that Tramstation regresses very often - Adds a unit test, `required_map_items`, which ensures that certain typepaths which should definitely be mapped onto every map is mapped onto every map It can also be used to ensure that items which should not be mapped in multiple times are not, among other things. I included a few examples - - Min 1, max inf of each head of staff stamps - Min 1, max 1 departmental order consoles - Min 1, max inf comms console - Min 1, max 1 Pun Pun - Min 1, max 1 Poly - Min 1, max 1 Ian If, in the future, a mapper decides they (for some reason) do not want a certain previously-required item on their map, the test can be adjusted such that it allows excluding or something, but currently it should be for items which require conscious thought about. #### QA: Why not make this a linter? I attempted to make this a linter before realizing two things 1. Someone might make a spawner which spawns the items, or they might get placed in a locker, in any case this accounts for everything on init 2. Linters run on every map, non-station maps included So I went with a test ## Why It's Good For The Game #50468 #61013 #74967 Why is it always the CMO stamp? ## Changelog Not necessary (unless I find a map missing something, then this will be updated) |
||
|
|
0178a11592 |
Fixes backwards visible message (#75130)
## About The Pull Request Whoops. These args are backwards ## Why It's Good For The Game Accurate messages ## Changelog 🆑 Melbert fix: Mime using captain's announcement visible message is correct /🆑 |
||
|
|
aba8efe4c2 |
Fixes pirates not spawning if summoned through comms console (#74983)
## About The Pull Request When #73881 was merged, it didn't change the threat spawn code when you hack a comms console. Before, it simply called the round event control which worked. However after the PR, it'd always return because `gang_list` wasn't populated and there was a check that returned if that was the case , and it only ever was populated when pirates were spawned through dynamic or by admins. ## Why It's Good For The Game pirates spawning is good i think ## Changelog 🆑 fix: Pirates summoned through hacking a comms console should actually spawn now. /🆑 |
||
|
|
0d4ec59197 |
Miner Style Points 2: Style on Everyone (#74690)
## About The Pull Request A re-open of https://github.com/tgstation/tgstation/pull/66326 with Fikou's permission Adds the style meter, it can be bought from the mining vendor for 1500 points, it is an attachment to your glasses. The style meter creates a display on your hud, with your recent actions, like attacking enemies, killing them, mining ore etc. Actions like spinning or flipping increase your score multiplier, making you get more points. Your style meter affects how much ore you get from mining rocks. By default with the meter, you get 20% less ore, but at the highest, you can get 1.2x the ore from mining. In addition, on B-tier or above, you can "hotswap" items, by attacking an item in your backpack with one in your hand (should it fit and all that). Also features a leaderboard for highest style point count! New streamable: https://streamable.com/eewi6l The following are sources of points: - Killing things - Killing big things - Killing small things - Punching things - Melee'ing things - Mining rocks and ores - Having matrix traps detonate - Hit, defuse, and detonate gibtonite - Detonate crusher marks - Scan geysers - Parry projectiles (others or your own) Oh, right. While wearing the style meter, you're able to parry any lavaland-based projectile by clicking on it or the tile it is on, which reflects it back in a 7 degree arc, making it 20% faster and 15% more damaging. Usually not very easy. Maybe-plan in the future for some syndicate variant of this (with bullet parrying and appropriate style sources, etc.), but not for this PR Thanks to Arcane, multitooling the style meter will make it play some sounds on rank-up.  https://streamable.com/nheaky Parrying in action ## Why It's Good For The Game Makes miners bring more ore in a fun way. ## Changelog 🆑 Fikou, Zonespace, Arcane for voicing add: The mining vendor now has a style meter. This meter gauges your style points and uses them to improve your ore yield. /🆑 --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> |
||
|
|
40873e0a98 |
Non-random events now provide a cause in their deadchat broadcast (#74904)
## About The Pull Request Most calls of runEvent() now provide a cause that is read out to deadchat. announce_deadchat() has been slightly adjusted to accommodate this. Previously, everything that wasn't a truly random event would broadcast with the same generic "XYZ has just been triggered!" message. Now, you get a little bit more detail as to why/what triggered the event. Some helpers in the __HELPERS/events.dm file have been made, for forcing events normally/async/after a delay (using an addtimer). This also moves a lot (but not all) instances of events being forced to these helpers. Some samples:  Traitors using uplink viruses to turn off the power/comms.  Beer nuke!  For when a traitor takes an Space Dragon final objective, which summons a carp migration event.  Wizard ritual events!  Even this one! This also changes runEvent() to run_event(), because I figured I'd be touching every single instance of the proc anyways. ## Why It's Good For The Game Better feedback, less confusion amongst deadchat's constituents. Some of them may be a bit self-explanatory, but in some cases (especially the apocalypse rune) it's beneficial to know that an admin isn't the one behind it. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog 🆑 Rhials qol: Deadchat now gets more juicy details on what has triggered a non-randomly occurring random event. code: There are now helpers for forcing events in a variety of ways. More events! More events!!!!!!! /🆑 |
||
|
|
a9919a03a2 |
fixes produce console bluescreening when viewing it as ghost (#74897)
## About The Pull Request the return was too early ## Why It's Good For The Game fixes produce console bluescreening when viewing it as ghost ## Changelog 🆑 fix: fixes produce console bluescreening when viewing it as ghost /🆑 --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
ed2f04f486 |
Experiment with replacing weakrefs in AI blackboard with deleting signals, ideally making it easier to work with and harder to cause hard deletes (#74791)
## About The Pull Request Replaces weakref usage in AI blackboards with deleting signals All blackboard var setting must go through setters rather than directly ## Why It's Good For The Game This both makes it a ton easier to develop AI for, and also makes it harder for hard deletes to sneak in, as has been seen with recent 515 prs showing hard deletes in AI blackboards (To quantify "making it easier to develop AI", I found multiple bugs in existing AI code due to the usage of weakrefs.) I'm looking for `@Jacquerel` `@tralezab` 's opinions on the matter, also maybe `@LemonInTheDark` if they're interested ## Changelog 🆑 Melbert refactor: Mob ai refactored once again /🆑 |
||
|
|
dafb63dea5 |
[NO GBP] Wording & Rounding tweaks for produce console (#74893)
1. Rewords "Total Cost" to just "Total" so text does not overflow to the next line & improves readability 2. Now just one failure message if you don't have enough points for cargo/express mode to keep it consistent 3. Rounds the total cost before confirming your final order so you don't have decimal values left in your bank account/mining points |
||
|
|
62e9268cc0 |
Refactors genetic damage component to be a status effect (#74799)
## About The Pull Request The genetic damage component looked like a status effect, swam like a status effect, quacked like a status effect, but wasn't a status effect. Irradiated component is also guilty of this, but it has the excuse of also getting applied to items. This one only applies to mobs though, so... ## Why It's Good For The Game Easier to maintain code, that's about it. ## Changelog Not player facing. |
||
|
|
349d6f9e0e |
Produce consoles now grey out their buttons if the cost criteria aren't met & have dynamic window sizes. (#74773)
## About The Pull Request Fixes #74645 Fixes #72536 If your total order is less than 200 credits/mining points then the purchase button is greyed out telling you just that  Bonus. If your cart is empty then the express button is also greyed out telling you to order atleast 1 item  Even more bonus, the width of the window is dynamically adjusted based on the number of order categories so golem mining console is no longer obscured  Code changes 1. `var/cargo_cost_multiplier` : as the name implies is now the cost applied to all stuff ordered through cargo. it takes top priority(because we assume it will always be cheaper than express) and all item costs are multiplied with this before being displayed on the UI. So mining console has this value as 0.65 as intended 2. `proc/retrive_points()` : is used to retrieve the type of points this console is dealing with from the mobs id card, so for mining it returns the card's mining point's, for others it returns the card's cash, if you want to introduce a new currency type and make your own console for it, make sure you override this proc 3. `proc/subtract_points()` : is used to subtract these points(money, mining points) from the id card after the order is confirmed, return true if it was successful, false otherwise to cancel the order ## Changelog 🆑 fix: order consoles cancelling order's less than 200 but still subtracting money, mining points from the player code: multiplier for all shipments made through cargo refactor: 2 new procs retrive_points() & subtract_points() to dela with different types /🆑 |
||
|
|
2b2cb3dff6 |
Hologram Touchup (Init savings edition) (#74793)
## About The Pull Request ### Polishes and Reworks Holograms Hologram generation currently involves a bunch of icon operations, which are slow. Not to mention a series of get flats for the human models, which is even worse. We lose 0.05 seconds of init to em off just the 2 RCD holograms. it hurts man. So instead, let's use filters and render steps to achive the same effect. While I'm here I'll dim the holo light and make it blue, make the hologram and its beam emissive (so they glow), and do some fenangling with move_hologram() (it doesn't clear the hologram off failure anymore, instead relying on callers to do that) to ensure holocalls can't be accidentially ended by moving out of the area. Ah and I added RESET_ALPHA to the emissive appearance flags, cause the alpha does override and fuck with color rendering, which ends up looking dumb. If we're gonna support this stuff it should be first class not accidential. ### Makes Static Not Shit While I'm here (since holograms see static) lets ensure the static plane is always visible if you're seeing through an ai eye. The old solution was limited to applying it to JUST ais, which isn't satisfactory for this sort of thing and missed a LOT of cases (I didn't really get how ai eyes worked before I'ma be honest) I'm adding a signal off the hud for it detecting a change in its eye here. This is semi redundant, but avoids unneeded dupe work, so I'm ok with it. The pipeline here is less sane then I'd like, but it works and that's enough ## Why It's Good For The Game  More pretty, better ux, **static works** ## Changelog 🆑 add: Holograms glow now, pokes at the lighting for holocalls in general a bit to make em nicer. qol: You can no longer accidentally end a holocall (as a non ai) by leaving the area. Felt like garbage fix: Fixes static rendering improperly if viewed by a non ai /🆑 |
||
|
|
4c48966ff8 |
Renames delta time to be a more obvious name (#74654)
This tracks the seconds per tick of a subsystem, however note that it is not completely accurate, as subsystems can be delayed, however it's useful to have this number as a multiplier or ratio, so that if in future someone changes the subsystem wait time code correctly adjusts how fast it applies effects regexes used git grep --files-with-matches --name-only 'DT_PROB' | xargs -l sed -i 's/DT_PROB/SPT_PROB/g' git grep --files-with-matches --name-only 'delta_time' | xargs -l sed -i 's/delta_time/seconds_per_tick/g' |
||
|
|
d615a2a697 |
Telescreen Updating Fix (#74424)
## About The Pull Request Fixes https://github.com/tgstation/tgstation/issues/58843 Fixes the issue of only static being shown when closing the telescreen while looking at a camera, then reopening the telescreen and selecting the camera. Removes the static properly when reopening the telescreen, instead of skipping it. ## Why It's Good For The Game For most telescreens it wasn't too big of an issue, since it would just mean reloading it by switching to a working camera, then back to the desired camera. However, for telescreens connected to networks with only one camera this isn't possible, meaning the telescreens become unusable after closing it. ## Changelog 🆑 fix: fixes telescreens showing static when reopening a camera /🆑 |
||
|
|
b0a44b0d77 |
Removes emergency meetings (#74437)
## About The Pull Request Removes emergency meetings. Uh, let me know if I missed anything ## Why It's Good For The Game We gotta come up with NEW ways to ruin the round each year, this one's so old and busted ## Changelog 🆑 del: Votes out some sussy emergency meeting code /🆑 |
||
|
|
c0ef4ba907 |
Adds the Dark Matt-eor when you emag a stupid amount of meteor shields + lots of meteor file sorting + qol + dark matter singularity + dark matt-eor summoning final traitor objective (#74330)
## About The Pull Request <details> <summary>Dark Matt-eor Image</summary>  </details> > A barely visible blur in the cosmic darkness, like a ghostly shadow on a moonless night. A piercing howl in the vacuum of space, as if it were tearing the fabric of reality. A twisted halo of light around it, bending and breaking the rays of distant suns. A shower of quantum sparks, flickering and fading in its wake. A dark matter meteor (dark matt-eor) is a wonder to witness, and to dread. > A sudden impact, like a hammer blow to the heart of the station. A violent tremor, shaking and shattering the metal walls and windows. A deafening roar, as the air rushes out of the breached hull. A blinding flash, as the dark matter meteor unleashes its hidden energy. A tiny black hole, forming and growing in the center of the station. A relentless pull, dragging everything towards the abyss. A dark matter meteor is incredibly deadly. Emagging too many meteor shields will summon a dark matt-eor. This comes with several warnings, and after awhile, warns the station that someone is trying to summon a dark matteor. The dark matt-eor itself is not that damaging in its impact, but drops a singularity in its final resting place. ## Why It's Good For The Game It's a new way to terrorize a round as an antagonist. Before, emagging a lot of meteor shields would basically make meteor showers the only event that can run, which is cool, but since constant meteor waves are going to destroy the station, let's also throw in the mother of all meteors! This also adds warnings to spamming emagging meteor shields, which imo needs it. The round ends when someone spams emagged meteor shields, and since they're meteor shields nobody is going to reasonably check on them. ## Changelog 🆑 add: The dark matt-eor add: Summon a dark matt-eor final traitor objective add: Dark matter singularity variant, which can't grow as big as a regular singularity but hungers for blood code: cleaned up/sorted meteor shield code, satellite control, and more qol: added a lot of feedback to interacting with meteor shields balance: emagging a lot of meteor shields warns the station, but emagging enough of them summons a Dark Matt-eor. /🆑 |
||
|
|
ccef887efe |
Lints Against Unmanaged Local Defines (#74333)
# MAINTAINER - USE THE BUTTON THAT SAYS "MERGE MASTER" THEN SET THE PR TO AUTO-MERGE! IT'S MUCH EASIER FOR ME TO FIX THINGS BEFORE THEY SKEW RATHER THAN AFTER THE FACT. ## About The Pull Request Hey there, This took a while to do, but here's the gist: Python file now regexes every file in `/code` except for those that have some valid reason to be tacking on more global defines. Some of those reasons are simply just that I don't have the time right now (doing what you see in this PR took a few hours) to refactor and parse what should belong and what should be thrown out. For the time being though, this PR will at least _halt_ people making the mistake of not `#undef`ing any files they `#define` "locally", or within the scope of a file. Most people forget to do this and this leads to a lot of mess later on due to how many variables can be unmanaged on the global level. I've made this mistake, you've made this mistake, it's a common thing. Let's automatically check for it so it can be fixed no-stress. Scenarios this PR corrects: * Forgetting to undef a define but undeffing others. * Not undeffing any defines in your file. * Earmarking a define as a "file local" define, but not defining it. * Having a define be a "file local" define, but having it be used elsewhere. * Having a "local" define not even be in the file that it only shows up in. * Having a completely unused define* (* I kept some of these because they seemed important... Others were junked.) ## Why It's Good For The Game If you wanna use it across multiple files, no reason to not make it a global define (maybe there's a few reasons but let's assume that this is the 95% case). Let me know if you don't like how I re-arranged some of the defines and how you'd rather see it be implemented, and I'd be happy to do that. This was mostly just "eh does it need it or not" sorta stuff. I used a pretty cool way to detect if we should use the standardized GitHub "error" output, you can see the results of that here https://github.com/san7890/bruhstation/actions/runs/4549766579/jobs/8022186846#step:7:792 ## Changelog Nothing that really concerns players. (I fixed up all this stuff using vscode, no regexes beyond what you see in the python script. sorry downstreams) |
||
|
|
e0b758f074 |
Adds IS_TRAITOR macro (#74293)
## About The Pull Request i was making another PR and found that we have cultist, heretic, and nuke op IS macros but not one for traitors this adds one and then replaces it where applicable, mostly in checks where a traitor device does something different if you are not a traitor ## Why It's Good For The Game better for people making traitor only devices to have this macro, as it is more clear and also cleaner in general i think ## Changelog 🆑 code: adds IS_TRAITOR macro /🆑 |
||
|
|
c735e90ce5 |
Fix missing spaces in grocery console express messages (#74104)
Separating your sentences with spaces is important, kids. |
||
|
|
ccc144a08e |
Fixes malf camera upgrade appearing on security camera consoles (#73970)
## About The Pull Request Wow that was easier than I thought Malf AI camera upgrade no longer shows up camera consoles. Advanced Camera consoles probably still show it but those are harder to get so someone else can fix those ## Why It's Good For The Game It is admittedly very funny to instantly valid a malf ai but probably not fun ## Changelog 🆑 Melbert fix: Malf AI's xray camera upgrade no longer shows on station security camera consoles /🆑 |
||
|
|
60e85fa947 |
Polishes some side sources of light and color (#73936)
## About The Pull Request [Circuit Floor Polish](https://github.com/tgstation/tgstation/commit/6b0ee9813271f693ceb44ad42277c36ef2e71268) Circuit floors glow! but it looks like crap cause it's dim and the colors are washed out. I'd like to make them look nicer. Let's make them more intense and longer range, and change the colors over to more vivid replacements. While I'm here, these should really use power and turn on and off based off that. Simple enough to do, just need to hook into a signal (and add a setter for turf area, which cleans up other code too). [Desklamp Upgrade](https://github.com/tgstation/tgstation/commit/8506b13b9c97bf740c3e97db04450555387dd126) Desklamps look bad. They're fullwhite, have a way too large range.Crummy. Let's lower their lightrange from 5 to 3.5, and make the ornate ones warmer, and the more utilitarian ones cooler. The clown one can be yellow because it's funny I'm renaming a color define here so I'm touching more files then you'd expect [Brightens Niknacks](https://github.com/tgstation/tgstation/pull/73936/commits/835bae28e9eb9946be53c9f5dac0a0a39f15ef21) Increases the light range of request consoles, status displays, newscasters, and air alarms (keycard machines too, when they're awaiting input at least) Increases the brightness of air alarms, I think they should be on par with apcs, should be able to tell when they're good/bad. Increases the brightness of vending machines (I want them to light up the tiles around them very lightly, I think it's a vibe) Fixes a bug with ai status displays where they'd display an emissive even if they didn't have anything on their screen, looking stupid. This was decently easy but required a define. Looked really bad tho ## Why It's Good For The Game Pretty <details> <summary> Circuit Floors </summary> Old   New   </details> <details> <summary> Desk Lights </summary> Old   New   </details> The niknack changes are more minor so I'm not gonna grab photos for them. I can if you'd like but I don't think it's necessary. Mostly a vibes in dark spaces sorta thing ## Changelog 🆑 add: I made circuit floors brighter and more vivid. add: Made air alarms, vending machines, newscasters, request consoles, status displays and keycard machines slightly "brighter" (larger light range, tho I did make air alarms a bit brighter too) add: Tweaked desklamps. Lower range, and each type gets its own coloring instead of just fullwhite. fix: AI displays are no longer always emissive, they'll stop doing it if they aren't displaying anything. Hopefully this'll look nicer /🆑 |
||
|
|
73172f8836 |
Re-implements Physical and Mental statuses in crewmember Medical Records (#73882)
## About The Pull Request These changes re-implement the functionality for Physical and Mental Statuses, which used to be present in Medical Records (visible via medical filing cabinents, medical records consoles, and MED-HUDs). These Physical/Mental statuses can once again be updated through examining a crewmember (while wearing a Med-HUD), or through the new TGUI interface for medical records consoles. ## Why It's Good For The Game Primarily, this resolves the bugs mentioned in [Issue #73477](https://github.com/tgstation/tgstation/issues/73477), and restores functionality which appears to have been accidentally removed via [PR #72725](https://github.com/tgstation/tgstation/pull/72725). Additionally, the re-implementation of these statuses allows for more in-depth medical RP (and bureaucracy), especially in regards to the Psychiatrist role and managing crewmember sanity. ## Changelog 🆑 fix: Re-implements physical and mental statuses in crewmember medical records. fix: Re-implements changing a crewmember's physical/mental status via a Med-HUD. /🆑 Edit: Image of the new TGUI buttons which now handle Physical/Mental statuses.  Closes #73477 |
||
|
|
bd6a018083 |
Adds Pinatas that can be purchased by cargo and clown operatives! (#73868)
## About The Pull Request Pinata's drop various items when struck with a sufficiently powerful weapon. This PR adds two types, a standard one which can be bought from cargo which contains various candy items and a syndicate one which contains both candy items and explosives purchasable by clown operatives. The pinata functionality is also a component so admins can turn any structure/machine/mob into a pinata and customize the "candy" inside Sprites by @Mey-Ha-Zah animated versions by me ## Why It's Good For The Game Adds a cute little celebration themed structure that can be bought by players to accommodate a celebration based gimmicks or the party trait. I think the options on things to do as a crew during a celebration are a bit limited at present with most of the options being making/purchasing food, activity wise the main example of a celebration item is pin the tail on the corgi which is a bit uninteresting, the pinata on the other hand is more cathartic and provides a "reward" in the form of various candy items for people who participate in smashing it. I also think its just funny to have clown operative gambling half their TC to try and get explosives. ## Changelog 🆑 Mey-Ha-Zah & NamelessFairy add: Added pinata crates to cargo, they contain various candy items. Fun at parties. add: Clown operatives can now purchase a weapons grade pinata, this contains both candy and explosives. Still fun at parties. admin: Admins can now turn players, mobs and objects into pinata's with the new pinata component. /🆑 |
||
|
|
8b2aed0342 |
New Station Trait, Employee Birthday! (#73751)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Adds a new neutral station trait the announces to the crew its a member of staff's birthday, spreads some confetti/balloons around and gives out some birthday themed items including hats, new toys and cake ingredients for the chef. The mechanical impact of the trait is quite minimal only giving out some fluff items and giving the janitor some extra work. However the event has a lot of potential roleplay impact by singling out a crewmember and informing everyone about their birthday, I can foresee players using this as an opportunity to run birthday themed gimmicks or give one specific player preferential treatment for the shift which should allow for some interesting stories to be produced. <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Partially explained in my about section but in short I think a lot of the station traits we have at the moment are very mechanically driven and we could use a more open ended roleplay prompt themed one which this one provides. The idea of one player getting put in the spotlight while not being an antagonist is also something I can see potentially great stories come from. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: New Neutral Station Trait, "Employee Birthday", its someone on the crews birthday, make sure to wish them a happy birthday and perhaps get them a gift. add: Two new party themed items have been added to the arcade prize pool, the party horn and a box of party poppers. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> |
||
|
|
b2e53feee2 |
Adds a stack_trace for emissives with invalid icon_states, fixes all that appeared roundstart (#73678)
## About The Pull Request So, this spiraled from one missing icon being fixed to an entire check for said icons. Several icon files no longer use error icons because its assumed that the checks will handle any missing ones, but the checks don't apply to emissives nor overlays at all. This led to the radsuit having an emissive but no icon_state for it - a relic of the old radsuit. This was only noticed because of a downstream with an error icon appearing for it... I was curious how many were actually having the same issue, so I made a small little stack_trace in the mutable_appearance proc. There were like, 2k. Lots of them were icons named, like, "transparent" or "blank" too... I moved that check to the emissives proc because I semi-understand that system so could actually fix it, and it moved to around fourty roundstart. Much more achievable. (The error usually has more info if you click on it, including the item that caused it. I dunno how to add that to the check itself because of where it's located, though.)  This fixes all the ones I could find, including... Nonexistant icons that shouldn't be adding emissives on: - Empty Barsign - Radsuit - Mass Driver Controllers - Telescreens - Aux Base Consoles - PanDEMIC - Kobayashi computer (holodeck) - Abductor camera console - Syndie drop pod - BSA controller Entirely missing icons on: - Pwr Game Vendor (this was just misnamed) - Generic Soda Vendor - Engivend - Security Laptop (proud of this one.,.,)  There are no doubt more of them hidden about, but I don't really know what I'm doing... If there's a check that'd be better than this, please review telling me what to change <3 ## Why It's Good For The Game Fixes missing icons, fixes attempts to add icons where we don't need them, and adds a check to help fix more of the two issues as they occur. ## Changelog 🆑 fix: fixed missing emissives on the Engivend, Pwr-Game Soda, and generic Soda vendors. Also fixed the seclaptop having no valid screen icon! fix: fixed a few items trying to apply emissives when they shouldn't. code: added a stack_trace for emissives with missing icon states. /🆑 |
||
|
|
574e131ca2 |
Thermomachines no longer self-destruct when built on blocked ports (#73580)
## About The Pull Request Ever felt the utter pain when you make a new thermomachine, hook it up perfectly and then screwdriver it only for it to immediately become a pile of iron and components without warning? This PR fixes that. Instead of doing what it did previously, it unanchors itself and opens its panel. Right, almost forgot to mention, failing to wrench down a thermomachine no longer bonks it with the wrench. Due to not being allowed to use visual messages for when the port is blocked, I've added a mob/user variable to all on_construction() procs. (This allowed me to use balloon messages instead.) ## Why It's Good For The Game Saves a lot of unnecessary headaches when working with thermomachines. ## Changelog 🆑 fix: Atmosians have finally convinced the thermomachines to not self-destruct when built on blocked ports. fix: Failing to wrench down a thermomachine no longer hits it with the wrench. /🆑 |
||
|
|
1401990057 |
Fixes offstation roles being able to purge crew records (#73690)
## About The Pull Request (Partially) Fixes #73689 **(It may also be sensible to just disable Syndicate records consoles from purging outright. I went for the more generic approach but if another maintainer prefers this solution, I can do that as well.)** Off station roles with access to sec / med record consoles can't purge or expunge records. Also re-adds some missing logs for the purging of records. ## Why It's Good For The Game I can't recall for the life of me if Comms agents could purge records prior to the refactor, and if not, where that code was housed because I couldn't find any. In any case, it's a little too easy and a little too griefy to let ghost roles mess with records. Balance pr? Fix pr? *shrug ## Changelog 🆑 Melbert fix: Off station roles can't purge the station's records fix: Purging records is logged again /🆑 |
||
|
|
50b37c8c7f |
Faction defines (#73681)
## About The Pull Request Quite a lot of mobs had faction defines as a string, which always has a chance for error. For example, the clown mob spawner had their faction written as "clown", when the official faction name was "clowns", and a define existed for it anyways! This PR moves every single string based factions over here. No references or special role factions. Hopefully I didn't miss anything. I also moved a global define used for picking your uplink provider's flavour to the only file that used it, datum_traitor.dm, and renamed them a bit to avoid confusion. I have also noticed that the mimic faction was assigned to the petrified player with += instead of |=. |= would ensure no duplicate factions, so I have changed it. Future improvement: I have noticed that there is a lot of bloat with factions that contain only one or two entries (examples: gnomes, floating eyeballs, penguins, the pet lizards), and some always appear in pairs (vines and plants, the rare exceptions being killer tomatoes and strange reagent spawned pine trees), but trimming consolidating them is a matter for a different time. ## Why It's Good For The Game Makes assigning factions a bit less error prone. I can finally remove the ```/// Later all mob factions will be moved here and their current factions replaced with faction defines.``` comment. Later is NOW. ## Changelog Nothing player facing |
||
|
|
e6ef38fd36 |
Fixes player created security records being unprintable for wanted/missing posters. (#73666)
## About The Pull Request If a player created a security record during a round and attempted to print it the printing process would runtime and result in the printer being unusable. As a side effect of fixing this I've discovered an annoying bug with posters with them defaulting to the bottom left corner of a record. So currently mugshot uploads has been restricted to 32x32 pixels with approval from @jlsnow301 . Ideally at some point a player exposed photo cropping system can be implemented to make it easier to create mugshots using larger photos. ## Why It's Good For The Game Fixes a bug. ## Changelog 🆑 fix: You can now create wanted/missing posters using player created security records. Due to a visual bug and usability issue photos above 1 by 1 meters in size will no longer work for mugshots in records. /🆑 |
||
|
|
b97bc18402 |
fixes order vendor loading screens (#73615)
## About The Pull Request loading screens from the mining vendor when attempting to purchase multiple items are gone before: https://user-images.githubusercontent.com/95004236/221068949-fb4f4a58-2a3a-47af-9087-eaaa1ebc3988.mp4 after: https://user-images.githubusercontent.com/95004236/221069000-92571e48-7386-4b50-bec9-39f06cc5cbda.mp4 ## Why It's Good For The Game faster buying ## Changelog 🆑 fix: the order vendors will not constantly load when trying to buy multiple items /🆑 |
||
|
|
ab307032ed |
Nightvision Rework (In the name of color) (#73094)
## About The Pull Request Relies on #72886 for some render relay expansion I use for light_mask stuff. Hello bestie! Night vision pissed me off, so I've come to burn this place to the ground. Two sections to discuss here. First we'll talk about see_in_dark and why I hate it, second we'll discuss the lighting plane and how we brighten it, plus introducing color to the party. ### `see_in_dark` and why it kinda sucks https://www.byond.com/docs/ref/#/mob/var/see_in_dark See in dark lets us control how far away from us a turf can be before we hide it/its contents if it's dark (not got luminosity set) We currently set it semi inconsistently to provide nightvision to mobs. The trouble is stuff that produces light != stuff that sets luminosity. The worst case of this can be seen by walking out of escape on icebox, where you'll see this  Snow draws above the lighting plane, so the snow will intermittently draw, depending on see_in_dark and the luminosity from tracking lights. This would in theory be solvable by modifying the area, but the same problem applies across many things in the codebase. As things currently stand, to be emissive you NEED to have a light on your tile. People are bad at this, and honestly it's a bit much to expect of them. An emissive overlay on a canister shouldn't need an element or something and a list on turfs to manage it. This gets worse when you factor in the patterns I'm using to avoid drawing lights above nothing, which leads to lights that should show, but are misoffset because their parent pixel offsets. It's silly. We do it so we can have things like mesons without just handing out night vision, but even there the effect of just hiding objects and mobs looks baddddddd when moving. It's always bothered me. I'll complain about mesons more later, but really just like, they're too bright as it is. I'm proposing here that rather then manually hiding stuff based off distance from the player, we can instead show/hide using just the lighting plane. This means things like mesons are gonna get dimmer, but that's fine because they suck. It does have some side effects, things like view() on mobs won't hide stuff in darkness, but that's fine because none actually thinks about view like that, I think. Oh and I added a case to prevent examining stuff that's in darkness, and not right next to you when you don't have enough nightvision, to match the old behavior `see_in_dark` gave us. Now I'd like to go on a mild tangent about color, please bare with me ### Color and why `lighting_alpha` REALLY sucks You ever walk around with mesons on when there's a fire going, or an ethereal or firelocks down. You notice how there isn't really much color to our lights? Doesn't that suck? It's because the way we go about brighting lighting is by making everything on the lighting plane transparent. This is fine for brightening things, but it ends up looking kinda crummy in the end and leads to really washed out colors that should be bright. Playing engineer or miner gets fucking depressing. The central idea of this pr, that everything else falls out of, is instead of making the plane more transparent, we can use color matrixes to make things AT LEAST x bright. https://www.byond.com/docs/ref/#/{notes}/color-matrix Brief recap for color matrixes, fully expanded they're a set of 20 different values in a list Units generally scale 0-1 as multipliers, though since it's multiplication in order to make an rgb(1,1,1) pixel fullbright you would need to use 255s. A "unit matrix" for color looks like this: ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ) ``` The first four rows are how much each r, g, b and a impact r, g, b and well a. So a first row of `(1, 0, 0, 0)` means 1 unit of r results in 1 unit of r. and 0 units of green, blue and alpha, and so on. A first row of `(0, 1, 0, 0)` would make 1 red component into 1 green component, and leave red, blue and alpha alone, shifting any red of whatever it's applied to a green. Using these we can essentially color transform our world. It's a fun tool. But there's more. That last row there doesn't take a variable input like the others. Instead, it ADDS some fraction of 255 to red, green, blue and alpha. So a fifth row of `(1, 0, 0, 0)` would make every pixel as red as it could possibly be. This is what we're going to exploit here. You see all these values accept negative multipliers, so we can lower colors down instead of raising them up! The key idea is using color matrix filters https://www.byond.com/docs/ref/#/{notes}/filters/color to chain these operations together. Pulling alllll the way back, we want to brighten darkness without affecting brighter colors. Lower rgb values are darker, higher ones are brighter. This relationship isn't really linear because of suffering reasons, but it's good enough for this. Let's try chaining some matrixes on the lighting plane, which is bright where fullbright, and dark where dark. Take a list like this ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, -0.2, -0.2, -0.2, 0 ) ``` That would darken the lighting a bit, but negative values will get rounded to 0 A subsequent raising by the same amount ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0.2, 0.2, 0.2, 0 ) ``` Will essentially threshold our brightness at that value. This ensures we aren't washing out colors when we make things brighter, while leaving higher values unaffected since they basically just had a constant subtracted and then readded. ### But wait, there's more You may have noticed, we gain access to individual color components here. This means not only can we darken and lighten by thresholds, we can COLOR those thresholds. ``` list(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0.1, 0.2, 0.1, 0 ) ``` Something like the above, if applied with its inverse, would tint the darkness green. The delta between the different scalars will determine how vivid the color is, and the actual value will impact the brightness. Something that's always bothered me about nightvision is it's just greyscale for the most part, there isn't any color to it. There was an old idea of coloring the game plane to match their lenses, but if you've ever played with the colorblind quirk you know that gets headachey really fast. So instead of that, lets color just the darkness that these glasses produce. It provides some reminder that you're wearing them, instead of just being something you forget about while playing, and provides a reason to use flashlights and such since they can give you a clearer, less tinted view of things while retaining the ability to look around things. I've so far applied this pattern to JUST headwear for humans (also those mining wisps) I'm planning on furthering it to mobs that use nightvision, but I wanted to get this up cause I don't wanna pr it the day before the freeze. Mesons are green, sec night vision is red, thermals orange, etc. I think the effect this gives is really really nice. I've tuned most things to work for the station, though mesons works for lavaland for obvious reasons. I've tuned things significantly darker then we have them set currently, since I really hate flat lighting and this system suffers when interacting with it. My goal with these is to give you a rough idea of what's around you, without a good eye for detail. That's the difference between say, mesons, and night vision. One helps you see outlines, the other gives you detail and prevents missing someone in the darkness. It's hard to balance this precisely because of different colored backgrounds (looking at you icebox) More can be done on this front in future but I'm quite happy with things as of now ### **EDIT** I have since expanded to all uses of nightvision, coloring most all of them. Along the way I turned some toggleable nightvision into just one level. Fullbright sucks, and I'd rather just have one "good" value. I've kept it for a few cases, mostly eyes you rip out of mobs. Impacted mobs are nightmares, aliens, zombies, revenants, states and sort of stands. I've done a pass on all mobs and items that impact nightvision and added what I thought was the right level of color to them. This includes stuff like blobs and shuttle control consoles As with glasses much of this was around reducing vision, though I kept it stronger here, since many of these mobs rely on it for engaging with the game <details> <summary> Technical Changes </summary> #### Adds filter proc (the ones that act like templates) support to filter transitions. Found this when testing this pr, seemed silly. #### Makes our emissive mask mask all light instead This avoids dumbass overlay lighting lighting up wallmounts. We switch modes if some turfflags are set, to accomplish the same thing with more overhead, and support showing things through the darkness. Also fixes a bug where you'd only get one fullscreen object per mob, so opening and closing a submap would take it away Also also fixes the lighting backdrop not actually spanning the screen. It doesn't actually do anything anymore because of the fullscreen light we have, but just in case that's unsued. Needs cleanup in future. #### Moves openspace to its own plane that doesn't draw, maxing its color with a sprite This is to support the above We relay this plane to lighting mask so openspace can like, have lighting #### Changes our definition of nightvision to the light cutoff of night vision goggles and such Side affect of removing see_in_dark. This logic is a bit weak atm, needs some work. #### Removes the nightvision spell It's a dupe of the nightvision action button, and newly redundant since I've removed all uses of it #### Cleans up existing plane master critical defines, ensures trasnparent won't render These sucked Also transparent stuff should never render, if it does you'll get white blobs which suck </details> ## Why It's Good For The Game Videos! (Github doesn't like using a summary here I'm sorry) <details> Demonstration of ghost lighting, and color https://user-images.githubusercontent.com/58055496/215693983-99e00f9e-7214-4cf4-a76a-6e669a8a1103.mp4 Engi-glass mesons and walking in maint (Potentially overtuned, yellow is hard) https://user-images.githubusercontent.com/58055496/215695978-26e7dc45-28aa-4285-ae95-62ea3d79860f.mp4 Diagnostic nightvision goggles and see_in_dark not hiding emissives https://user-images.githubusercontent.com/58055496/215692233-115b4094-1099-4393-9e94-db2088d834f3.mp4 Sec nightvision (I just think it looks neat) https://user-images.githubusercontent.com/58055496/215692269-bc08335e-0223-49c3-9faf-d2d7b22fe2d2.mp4 Medical nightvision goggles and other colors https://user-images.githubusercontent.com/58055496/215692286-0ba3de6a-b1d5-4aed-a6eb-c32794ea45da.mp4 Miner mesons and mobs hiding in lavaland (This is basically the darkest possible environment) https://user-images.githubusercontent.com/58055496/215696327-26958b69-0e1c-4412-9298-4e9e68b3df68.mp4 Thermal goggles and coloring displayed mobs https://user-images.githubusercontent.com/58055496/215692710-d2b101f3-7922-498c-918c-9b528d181430.mp4 </details> I think it's pretty, and see_in_dark sucks butt. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: The darkness that glasses and hud goggles that impact your nightvision (think mesons, nightvision goggles, etc) lighten is now tinted to match the glasses. S pretty IMO, and hopefully it helps with forgetting you're wearing X. balance: Nightvision is darker. I think bright looks bad, and things like mesons do way too much balance: Mesons (and mobs in general) no longer have a static distance you can see stuff in the dark. If a tile is lit, you can now see it. fix: Nightvision no longer dims colored lights, instead simply thresholding off bits of darkness that are dimmer then some level. /🆑 |
||
|
|
64de1617b2 |
Refactors lizard fake canned food into real canned food (#73469)
## About The Pull Request /obj/item/food/canned_jellyfish, /obj/item/food/desert_snails, and /obj/item/food/larvae are now all /canned subtypes. All this means is that to eat them, you use them once, and now they drop an empty tin rubbish item. ## Why It's Good For The Game Making fake false versions of real types that exist is such a pet peeve of mine, we recently had a bug from it where the snails would go bad. But even with that fixed you're just chomping the container of snails and it's not the same behavior as all the other cans grumgrugmrg I FIXED IT. ## Changelog 🆑 refactor: Lizard related canned food now acts like canned food /🆑 |
||
|
|
a1ada2c9ef |
Refactor, improve, and rename canUseTopic to be can_perform_action (#73434)
This builds on what #69790 did and improved the code even further. Notable things: - `Topic()` is a deprecated proc in our codebase (replaced with Javascript tgui) so it makes sense to rename `canUseTopic` to `can_perform_action` which is more straightforward in what it does. - Positional and named arguments have been converted into a easier to use `action_bitflag` - The bitflags adds some new checks you can use like: `NEED_GRAVITY | NEED_LITERACY | NEED_LIGHT` when you want to perform an action. - Redundant, duplicate, or dead code has been removed. - Fixes several runtimes where `canUseTopic` was being called without a proper target (IV drips, gibber, food processor) - Better documentation for the proc and bitflags with examples |
||
|
|
374c8340c8 |
Console Hack / Unfavourable Events won't run ghost roles which don't have time to do anything (#73343)
## About The Pull Request Fixes #69201 The dynamic subsystem will never roll a new antagonist once the shuttle is past the point of no return, but this check is bypassed by Console Hacks and Unfavourable Event rolls (which are chiefly triggered from console hacks, but also from when the Revolution wins). I have made these procs more discerning. Unfavourable Events will now never pick any heavy dynamic midround if the shuttle is past the point of no return. Console Hacking will now never spawn sleeper agents if the shuttle is past the point of no return, and won't spawn Fugitives or Pirates if the shuttle is called at all even if it can still be recalled It's my feeling that given the need to get organised and move a ship to the station there isn't really time for either of those events to actually start properly rolling, but if you feel like that information might be metagamed in some way by messing around with the shuttle (not sure why or to what end, but it's technically manipulatable if you know how the code works?) I can just give these the same restriction as Traitor even if it means the bounty hunters risk showing up after the shuttle has already left. ## Why It's Good For The Game To some extent it's your own fault for clicking the popup while knowing full well how much round time is left until the game ends, but it's still disappointing to see a Blob or Pirates or Wizard alert appear at a time when they can't possibly do anything interesting. This is more true for the Pirate and Fugitive events because they involve teamwork, placing a space ship, travel between the ship and the station, and in the case of Fugitives its own internal five minute timer before the other team actually arrives. ## Changelog 🆑 fix: Hacking the Comms Console or winning a Revolution can no longer spawn antagonists if there's not enough time left in the round for them to antagonise anyone. /🆑 |
||
|
|
1677257dd9 |
Records hotfix [NO GBP] (#73363)
## About The Pull Request A remake of #73169 Repaths records consoles to their own subtype Fixes some weirdness with observers logging into sec/med consoles Fixes security notes not being able to be set etc ## Why It's Good For The Game Bug fixes and cleaner code ## Changelog 🆑 fix: Security can set notes through consoles again fix: Observers are now properly logged out of record consoles /🆑 --------- Co-authored-by: Jeremiah <jlsnow301@pm.me> |
||
|
|
32cc189886 | blackbox data for order consoles (#73328) | ||
|
|
cfb2d9feb9 |
Meteor events won't try and run on icebox (#73241)
## About The Pull Request While I was trying to improve changeling meteor spawning on Icebox I noticed that several other meteor-like events don't seem to be blocked on Icebox either even though they don't do anything. I added a new capability to events which can prevent them being loaded under certain map conditions (specifically: whether the map is in space or not). Currently there's no events which _only_ run on a planet but, now someone could add one I guess? Now all of the events which spawn meteors are filtered out on icebox and you can't absent-mindedly try to trigger them.  Also a couple of dynamic options had this applied too, chiefly ones which expect you to be able to fly a space ship to the space station. ## Why It's Good For The Game These events shouldn't run on Icebox (or soon, Chilled) because they don't do anything there. AFAICT Meteors were getting as far as trying to spawn, then would retry trying to find space tiles which didn't exist until they failed 10 times, then give up. Once per every meteor it tried to spawn. Gross. ## Changelog 🆑 fix: Meteors can't be triggered automatically or manually on Icebox, where they do nothing. fix: Hacking a comms console as a traitor won't try to summon meteors or pirates to Icebox, where they do nothing. /🆑 |