mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-07 06:48:44 +00:00
7a763a115232e75a098d7ee8cff09511be06757b
778 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
fe7363e5ee |
PDA Alert Level Readout (#89173)
## About The Pull Request Adds an alert level notice on the main PDA screen. The notice starts out as simple colored text when the user is not in any danger or concern. If the user is in danger, it becomes black text on a colored background. If the user is called to fix the problem relevant to alert (ie. security to deal with red alert active threats) the notice becomes blinking text on a colored background. <!-- Please make sure to actually test your PRs. If you have not tested your PR mention it. --> ## Why It's Good For The Game The existing way to check current alert levels (look at a fire alarm) doesn't really make much sense for new players. Also, this way is more accessible because a player will usually always be able to intuit where their PDA is on their person, while the fire alarm location will always be dependant on what station is being played. ## Proof Of Testing <!-- Compile and run your code locally. Make sure it works. This is the place to show off your changes! We are not responsible for testing your features. --> <details> <summary>Screenshots/Videos</summary>  </details> ## Changelog 🆑 qol: Added a widget to the main menu of the modular computer screen, which will tell the user what the current alert level is and if they are needed to fix the problem. /🆑 <!-- By opening a pull request. You have read and understood the repository rules located on the main README.md on this project. --> --------- Co-authored-by: Ivory <distributivgesetz93@gmail.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
e4682c04a4 |
Adds a new smite: Retcon, also refactors the temporary_atom component into an atom level proc (#90016)
## About The Pull Request Adds a new Retcon smite, it makes the person fade out into nothingness with a configurable timer, deletes their records and reopens their job slot, as if they were never there at all. I was also annoyed that to play around with temporary_atom I had to slowy add a component, and it doesn't really have much of a reason to BE a component, so I refactored it into an atom level proc called fade_into_nothing ## Why It's Good For The Game The smite is useful for when you wanna get rid of someone who had to leave roundstart and whatnot, on top of just being funny. the refactor is also good because i can now put that proc on build mode and go to town. ## Changelog 🆑 add: Added new mechanics or gameplay changes add: Added more things del: Removed old things qol: made something easier to use balance: rebalanced something fix: fixed a few things sound: added/modified/removed audio or sound effects image: added/modified/removed some icons or images map: added/modified/removed map content spellcheck: fixed a few typos code: changed some code refactor: refactored some code config: changed some config setting admin: messed with admin stuff server: something server ops should know /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
cc335e7e9e |
IconForge: rust-g Spritesheet Generation (#89478)
## About The Pull Request Replaces the asset subsystem's spritesheet generator with a rust-based implementation (https://github.com/tgstation/rust-g/pull/160). This is a rough port of https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it includes fixes for some cases I didn't catch that apply on TG. (FWIW we've been using this system on prod for over a year and encountered no major issues.) ### TG MAINTAINER NOTE  ### Batched Spritesheets `/datum/asset/spritesheet_batched`: A version of the spritesheet system that collects a list of `/datum/universal_icon`s and sends them off to rustg asynchronously, and the generation also runs on another thread, so the game doesn't block during realize_spritesheet. The rust generation is about 10x faster when it comes to actual icon generation, but the biggest perk of the batched spritesheets is the caching system. This PR notably does not convert a few things to the new spritesheet generator. - Species and antagonist icons in the preferences view because they use getFlatIcon ~~which can't be converted to universal icons~~. - Yes, this is still a *massive* cost to init, unfortunately. On Bee, I actually enabled the 'legacy' cache on prod and development, which you can see in my PR. That's why I added the 'clear cache' verb and the `unregister()` procs, because it can force a regeneration at runtime. I decided not to port this, since I think it would be detrimental to the large amount of contributors here. - It is *technically* possible to port parts of this to the uni_icon system by making a uni_icon version of getFlatIcon. However, some overlays use runtime-generated icons which are ~~completely unparseable to IconForge, since they're stored in the RSC and don't exist as files anywhere~~. This is most noticeable with things like hair (which blend additively with the hair mask on the server, thus making them invisible to `get_flat_uni_icon`). It also doesn't help that species and antag icons will still need to generate a bunch of dummies and delete them to even verify cache validity. - It is actually possible to write the RSC icons to the filesystem (using fcopy) and reference them in IconForge. However, I'm going to wait on doing this until I port my GAGS implementation because it requires GAGS to exist on the filesystem as well. #### Caching IconForge generates a cache based on the set of icons used, all transform operations applied, and the source DMIs of each icon used within the spritesheet. It can compare the hashes and invalidate the cache automatically if any of these change. This means we can enable caching on development, and have absolutely no downsides, because if anything changes, the cache invalidates itself. The caching has a mean cost of ~5ms and saves a lot of time compared to generating the spritesheet, even with rust's faster generation. The main downside is that the cache still requires building the list of icons and their transforms, then json encoding it to send to rustg. Here's an abbreviated example of a cache JSON. All of these need to match for the cache to be valid. `input_hash` contains the transform definitions for all the sprites in the spritesheet, so if the input to iconforge changes, that hash catches it. The `sizes` and `sprites` are loaded into DM. ```json { "input_hash": "99f1bc67d590e000", "dmi_hashes": { "icons/ui/achievements/achievements.dmi": "771200c75da11c62" }, "sizes": [ "76x76" ], "sprites": { "achievement-rustascend": { "size_id": "76x76", "position": 1 } }, "rustg_version": "3.6.0", "dm_version": 1 } ``` ### Universal Icons Universal icons are just a collection of DMI, Icon State, and any icon transformation procs you apply (blends, crops, scales). They can be convered to DM icons via `to_icon()`. I've included an implementation of GAGS that produces universal icons, allowing GAGS items to be converted into them. IconForge can read universal icons and add them to spritesheets. It's basically just a wrapper that reimplements BYOND icon procs. ### Other Stuff Converts some uses of md5asfile within legacy spritesheets to use rustg_hash_file instead, improving the performance of their generation. Fixes lizard body markings not showing in previews, and re-adds eyes to the ethereal color preview. This is a side effect of IconForge having *much* better error handling than DM icon procs. Invalid stuff that gets passed around will error instead of silently doing nothing. Changes the CSS used in legacy spritesheet generation to split `background: url(...) no-repeat` into separate props. This is necessary for WebView2, as IE treats these properties differently - adding `background-color` to an icon object (as seen in the R&D console) won't work if you don't split these out. Deletes unused spritesheets and their associated icons (condiments spritesheet, old PDA spritesheet) ## Why It's Good For The Game If you press "Character Setup", the 10-13sec of lag is now approximately 0.5-2 seconds. Tracy profile showing the time spent on get_asset_datum. I pressed the preferences button during init on both branches. Do note that this was ran with a smart cache HIT, so no generation occurred.  Much lower worst-case for /datum/asset/New (which includes `create_spritesheets()` and `register()`)  Here's a look at the internal costs from rustg - as you can see `generate_spritesheet()` is very fast:  ### Comparison for a single spritesheet - chat spritesheet: **Before**  **After**  ## Changelog 🆑 fix: Fixed lizard body markings and ethereal feature previews in the preference menu missing some overlays. refactor: Optimized spritesheet asset generation greatly using rustg IconForge, greatly reducing post-initialization lag as well as reducing init times and saving server computation. config: Added 'smart' asset caching, for batched rustg IconForge spritesheets. It is persistent and suitable for use on local, with automatic invalidation. add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for spritesheets. fix: Fixed R&D console icons breaking on WebView2/516 /🆑 |
||
|
|
803589da07 |
SecurEye now properly follows moving cameras (#89507)
## About The Pull Request Port of a fix from https://github.com/Monkestation/Monkestation2.0/pull/4995 Due to how modular computers worked with the nested tgui stuff, the SecurEye app wouldn't properly autoupdate whenever a camera it was watching moved (when there's not any tracking going on) This "fixes" that issue by adding a new var, `always_update_ui`, to modular computer programs, which will make the modpc call the active program's `ui_interact` even after the UI is opened. ## Why It's Good For The Game bugfix good. if the whole "watch broadcast camera streams on PDA" thing ever gets ported here, this is a needed fix for that. ## Changelog 🆑 fix: SecurEye now properly follows moving cameras. /🆑 |
||
|
|
8a5898212b |
Automated Announcement System refactor (#89276)
## About The Pull Request I standardized stuff in AASs code, and all current reference to it. Also added interactions for bounty cubes, weather reports and request consoles, all of it can be changed from AASs UI. Also it's easier now to add new config entries for AAS to proceed, and it's now downstream friendly. ## Why It's Good For The Game Well, because kind of order in code and because it's funny to make custom messages for... Almost everything? BTW any entry can be blocked from ingame changes, by default you can't change Broken Arrival shuttle and Security Officer arrival announcements, how it was before. But may be we should allow it - it's an open question. ## Changelog 🆑 add: Many things now handles via AAS: Bounty Cubes, Request Consoles, Brig Cells, Vending Machines and Orion Trails alerts, Weather Reports, Cargo Order Console code: Now anyone can make their own entry for AAS refactor: AAS internals, also cleanup /🆑 |
||
|
|
2c3e3b6e59 |
Fixes SiliConnect not being able to download logs (#89408)
## About The Pull Request Closes #89329 Also added a balloon_alert ## Changelog 🆑 qol: SiliConnect now informs you that you're successfully downloading logs fix: Fixes SiliConnect not being able to download logs /🆑 |
||
|
|
a6e2b96ca7 |
Creates a "Secrets" panel button for debugging cargo orders (#89469)
## About The Pull Request -Creates a new button in the "Secrets" menu that can override the cooldown for ordering items from department consoles. It can be used to make the cooldown longer, shorter or non-existent. -Creates a new global var to manage this override on every console in dept_order.dm ## Why It's Good For The Game This tool assists in finding and fixing bugs related to cargo orders and cargo crates. The wait time for these cooldowns can be ten minutes or longer, and this speeds up the process significantly. It could also be used by admins during play to make the cooldown lower, or cause absolute mayhem on cargo by setting the cooldown duration to 0. ## Changelog 🆑 add: Added a button in the "Secrets" menu to alter the department console order delay. qol: Button makes it easier to find cargo related bugs. code: Changed code in department_order.dm to allow for overriding the order cooldown duration. admin: Created an admin button in the "Secrets" panel. /🆑 --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> |
||
|
|
23ac16411d |
Removes Secondary & Final Objectives from Traitors (#89466)
## About The Pull Request  Pre-discussed with @Watermelon914, this PR removes Secondary & Final Objectives from all Traitors, rather than just midround ones. It also removes all of the surrounding supporting code. Randomly assigned Primary Objectives still exist, I just used the ability to rewrite mine to take the screenshot. In terms of final objectives, the surrounding items that were available still exist but don't necessarily have sources. If anyone has good ideas for readding these in some other form it can be done in future PRs. It also allows all traitors to buy the Contractor kit, previously limited to midround traitors which lacked secondary objectives, because now all traitors lack secondary objectives. This essentially limits all traitors to a maximum of 20 TC (16 if they spawn with an uplink implant). Currently I don't foresee that they strictly need any additional way of gaining TC during a round as 20 is quite sufficient, but it may take some time to adjust and get used to it after such a long time of having access to more. If we need to adjust the starting value or add a slow drip of more points over time or something, that can be done in followup PRs. This also removes the ability to recreate your uplink added by my beautiful wife in #74315 This was part of the progression traitor design document, but ultimately probably a bad idea as it essentially made traitors impossible to properly disarm. You will once more just need to carefully protect your uplink. **This does not remove the threat/progression system**. Like midround traitors, all Reputation requirements on gear are now simple timelocks, most of which will have elapsed by the time 30 minutes have passed. **Finally** this PR also adds Romerol to the traitor uplink for 25 TC and 30 minutes of reputation, as a treat (and because I removed the final objective that previously granted it). ## Why It's Good For The Game We've tried this system for a long time (3 years last month!) and while I think it had a lot of promise, enabled some cool moments, and also solved several of the problems it set out to solve, overall I think some of the behaviours it has encouraged in players have been overall negative for the game. While the _game systems_ are fine, even quite fun and cool (especially final objectives) I am of the opinion that having them in the game creates a net negative purely in the way that they react with players' _brains_, creating incentives towards behaviour we don't actually want people to pursue. While it's hard-to-impossible to prove any of this with hard data, there has been a prevailing feeling for some time among many (though certainly not all) people that the simple fact of _having_ a constant drip-feed of objective available to players leads directly to less interesting antagonist play. While certainly nobody is _forced_ to do secondary objectives you are directly and quite strongly rewarded for doing so, doing so efficiently, and doing so in a way which makes sure that nobody (alive) sees you do it. This leads to a tendency to play defensively and try to maximise the number of tasks you can complete in one round, which also has a knock-on effect of generally minimising the number of people you attempt to interact with in a round (unless you are killing them). Even people who _intend_ on doing some more interesting gimmick can fall into this trap, as "having more tools" is always useful for anyone who is intending on any kind of plan at all, but then executing on the secondary objectives again incentivises you to lay low, not interact with anyone, be efficient, and then reduces the time you are spending doing the thing that's your actual plan for the round. Removing the ever-present temptation to fish for extra TC leaves "doing whatever your actual plan is" as the sole thing to optimise. Final Objectives too have created unfortunate psychological effects between crewsided players and other antagonists. Because of the _threat_ (no matter how remote, Final Objectives have always been tuned to be appropriately rare) that leaving any antagonist alone will cause them to snowball by acquiring more power, it starts to feel foolish to respond to any threat with less than the maximum possible level of force even if they seem relatively innocuous in the moment. This even has an effect on other non-progression antagonists, as traitors are the most common antagonist type and how people treat them is going to be their default level of reaction to most other station threats. While there has always been the promise of expanding the system with novel and exciting objectives that leverage appearing mid-round to do something unique, we've taken very little advantage of that over time. Most objectives we have added that didn't boil down to "kill someone, with a twist" have been somewhat unsuccessful, serving either as ways to get yourself arrested and killed for no reason or ways to get free telecrystals by doing something the crew don't really care about stopping you from doing. The option still exists to add more roundstart objectives to traitors, if someone suddenly has a great idea that would fit in this space. The ideal outcome of making this change is a slight relaxation of crew attitude towards feeling like their only option after catching an antagonist that isn't sandbagging is to permanently remove them from the round (although it's fine to do this still in many scenarios), and a broadening of traitorous activity which is not purely focused on collecting as many checkboxes as possible and might give people more time to roleplay with other players, not worrying that this time could have been more efficiently spent pursuing a different secondary goal. I don't anticipate or desire that this will prevent traitors from killing anyone (or even stop them from killing people they don't have a specific objective to kill), I just want to remove the FOMO from people's minds. Also this gives us something to talk about at the coder townhall meeting on the 22nd. ## Changelog 🆑 del: Misplaced or stolen traitor uplinks can no longer be recreated using a radio code and special device, guard yours carefully or buy a backup implant. del: Roundstart traitors can no longer take on additional objectives in order to earn additional Telecrystals and fast-forward any unlock timers on items. They also cannot earn the ability to complete a Final Objective. balance: Roundstart traitors can now buy the Contractor Kit from their traitor uplink, rather than only midround traitors. add: Traitors can buy Romerol for 25 TC, after 30 minutes of time has passed in a round. /🆑 |
||
|
|
f16b3279ca |
Cleanup supply packs contents (#89342)
## About The Pull Request fix image display in `NT IRN` PDA app <details> <summary> Images present! </summary>  </details> ## Why It's Good For The Game Bug fixes good ## Changelog 🆑 fix: fix image display in `NT IRN` PDA app for preview and contents /🆑 |
||
|
|
09e8924876 |
[no gbp] fixes virtual pet app changing PDA's colors when open (#89333)
## About The Pull Request PDAs no longer go white when the virtual pet app is opened ## Why It's Good For The Game fixes virtual pet app changing PDA's colors when open ## Changelog 🆑 fix: fixes virtual pet app changing PDA's colors when open /🆑 |
||
|
|
fd1bc8f9d0 |
Fixes PAIs not being able to send messages or turn the GPS off (#89279)
## About The Pull Request Fixes https://github.com/NovaSector/NovaSector/issues/4826 Since https://github.com/tgstation/tgstation/pull/88651 PAIs have been blanket barred from being able to pass any `can_perform_action()` check. From the pr:  ## Why It's Good For The Game As it turns out there are a few things that it makes sense for them to be able to interact with. Now you can again! ## Changelog 🆑 fix: fixed PAIs not being able to send or reply to messages using their digital messenger app. fix: fixed PAIs not being able to turn off the GPS tracking using their gpa app. /🆑 |
||
|
|
fca806da0c |
Fix cyborg flash / Makes cyborgs use item interaction (#89274)
## About The Pull Request Fixes #89272 - Adds an argument to `is_wire_tool` to fail if the item is secured, which assemblies are by default. (They must be screwdriver'd to attach to things) Makes cyborg use item interaction - Cleaner, non-deprecated attack chain. - Also changes to chats to balloon alerts. ## Changelog 🆑 Melbert qol: Using items on cyborgs now use balloon alerts instead of chat messages. fix: You can flash cyborgs again refactor: Refactored item interaction on cyborgs. /🆑 |
||
|
|
d429fd87ce |
Fixes not being able to adjust pda ringtones in-game (#89256)
## About The Pull Request x = x is silly ## Why It's Good For The Game fix ## Changelog 🆑 fix: PDA ringtones can be changed in-game /🆑 |
||
|
|
4e3b0c1750 |
replace bubble sort with timsort for cameralist, filter then sort, move global procs to cameranet datum (#89087)
## About The Pull Request Replace bubble sort with timsort for cameralist Move cameralist related global procs to `cameranet` datum Other minor code cleanup things ## Why It's Good For The Game Cameralist reads for UIs are now more performant ## Changelog 🆑 refactor: replace bubble sort with timsort for cameralist, move global procs to `cameranet` datum /🆑 |
||
|
|
20d0d8827e |
Department orders credit reward and cooldown time now use a logarithmic scale (#88797)
## About The Pull Request This PR makes the reward and cooldown for departmental orders scale with crate cost using a logarithmic scaling, instead of comparing the price to preset thresholds for time, or awarding the same amount as the crate's cost. Previously, to calculate the cooldown time, the code was calculated via the following manner: ``` credits = clamp(credits, min, max) time_y = 10 MINUTES * ((credits - min)/(max - min) + 1) ``` Minimum was 320 credits, max was 3000, thus, all crates slid around between 10 minutes to 20 minutes. The reward for delivering the crates was the same as the crate's value. This meant ordering egregiously expensive crates, far beyond 3000 was way too desirable. This PR changes both to use logarithmic scaling. Cooldown time uses `60* log(price)^2.2`, and reward uses `140 * log(price)^1.4`. **Cooldown analysis** At 320 it's 7.54 minutes, at 1400 it's 12.44 minutes, at 3000 (around gun crates) it's 15.5 minutes, at 8000 (hat crate) 20 minutes, at 9000 (expensive atmos cans) it's 20.58 minutes, and at the 20k crate it's 24.76 minutes. **Crate rewards analysis** At 320 it's 475 credits, at 1400 it's 669 credits, at 3000 (around gun crates) its 778, at 8000 (hat crate) it's 925 credits, at 9000 (expensive atmos cans) it's 943 credits, and at the 20k crate it's 1070 credits. Up to 540 credits, you are actually getting a higher reward than what the crate costs, but this is okay, as its a reward for delivering simpler orders. A little surplus for you. For the console UI, I have made items costing 3000 or more display Moderate, and items costing 8000 or more, Long cooldowns. ## Why It's Good For The Game Ordering really expensive crates should be a luxury, not a way to generate money. The money is supposed to be a bonus, in addition to the free crate to sell. Using a logarithmic scale, the credit bonus is reigned in more evenly, making it more predictable for economy tweaking, and avoids players double dipping credits in their free purchase. Decreasing the rewards also give space for other new ways to generate rewards in relation to departmental orders, such as stamping the manifest with the correct head's stamp being worth more money and such. <details> <summary>Old PR Text, which was using a price cap instead</summary> ## About The Pull Request Departmental orders are a neat feature, but some of the available packs had problems economywise. The cooldown of range from 10 to 20 minutes, with 10 minutes being the base for anything costing less than 320 credits, and 20 minutes at 3000 credits. I have no problem with the lower cap, but the upper cap has issues, as recently, a 20k crate was added to cargo, which means it is possible to dump quite a large amount of funds into cargo every 20 minutes. Departmental orders probably need a bigger overhaul, and this solution is imperfect, but I have talked with @ArcaneMusic about this as an interim stop gap measure. This PR also autodocs a proc, and moves some values to global defines, for ease of balancing. This PR affects the following crates, with the uncapped crate values in brackets. Armoury - Combat Shotguns (3500 credits) - Energy Guns (3600 credits) - NT BR-38 Crate (20,000 credits) Engineering - BSA parts (6000 credits) - DNA Vault Parts (4800 credits) Engine Construction - HFR Crate (4800) - Supermatter Shard Crate (4000) Materials - BZ Crate (9000 credits) - Nitrous Oxide (9000 credits) - Water Vapor Crate (3010 credits) Toys - Collectible Hats Crate (8000 credits) ## Why It's Good For The Game Instantly awarding 20k to cargo every 20 minute, in addition to 27k from the other consoles (if both engineering and science orders BZ, service orders collectible hats, and medical orders something around 1000), is a bit too much. The money gained should be along a much more predictable and expected value. With this chance, the most they can get is 13k every 20 minutes across all departments. </details> ## Changelog 🆑 balance: Rewards from departmental orders use a logarithmic scale, resulting in less rewards for high tier crates. The cooldown time is also logarithmic now, which has slightly decreased cooldown values on cheaper crates. /🆑 |
||
|
|
83b7fc798d | succesful -> successful (#88916) | ||
|
|
ae9f121def |
virtual pets now auto-follow you on release (#88844)
## About The Pull Request when you summon a virtual pet's hologram, itll automatically follow you on release rather than u having to give it the command ## Why It's Good For The Game adds some minor convenience to the minigame. ## Changelog 🆑 qol: virtual pet holograms now automatically follow you when released rather than having to give it the command post summon /🆑 |
||
|
|
91719a400a |
516 Compile Compatibility (#88611)
Renames all uses of caller, as they (currently) shadow the new byond var and will in future error Ups our "wan if compiled after" experiement compile version to 516 Adds an alternate 516 unit test |
||
|
|
2e4d70afe5 |
Updates href uses for 516 (#88699)
## About The Pull Request Was just scrolling through the Paradise github since they seem to have more work done for 516 to see if there's anything I can port over, found this and thought why not. Ports parts of https://github.com/ParadiseSS13/Paradise/pull/25105 Specifically, updaing all hrefs to use the internal ``byond://``, and adding it to grep. ## Why It's Good For The Game More work towards 516. ## Changelog Nothing player-facing. |
||
|
|
cdda52aba9 |
add laptop interact on RMB click, screentips (#88612)
## About The Pull Request <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> Modular computer laptops can now be interacted with RMB when open, or opened with RMB when closed. Also screentips for this added. It was inteded for laptops to be interactable when open. but didn't work because old code was not adjusted for attack chains. ## Why It's Good For The Game Laptop usage is more user friendly :D <details> <summary>Demonstration :D</summary>  </details> ## Changelog 🆑 fix: modular computer laptops can now be interacted with RMB, instead of picked up qol: modular computer laptops can now be interacted with RMB when open, or opened with RMB when closed. Also screentips for this added /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> |
||
|
|
a2d463cdd8 |
Guncode Agony 4.4: Armor as an argument (#88143)
## About The Pull Request Lil cleanup/tweak I couldn't do in the main PR because it conflicted before and i forgot after. Yes this works with overrides that don't have the arg, yes I tested it. ## Why It's Good For The Game Don't run armor code thrice please thank you ## Changelog 🆑 code: Projectile impacts no longer fetch mobs' armor values thrice /🆑 |
||
|
|
b67a0901f2 |
Fix issues discovered via TypeMaker (#87596)
## About The Pull Request Fixes issues with var typing and proc arguments, discovered using OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd upstream yet). ## Why It's Good For The Game Codebase maintenance. |
||
|
|
7534273bb0 |
Fixes SSWardrobe stealing a camera from the camera app when on a dummy, causing a harddel (#87903)
## About The Pull Request See name, if a dummy somehow gets hold of a PDA with the camera app installed (This just so happens to be a default PDA program in the case on Nova, Skyrat, and Bubber), and the delete_equipment proc is called, the camera inside the PDA gets sent to the wardrobe because of `/datum/outfit/job/assistant/gimmick/hall_monitor` having one, and then qdelled with the PDA, leaving a hanging ref This causes a harddel during tests that has caused me great pains to locate. Turns out a single example holodisk with the clown holds a magical key to trigger all this: a single PDA ## Why It's Good For The Game Fixes a harddel. There might be other similar ones hiding in the dark like cameras in other objects. ## Changelog 🆑 fix: Fixes SSWardrobe stealing a camera from the camera app when on a dummy, causing a harddel /🆑 |
||
|
|
1365e6079c |
Fix NTNRC duplicate message jank and new message header, makes program headers actually update when there's none. (#87610)
## About The Pull Request
As before, more fiddling with NTNRC, more bugs.
This time, the same user sending the same message within the same second
would cause this message to spawn a new copy each time the channel was
opened, until the UI was closed and re-opened.
Looking into it, this seemed to be because we would set the `Box`'s
`key` value to the message contents:
<
|
||
|
|
3cfde345be |
Removes SiliConnect from borg PDAs, expands their self-status app instead (#87350)
## About The Pull Request - SiliConnect is no longer a default app for cyborgs. - RoboTact, the borg self-status app now has a Network tab, which lists other borgs' status. - The Network tab will only list borgs connected to the same AI as you. If your AI goes down, you lose connection to other borgs' status info. - Your AI is also listed on the Network tab, with their own status in a very binary good/bad form. - Syndicate borgs are able to see other syndicate borgs on the Network list, even though they lack an AI. ## Why It's Good For The Game SiliConnect was recently added to the default borg apps list. But it has a lot of features that borgs can't actually use, and so feels rather messy. It was added with the goal of letting borgs see eachother's status, and so I've ported that functionality into RoboTact. SiliConnect is no longer a default borg app (though it *can* be installed if a borg and human really want it to be). Showing the AI's status is certainly a balance choice. But it's not really that much of a secret when the AI dying already adjusts the monitors across the station to a BSOD image. On the flip side, we get to shut off borg status sharing when the AI goes offline, which is neat. ## Changelog 🆑 del: SiliConnect, a tool meant for Roboticists, is no longer included by default on borgs. add: RoboTact, the borg self-status app, now shows the status of other borgs synced to the same AI. Syndicate borgs can likewise see eachother's status, even without an AI. balance: RoboTact also shows their synced AI's very basic status of functional or offline. /🆑 UI Pictures:  Dead AI:  Syndicate borgs do not see station borg status, but can see eachother's  ~~Drafting because I need to do edge-case testing, and the AI box isn't quite functioning correctly when the borg has no AI master.~~ |
||
|
|
0b99107cc2 |
Guncode Agony 3: Projectile code cleanup (#87628)
## About The Pull Request
Massive cleanup/pseudo-refactor of projectile and projectile-adjacent
code. One letter variables, weird logic, some runtimes, all of that.
Atomized in a separate PR from the actual refactor so we don't end up
with a 5k line PR.
## Why It's Good For The Game
Makes the code possible to work with before I nuke pixel_move and kevinz
units™️
|
||
|
|
f49f52494a |
Fix NT Software Hub displaying >100% completion or NaN/Infinite% completion. (#87619)
## About The Pull Request During all that fiddling with NTNRC I noticed that sometimes the download percentage would shoot above 100%. Looking into it, it seems that that's just because it isn't actually capped at the downloaded file size. So we cap it to the file size after adding our next download chunk, but parallel to before don't complete it immediately so that we stay on 100% for another cycle before finishing. For style reasons. Then I noticed files with a size of 0 would sometimes display NaN% or Infinite%, presumably because both of the progress percentage calculations in the ui would be dividing by zero. So to avoid this, we just skip the downloading cycle entirely for 0 size programs, and go to download completion immediately on clicking. This fixes our issues. ## Why It's Good For The Game Fixes some jank. ## Changelog 🆑 fix: NT Software Hub no longer displays >100% completion on downloads sometimes. fix: NT Software Hub no longer displays NaN% or Infinite% completion on files with a size of 0 sometimes. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
f107a56773 |
Fixes NTNRC username sorting, additionally makes subcategories sort alphabetically. (#87616)
## About The Pull Request While looking into getting the NTNRC username list sorted, I found out that it was _already_ supposed to be sorted by status, but just got broken in a pr that removes the program status variable forwarded for this reason. In this pr we simply add a `get_numerical_status()` proc that converts the new logic into a number we can sort by, then make the tgui sort account for this. Additionally, we make it sort alphabetically in its subcategories, for sanity's sake. It now sorts by operator perms first, then online>away(background)>offline, then alphabetically. While I dislike operators being at the top regardless of their status, it seems like that is how it was intended to work, and doing so sanely would requite rethinking how names are coloured entirely. On the other end, I think it's potentially good to have operators be at the top and thus easily pingable at all times. ## Why It's Good For The Game Fixes broken status sorting. Alphabetical sorting makes finding a specific user to mute or ping them less of a pain. ## Changelog 🆑 fix: NTNRC channel user list is sorted by status again. It goes operator>online>away>offline. qol: NTNRC channel user list is now alphabetically sorted under its status subcategories. /🆑 |
||
|
|
61cef6c342 |
Fix NTNRC muting not working at all. (#87606)
## About The Pull Request When fiddling around with NTNRC, I noticed that muted clients... can still talk. While the input bar is reddened and displays a mute message, it isn't actually disabled- even more so, there's no sanity checks for being muted on the `ui_act(...)`. In this pr we just make it so the input gets disabled, and add a sanity check to avoid people bypassing it. ## Why It's Good For The Game ...good if the app's muting feature like, actually works. ## Changelog 🆑 fix: NTNRC muting actually works again. /🆑 |
||
|
|
c243b2637f |
[s] Fixes HTML injections via pet tricks (#87595)
## About The Pull Request Closes #87592 You could pass additional args into emotes with zero sanitization if you got yourself a way to call TGUI acts ## Changelog 🆑 fix: Fixed HTML injections via pet tricks /🆑 |
||
|
|
d086200259 |
Using SiliConnect to send a message to a cyborg now includes the sender's job (#87341)
## About The Pull Request Does as title says. Doesn't take effect if the ID has no job listed. ## Why It's Good For The Game Gives a bit more context about who is sending a message. ## Changelog 🆑 add: Borgs now get the job title of someone sending them a message through SiliConnect. /🆑 |
||
|
|
7429dc69b9 |
Silicons can now use dropped PDAs (but still cannot access Messenger) (#87343)
## About The Pull Request - Removes the restriction from borgs and AIs opening PDA interfaces. - Adds a restriction on Messenger if the PDA is being viewed by an AI or Cyborg *and* the PDA is not a silicon-type PDA. Messenger is completely unusable in this case. - The AI's own PDA is unaffected, due to it being a silicon-type PDA. Downstreams that give Borg PDAs the Messenger app should likewise be unaffected. Though mainly unrelated to the PR, pAIs were also tested and have not been affected. ## Why It's Good For The Game Back before tablets and PDAs were squished together, silicons could access tablets freely. TGUI PDAs were restricted from Silicons mainly to keep parity with the old PDAs, of which Messenger is the major feature that was ported over. Thus, I'm blocking Messenger specifically while allowing the rest of a PDA's features to be unblocked. As an aside, the old fluff text `It doesn't feel right to snoop around like that...` was kinda terrible, since there are many times you do, in fact, want to snoop. The AI trying to track down a known killer's accomplice would want to snoop. The Malf AI that's trying to trick the Captain would want to snoop. The prior owner of the PDA before they were borged wouldn't even feel like it's snooping. So now it's a connection refused thing, not an AI's feelings thing. ## Changelog 🆑 balance: Borgs and AIs can now access dropped PDAs. The Messenger app does not work over a remote connection, however. /🆑 Messenger interface when accessed remotely, by the by;  |
||
|
|
45725ebcc2 |
PDA ringtones now show a balloon alert (#87278)
## About The Pull Request This makes it so receiving a PDA message will give the holder a balloon alert with their ringtone. ## Why It's Good For The Game PDA messages are often ignored due to not being noticed, as many players are more often focused on the main game screen (which runechat has somewhat normalized) than the chat window. This makes things more obvious that there's a PDA message. ## Changelog 🆑 add: PDA ringtones now show a balloon alert to the PDA holder. /🆑 |
||
|
|
63bd34eff7 | some code organization for playsound(smth, pick('... (#87211) | ||
|
|
38b3031ab6 |
Add NTNRC client to pAIs digital messenger (#86820)
## About The Pull Request Just adds the NTNRC client to the pAI digital messenger software's starting programs. To avoid also giving this to the AI, creates a new silicon PDA subtype for pAIs and applies it similarly to borgs. ## Why It's Good For The Game It's already barely ever used, and I just think it'd be fun to let pAIs talk to the never-checked department consoles or open chatrooms with each other or their hosts. Currently you can do this by being in your host's PDA, but this means they couldn't use their PDA at the same time as you just... chatting. Nor could you share a chatroom with them, due to sharing the same account. Also the pAI cabal using the bootleg IRC client to plot their next move is just incredibly funny to me. ## Changelog 🆑 balance: The pAI digital messenger software now includes the NTNRC client. /🆑 |
||
|
|
58501dce77 |
Reorganizes the sound folder (#86726)
## About The Pull Request <details> - renamed ai folder to announcer -- announcer -- - moved vox_fem to announcer - moved approachingTG to announcer - separated the ambience folder into ambience and instrumental -- ambience -- - created holy folder moved all related sounds there - created engineering folder and moved all related sounds there - created security folder and moved ambidet there - created general folder and moved ambigen there - created icemoon folder and moved all icebox-related ambience there - created medical folder and moved all medbay-related ambi there - created ruin folder and moves all ruins ambi there - created beach folder and moved seag and shore there - created lavaland folder and moved related ambi there - created aurora_caelus folder and placed its ambi there - created misc folder and moved the rest of the files that don't have a specific category into it -- instrumental -- - moved traitor folder here - created lobby_music folder and placed our songs there (title0 not used anywhere? - server-side modification?) -- items -- - moved secdeath to hailer - moved surgery to handling -- effects -- - moved chemistry into effects - moved hallucinations into effects - moved health into effects - moved magic into effects -- vehicles -- - moved mecha into vehicles created mobs folder -- mobs -- - moved creatures folder into mobs - moved voice into mobs renamed creatures to non-humanoids renamed voice to humanoids -- non-humanoids-- created cyborg folder created hiss folder moved harmalarm.ogg to cyborg -- humanoids -- -- misc -- moved ghostwhisper to misc moved insane_low_laugh to misc I give up trying to document this. </details> - [X] ambience - [x] announcer - [x] effects - [X] instrumental - [x] items - [x] machines - [x] misc - [X] mobs - [X] runtime - [X] vehicles - [ ] attributions ## Why It's Good For The Game This folder is so disorganized that it's vomit inducing, will make it easier to find and add new sounds, providng a minor structure to the sound folder. ## Changelog 🆑 grungussuss refactor: the sound folder in the source code has been reorganized, please report any oddities with sounds playing or not playing server: lobby music has been repathed to sound/music/lobby_music /🆑 |
||
|
|
b9fad92412 |
Adds achievement-unlockables hats for orbies (feat. big rollies from hacked cigarette vending machines) (#86098)
## About The Pull Request So, do you remember orbies, those cutesy virtual PDA pets from that PR that Ben made roughly six months ago before moving on his next project, leaving them to be probably forgotten in a near future/present/past? Yeah, personally I never played around, however I recalled that they do have customizable virtual hats, which can be selected from a dropdown in the UI, and I thought that it would be a perfect target for some achievement-related content, as they're totally cosmetic that provides no gameplay advantage nor affects balance in no way whatsoever. I cannot sit well with cheevos being purely an end to itself, that's the reason this PR exists. The new additions to orbies hats, and their respective required achievements are: - The fishing hat (Legendary Fisher) - A huge-ass rollie (Unhealthy Snacks) (yeah, it isn't exactly a hat but the code in no way assume that the item has to be a hat, beside vars named like that for the sake of convenience) - A tape wizard hat (Archmage) - An energy cakehat (Very Important Piscis) - A bounty hunter cowboy hat (Hot Damn!) - A fancy crown (Outdebted) The huge-ass rollie (called fat dart) in the game, is a new cigarette, rarely found in hacked cigarette vending machines. It's obviously a reference to that Ralsei meme from 3 years ago or so but I personally don't care, I just wanted to give an excessively big cigarette to orbies to symbolize the proposterous accomplishment of eating 500 cigarettes in a single round without dying from nicotine OD less than halfway through, but since orbie hats use actual items are references for their appearance, I found myself obliged to add one to the code. Overall, the fat dart comes from an old PR on Citadel, though I had to resprite it myself. Here's a lazy collage of the hats. For some reason unbeknownst to me, the hats are horizontally squished. I need to ask Ben why he did them this way when Orbies' heads are as wide as a rugby ball.  ## Why It's Good For The Game Simple, extra cosmetic stuff for a simple feature that's as relevant as playing around with plushes. ## Changelog 🆑 add: Added more customizable options to PDA virtual pets, which can be unlocked by completing achievements. add: Added a fat dart that can be rarely found in hacked cigarette vending machines. /🆑 |
||
|
|
48c2730e3a |
Adds three useful PDA programs to Cyborg's default PDA loadout (#86725)
## About The Pull Request

For a long time borgs have only had two PDA programs: `filemanager` and
`robotact`, but there are other simple programs with useful information
for gameplay. This PR remedies this by including three other programs to
borgs by default: `borg_monitor`, `atmosscan`, and `crew_manifest`. In
the interest of transparency, I've included possible negatives in the
form of disclaimers below.
`borg_monitor`:

This is the "SiliConnect" program in-game, and allows showing a brief
overview to cyborg players who else is connected as a cyborg and what
their model is, which allows for informed decisions on which module to
choose for themselves, among other minor useful data.
**_Disclaimer: I'm pretty sure the "Send message" button on this program
is unusable for borgs due to how it's coded
[here](
|
||
|
|
a4328ae1f9 |
Audits tgui_input_text() for length issues (#86741)
Fixes #86784
## About The Pull Request
Although some of the issues found were a direct result from #86692
(
|
||
|
|
240e397b95 |
Fixes xenos being able to pick up items that they shouldn't by most means, expands itempicky component functionality (#86714)
## About The Pull Request Xenos can apparently use shenanigans such as https://github.com/tgstation/tgstation/issues/86703 to put some items in their hand, and there are likely methods like this dotted around the codebase. However, the signal to put something in their hand is called consistently across any process that would cause them to pick up or otherwise have something to put in their hand, so instead I added /datum/component/itempicky to xenos. While I was in there, I expanded the functionality of itempicky; it can run a callback to determine a condition that needs to be met now. ## Why It's Good For The Game Fixes https://github.com/tgstation/tgstation/issues/86703 Expands a component's usefulness ## Changelog 🆑 Bisar fix: Xenomorph restrictions on items they can pick up have had their determining logic made more _robust_. code: The itempicky component (restricts what can be picked up via a whitelist) can now, optionally, have a callback fed to it to determine cases of bypassing that whitelist. /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
6808a082eb |
Assorted changes to job assignment code and logging. Runtime free, guaranteed or your money back. Price: $£0. (#85947)
## About The Previous Pull Request
#85308 reverted by #85929

~~Causes the round to not start when a player isn't eligible for any
jobs at a specific priority level due to runtimes trying to `pick()`
from an empty list aborting the entire job assignment stack.~~
(Fixed???? by
|
||
|
|
e61afc4318 |
New Syndicate Stealth MODule: Wraith. (#86449)
## About The Pull Request Introduces a new MODule in the uplink, makes the user transperent and grants the ability to siphon light sources to recharge your suit. Ingame demonstration: https://www.youtube.com/watch?v=bhXNOAMDy4U ## Why It's Good For The Game I've been playing a ton of Splinter Cell and Intravenous recently and this random idea popped in my head. "Wouldn't it be cool if traitors could blend in the darkness to get a jump on their opponents?" Also unrelated "Wouldn't it be cool if tots had a tool to recharge their suit that didn't involve sitting in a pod for 10 minutes?" This PR introduces a new module to the uplink, the Wraith. It comes with a passive and active component. Passively it works exactly like the crew version of the cloaking module with just a couple of differences. 1) Doesn't need to be manually activated, if you lose the cloak it's regained after 5 seconds. 2) Lower stealth alpha value( how trasperent you are basically), slightly less visible than the crew version, not as good the ninja module however , I tuned it just enough so that you are more or less undetectable in the dark. The active component of the module lets you destroy stationary lights to recharge your suit power, if used on handheld or borg lights it turns them off for a minute. **Why do we need this module when we already have the stealth implant and the chameleon projector?** I can think of a few reasons. 1) MODsuits were designed to be customizible, traitor suits range between 6 to 16 TC, having to invest in a 7-8 TC item after you already bought a suit is fairly expensive. 2) This MODule would be a better fit for ambushes, as it doesn't have the *uncloaking* delay of its counterparts. It is however considerably worse if you get caught, as the cloak is disrupted on bump or damage. 3) It has better interactions with the sandbox. Lights can go out for many reasons, maybe it’s just a power outage, or some assistant broke it, or maybe it was anightmare. It leaves room for plausible deniability, adding to the paranoia. It's also not complete invisibility, if you want to stay undetected you need to lurk in the darkness, you might expand your domain, at the cost of the crew eventually wising up to your shaeneningans. Lastly, since the active component of the module uses the same proc of the saboteur handgun, I've updated the code to be a generic proc rather than a signal, to make it easier to reuse in the future. Item desc provided by NecromancerAnne. Module sprite made by Orcacora. ## Changelog 🆑 add: The Wraith Cloaking Module is now available in the uplink, costs 3 TC. code: the saboteur handgun now uses a generic proc rather than a signal /🆑 --------- Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
06ba9d93eb |
Pun Pun Station Trait, But it's only active on Monkey Day (14 December, every round) (#86091)
## About The Pull Request This is a remake of https://github.com/tgstation/tgstation/pull/84501 with a few small changes to avoid mapping issues. This time it's restricted to a once-in-a-year event, mainly because neither Jacq and Lemon were ok with the possibility of Pun Pun being posibly playable all year, however Jacq said he's fine with it being available on the holiday, while Lemon isn't around on Discord atm so I don't know what he's to say. The trait makes pun pun playable and gives them the job of being a busser (waiter) in the cafeteria. They're clever and can use tools most other monkeys can't, but cannot be humanized, while also being unable to speak Galactic Common. Should they roll traitor, they'll be able to buy syndicate monkey reinforcements and equipment, which it can also use, being a monkey itself. ## Why It's Good For The Game This is a fairly unique job, like the Cargo Gorilla, due to the fact it's not a conventional humanoid crew member nor the AI or a cyborg. I thought this was a fun idea, though I met some obstacles and the original PR was DNM'ed and then closed. However, the trait perfectly fits the theme of the holiday, making a good compromise since Pun Pun will stay AI-controlled the rest of the year, as Jacquarel and Lemon want it to be. It can also be added by an admin through VV, whether they're planning some shenanigean or just want to add something more to the round. ## Changelog 🆑 add: Pun Pun is a playable crewmember during Monkey Day (14 December). /🆑 |
||
|
|
48bbd6fddf |
Reworks examine (a little) (#86506)
## About The Pull Request Basically, reworks how examining things looks to the user. #86497 is required even though this pretty much replaces the entire PR. Examining random objects and simplemobs:   Examining a person:   Examining an ID card a person is wearing (by clicking the hyperlink adorning the ID card when examining them): (Note, you can only pull up this if you are within 3 tiles of the person)  ## Why It's Good For The Game Examine is very old and very inconsistent between atoms and mobs. So I thought I could spruce it up a bit while bringing some consistency along. This should also help with losing certain details in massive walls of examine text - stuff like names will stick out more. ## Changelog 🆑 Melbert qol: The way examine looks has been updated. qol: A person's ID card no longer appears with a big icon on examine. You can now click on their ID card (in the chat box) to get a bigger picture of it, as well as information about them. refactor: Much of examine backend code has been refactored, report any odd looking text. /🆑 |
||
|
|
883eb18803 | Let ghosts use the jump emote (#86168) | ||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
73f304ae21 |
Plexagon Crew Manifest is accessible and free to everyone. (#86070)
## About The Pull Request Plexagon Crew Manifest has been made into a publicly accessible and roundstart installed PDA app instead of being restricted to heads, security and a few odd medical jobs. For this, it lost its major Detomatix resistance which has been added to security records (minor resistance) and status display control (major resistance) To ensure that noone has to wipe their PDAs roundstart, its size on PDA drives has been halved. ## Why It's Good For The Game Crew manifest can be easily accessed from the messenger app, but without nice formatting that plexagon has. The app itself does not have any capabilities beyond reading crew manifest and printing it out on paper from consoles, neither of which are something that cannot be already done with ease. I believe this is a remnant from old PDA days and doesn't really deserve to stay. ## Changelog 🆑 balance: Plexagon Crew Manifest is now a default PDA app for everyone, and is free. balance: Plexagon Crew Manifest no longer provides Detomatix resistance, but security records and status display control now do. /🆑 |
||
|
|
c77c50ae3d |
Athletic Fishing Gloves and Fishing Module to fish without a fishing rod (#85415)
## About The Pull Request This PR adds a pair of fishing gloves that let you fish and work out at once, and also a MODsuit module that lets you use MOD gloves to do the same thing (without the workout, an external fishing rod has to be inserted first). In both cases, you can equip or unequip bait, hook and line by using the fishing rod interface which you can open by right-clicking the gloves. To get both of them, you've to perform the first fish scanning experiment. I had to refactor the profound fisher component a bit to do this. ## Why It's Good For The Game Interweaving a few different features with fishing. Fishing and Athletics are both skills, so I thought it'd be nice if it were a way to take advantage of both, and level them up accordingly. Also fishing gloves with maxxed out athletics can make fishing a lot noticeably easier at higher difficulty. ## Changelog 🆑 add: Added Athletic Fishing Gloves and Fishing Glove Module to the advanced fishing tech node. Both can be used to fish without having to hold a fishing rod. The athletic fishing gloves will also train your athletics skill. /🆑 |
||
|
|
891394181f |
Computer console sounds (#85358)
## About The Pull Request https://github.com/user-attachments/assets/b756bc49-70f0-4c86-8b04-5f0566d606a2 I've made the sound really quiet (quieter than most other sounds in the game) so it shouldn't be too annoying, there is 7 variants of the clicks so ear fatigue shouldn't strike too bad. ## Why It's Good For The Game Clicky sounds release a dopamine surge for players and gives you audio feedback when you're doing something, it also triggers when someone is else working at a computer which tells you that they're using it. ## Changelog 🆑 grungussuss sound: computers now make clicky clacky sounds /🆑 |
||
|
|
4d1639b04c |
Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308  |