mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-12 00:27:31 +01:00
mayfools
3353 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6e9f2ccfc0 |
Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts: # .github/workflows/compile_all_maps.yml # .github/workflows/run_integration_tests.yml # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/_onclick/hud/credits.dm # code/controllers/subsystem/networks/id_access.dm # code/datums/diseases/advance/advance.dm # code/datums/diseases/advance/symptoms/heal.dm # code/game/machinery/doors/door.dm # code/game/objects/structures/crates_lockers/closets/secure/medical.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/modules/antagonists/malf_ai/malf_ai_modules.dm # code/modules/jobs/job_types/_job.dm # code/modules/loadout/categories/accessories.dm # code/modules/loadout/loadout_helpers.dm # code/modules/loadout/loadout_items.dm # code/modules/loadout/loadout_preference.dm # code/modules/mob/living/silicon/robot/robot_defense.dm # code/modules/mod/mod_theme.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/reagents/reagent_containers/cups/drinks.dm # code/modules/shuttle/mobile_port/variants/supply.dm # code/modules/surgery/organs/internal/eyes/_eyes.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png # icons/hud/screen_full.dmi |
||
|
|
1e45a9a79e |
Slightly cleans up the parent of command headsets (#94451)
## About The Pull Request - Gives `/obj/item/radio/headset/heads` a command headset icon, making subtypes not need to redefine it 7 times for no reason - (Also gives a fairly long if() check an early return, but thats more minor) ## Why It's Good For The Game > Gives `/obj/item/radio/headset/heads` a command headset icon, making subtypes not need to redefine it 7 times for no reason > (Also gives a fairly long if() check an early return, but thats more minor) - Makes the code slightly clearer to look at, that they all have the same icon except for alts ## Changelog 🆑 code: slightly cleaned up command headsets in-code /🆑 |
||
|
|
f640a0e972 |
Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request Depends on #94064 for the unit test but offers a better method for finding an atom to mount on - Finding a mount now takes into consideration the objects pixel x & y offsets meaning diagonal mounting is now supported. Gives great flexibility for mappers - If you don't want to use pixel offsets but default back to using the objects direction that behaviour is still preserved. Useful if your object uses directional icon states(lights & cameras for now) AND don't use offsets - If no direction could be specified then as the last resort it defaults back to the objects local turf for mounting ## Changelog 🆑 fix: all mounted objects on tables, fences, windows & walls should fall of correctly when the atom it is placed on is destroyed fix: security telescreen now falls off when their mounted wall is destroyed fix: defib wall mount falls off when their mounted wall is destroyed fix: floor lights are mounted to the ground/catwalk/tram floor they are sitting on meaning destroying it will destroy the light fix: wall mounted plaques now fall off when their mounted wall is destroyed /🆑 |
||
|
|
1c96273825 | Portable crew monitor drag-drop element (#94327) | ||
|
|
c83a070266 |
First new gateway in a year. (#93894)
## About The Pull Request This PR adds a new gateway with not too much threat a, a little bit of reward more often in the form of gimmicky items or armor. credit to https://github.com/NovaSector/NovaSector/pull/4880 For the gun and sfx sprite ## Why It's Good For The Game The gateway system is about as decrepit and old, the last gateway that was added was the museum which was made by somebody who would short after receive a rule 8 ban and plus that away mission is a neat scenery and has a lot of cool locations to look at but it has no loot, and you know what? that's okay and it achieves what it sets out to do beautifully, but if we discount that one for that reason alone (which for the record is a bad reason to discount something) then the last gateway that was added and that stuck was added in 2018? and it was snowdin? I dont actually know, correct me on this. But basically, more content good. ## Changelog <details> <summary>Screenshots/Videos</summary> <img width="862" height="431" alt="image" src="https://github.com/user-attachments/assets/d56add04-4b8c-4cd0-be7f-36d895e43868" /> <img width="654" height="665" alt="image" src="https://github.com/user-attachments/assets/1ccd15c4-5c31-4b00-b5f8-9a662efa3436" /> <img width="651" height="571" alt="image" src="https://github.com/user-attachments/assets/08ab4c1d-d9d0-413c-bc02-a3c51eda8761" /> <img width="1177" height="172" alt="image" src="https://github.com/user-attachments/assets/8df5e28d-5041-4676-8370-b8ab351f5b52" /> <img width="850" height="586" alt="image" src="https://github.com/user-attachments/assets/c03e6cbe-b290-421e-bbed-80a203221de4" /> <img width="1248" height="912" alt="image" src="https://github.com/user-attachments/assets/aa3c415d-52de-46b9-b317-e397b481b1b7" /> <img width="885" height="697" alt="image" src="https://github.com/user-attachments/assets/dd96d364-deae-4c56-9fc1-68b5e738ef4a" /> <img width="1284" height="646" alt="image" src="https://github.com/user-attachments/assets/b433f591-d92f-4bea-921c-b231fce2e7d9" /> also NO you cannot make the sm sword using the slow recharge shrink ray <img width="621" height="240" alt="image" src="https://github.com/user-attachments/assets/75f7d235-33c2-424e-9260-a3cc8c931ab9" /> </details> <details> <summary>Documentation of all notable loot 11/8/2025</summary> /obj/item/clothing/shoes/gunboots/disabler /obj/item/gun/energy/shrink_ray/one_shot (A shrink way that has a long recharge time and can only shoot once) /obj/item/slimepotion/lovepotion x 2 /obj/item/slimepotion/genderchange x 1 /obj/item/slimepotion/slime/mutator /obj/item/gun/energy/disabler/smoothbore /obj/item/gun/energy/alien/zeta /obj/item/gun/magic/midas_hand /obj/item/autosurgeon/xeno (A autosurgeon that only allows xenomorph organs, here because it looks unique) /obj/item/organ/heart/gland (abductor organs, random.) /obj/item/organ/eyes/corrupt /obj/item/organ/appendix/corrupt /obj/item/clothing/suit/utility/radiation/cbrnsuit x 2 /obj/item/clothing/head/utility/radiation/cbrnhood x 2 /obj/item/clothing/gloves/combat x 4 /obj/item/clothing/shoes/combat/swat x 2 /obj/item/clothing/mask/gas/atmos/glass x 2 /obj/item/clothing/under/rank/engineering/atmospheric_technician/nova/utility/advanced /obj/item/gun/ballistic/automatic/wt550/p90 x 2 /obj/item/ammo_box/magazine/p90_mag x 14 /obj/item/gun/energy/modular_laser_rifle/carbine x 2 /obj/effect/spawner/random/armory/laser_gun /obj/item/grenade/c4 x 3 /obj/machinery/deployable_turret/hmg x 3 (you think these are good, but they're not, they are really not, they're only good if you hit somebody with them when they're not expecting it, otherwise people will simply just avoid it, or if your being defensive of an area this thing will have you just be a beast.) /obj/machinery/mounted_machine_gun x 8 (But with no ammo, so theyre only setpieces, okay well there IS ammo on the map but its anchored, and theres no way to unanchor anchored items, if fallout thirteen players cant do it over the course of 4 years then tg players sure cant.) Also hello there it looks like you actually read this section, if you have dont worry, this PR wont get merged, why? I dont want to salt about that here. </details> 🆑 map: added the "heretic" gateway map (it has nothing related to heretics) /🆑 |
||
|
|
0b0c5ea91e |
Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request Extends the part of the crafting unit test that ensures consistency between the total mats of the components of a recipe (or rather, the result of said recipe) and a generic instance of the same type as its result, previously only implemented on food recipes. ## Why It's Good For The Game This ensures a degree of consistency with the material composition of various objects in the game. I couldn't do it in the original PR as that one was too big already and it took months to get it merged, and have the relative bugs fixed. Currently a WIP as I slowly deal with the unit test reports. ## Changelog 🆑 refactor: Follow-up to the crafting/material refactor from months ago. All objects crafted with stacks now inherit their mat composition (not necessarily the effects and color) by default, while previously only a few things like chair, sinks and toilets did. Report any object looking or behaving weirdly as a result. fix: The material composition of ammo boxes is no longer a 1/10 of what it's supposed to be. It was a shitty hack to make it harder to recycle empty ammo boxes. Instead, they lose materials as they're emptied now. /🆑 |
||
|
|
8c45d4466c |
[MDB IGNORE] Cleans up AI core structure, un-spaghettis some AI code (#93873)
## About The Pull Request The AI core structure now fully integrates item/tool interactions and no longer uses attackby/take_damage overrides. Construction behaviour has been isolated into its own file. All handling relating to the AI core's status when shunted has been turned into signals. For this reason, helper procs for managing core link state have been made and integrated into the relevant users (APC shunting, mech takeover). The AI core no longer references the remote AI mob. /obj/structure/ai_core/deactivated has been removed from code since it had no function after refactoring. There was only a single instance of it being used in a map, which has been replaced with a var edit. There may be more things I changed, but I'm h |
||
|
|
39a196824a |
Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request Depends on #94064 for the unit test but offers a better method for finding an atom to mount on - Finding a mount now takes into consideration the objects pixel x & y offsets meaning diagonal mounting is now supported. Gives great flexibility for mappers - If you don't want to use pixel offsets but default back to using the objects direction that behaviour is still preserved. Useful if your object uses directional icon states(lights & cameras for now) AND don't use offsets - If no direction could be specified then as the last resort it defaults back to the objects local turf for mounting ## Changelog 🆑 fix: all mounted objects on tables, fences, windows & walls should fall of correctly when the atom it is placed on is destroyed fix: security telescreen now falls off when their mounted wall is destroyed fix: defib wall mount falls off when their mounted wall is destroyed fix: floor lights are mounted to the ground/catwalk/tram floor they are sitting on meaning destroying it will destroy the light fix: wall mounted plaques now fall off when their mounted wall is destroyed /🆑 |
||
|
|
baf3837ae8 |
Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts: # _maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm # _maps/RandomRuins/SpaceRuins/garbagetruck2.dmm # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # _maps/map_files/tramstation/tramstation.dmm # code/_onclick/hud/new_player.dm # code/datums/components/squashable.dm # code/datums/diseases/advance/symptoms/heal.dm # code/datums/diseases/chronic_illness.dm # code/datums/status_effects/buffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/stamcrit.dm # code/game/machinery/computer/crew.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/wall_mounted.dm # code/game/turfs/closed/indestructible.dm # code/modules/admin/view_variables/filterrific.dm # code/modules/antagonists/heretic/influences.dm # code/modules/cargo/orderconsole.dm # code/modules/client/preferences.dm # code/modules/events/space_vines/vine_mutations.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/carbon/human/death.dm # code/modules/mob/living/carbon/human/species_types/jellypeople.dm # code/modules/mob/living/damage_procs.dm # code/modules/mob/living/living.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mob_spawn/mob_spawn.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/projectiles/guns/ballistic/launchers.dm # code/modules/projectiles/guns/energy/laser.dm # code/modules/reagents/chemistry/machinery/chem_dispenser.dm # code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/medicine_reagents.dm # code/modules/surgery/healing.dm # code/modules/unit_tests/designs.dm # icons/mob/inhands/items_lefthand.dmi # icons/mob/inhands/items_righthand.dmi # tgui/packages/tgui/interfaces/ChemDispenser.tsx |
||
|
|
7a3ad79506 |
All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request It's just a partial cleanup of anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md) code from /tg/'s ancient history. I compiled & tested with my helpful assistant and damage is still working. <img width="1920" height="1040" alt="image" src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3" /> I'll upload the .cs script I used to do it shortly. ## Why It's Good For The Game Just minor code cleanup. Script used is located at https://metek.tech/camelTo-Snake.7z EDIT 11/23/25: Updated the script to use multithreading and sequential scan so it works a hell of a lot faster ``` /* // Copyright 2025 Joshua 'Joan Metekillot' Kidder This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. // */ using System.Text.RegularExpressions; class Program { static async Task Main(string[] args) { var readFile = new FileStreamOptions { Access = FileAccess.Read, Share = FileShare.ReadWrite, Options = FileOptions.Asynchronous | FileOptions.SequentialScan }; FileStreamOptions writeFile = new FileStreamOptions { Share = FileShare.ReadWrite, Access = FileAccess.ReadWrite, Mode = FileMode.Truncate, Options = FileOptions.Asynchronous }; RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled; Dictionary<string, int> changedProcs = new(); string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*"; Regex camelCaseProcRegex = new(regexPattern, regexOptions); string snakeify(Match matchingRegex) { var vals = matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray(); var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower(); string logString = $"{vals[0]} => {newVal}"; if (changedProcs.TryGetValue(logString, out int value)) { changedProcs[logString] = value + 1; } else { changedProcs.Add(logString, 1); } return newVal; } var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>(); // uses default ParallelOptions // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) => { var reader = new StreamReader(filePath, readFile); string oldContent = await reader.ReadToEndAsync(); string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify)); if (oldContent != newContent) { var writer = new StreamWriter(filePath, writeFile); await writer.WriteAsync(newContent); await writer.DisposeAsync(); } reader.Dispose(); }); var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList(); foreach (var pair in logToList) { Console.WriteLine($"{pair.Key}: {pair.Value} locations"); } } } ``` ## Changelog 🆑 Bisar code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case, in-line with the STYLE guide. Underscores rule! /🆑 |
||
|
|
81427cd5cf |
Unit tests, refactor & realignment for map loaded wall mounts (#93662)
## About The Pull Request This 1st has to be PR'd so the integration tests can point out all wallmounts that could not find a support structure to mount on. I then will do many map edits to align them onto the closest atom Yes we no longer use wall mount but atom mounted component. All objects that are mounted on windows/tables & fences now also fall off when destroyed It'll probably be a WHILE before I can fix all wall mounts. Long day. Expect me to misalign many stuff to fix failing CI so make sure to provide suggestions when possible Improved wallmount code overall - Fixes #93793 ## Changelog 🆑 fix: fixes all incorrectly maploded wall mounts that aren't actually hanging on any support structure fix: objects mounted on tables, windows & fences also fall off now when destoryed qol: lights can be mounted on windows qol: cameras can be mounted on windows qol: buttons can be mounted on tables refactor: improved how wall mounts interact with objects as a whole report bugs on github /🆑 |
||
|
|
1728bcaee6 |
Husk reports prioritize incurable forms of husking (#93998)
## About The Pull Request Husk report priority is now ling -> unknown -> burns rather than burns -> ling -> unknown. ## Why It's Good For The Game Stops doctors from wasting time by hiding sources ## Changelog 🆑 Melbert qol: Other forms of being husked are now reported before burns /🆑 |
||
|
|
c7cb0674cc |
Preliminary blood refactor (#93854)
## About The Pull Request Moves all blood handling into procs and adds ways to easily hook into basically every basic blood behavior. This PR is not meant to fix every single case of janky blood logic in the game. The main point and motivation of this PR is to add hooks for blood behaviors. This allows for way more flexibility with blood code. I am not going to fix our 3000 instances of single-letter vars, wacky blood transfers, etc. This is just the groundwork for future PRs to build off of, and by itself, should do very little to change blood behavior. I also added a rigorous set of unit tests for verifying that all of the basic blood volume procs work correctly. ## Why It's Good For The Game Previously, blood was handled via directly reading/writing [var/blood_volume]. This was INCREDIBLY inconsistent and there was no way to hook into it. This PR makes blood handling way more consistent, which is great for all sorts of features. |
||
|
|
71faa643bf | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 | ||
|
|
5146cfd403 |
Moves camera update handling to background subsystem, (maybe) fixing lag (#92208)
## About The Pull Request When a camera update is triggered, it is instead added to a queue on a background subsystem An AI entering a camera chunk which is queued to update will force the update immediately (bypassing the queue) While the root problem of this is, ultimately, not addressed... <img width="554" height="58" alt="467828777-eff3f0e5-49d6-4997-b4d7-05eff6432155" src="https://github.com/user-attachments/assets/c2d6a5f5-d958-463e-959f-116bd0dab475" /> ...the change will ultimately prevent update spam from consuming all of the server's resources - instead allocating updates to the backburner in times of high server stress (or on multi-z maps) ## Changelog 🆑 Melbert refactor: Refactored the way camera updates are handled to hopefully reduce some lag. Report any oddities /🆑 |
||
|
|
d0ca474789 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 | ||
|
|
14d2514aa9 |
[MDB IGNORE] Refactors away /area/station/ai_monitored and its subtypes (with bonus neat repathing) (#93704)
## About The Pull Request /area/station/ai_monitored's behaviour was isolated into a component, `/datum/component/monitored_area`, which itself uses `/datum/motion_group`s to query cameras. Functionally, it (should) work identically to the old implementation. I'm sure that behaviour could have been further cleaned up, camera code is quite dreadful, but it's better to focus on isolating the behaviour first. Baby steps. Areas that want to opt into monitoring can set `var/motion_monitored` to TRUE (this approach was taken to make subtyping easier). The following non-AI areas were changed: - /area/station/ai_monitored/security/armory -> /area/station/security/armory - /area/station/ai_monitored/command/nuke_storage -> /area/station/command/vault - /area/station/ai_monitored/command/storage/eva -> /area/station/command/eva All other `/area/station/ai_monitored` subtypes were repathed into `/area/station/ai` and cleaned up in a way that I thought made logical sense. It is **much** more readable now. For example: - /area/station/ai_monitored/turret_protected/aisat -> /area/station/ai/satellite - /area/station/ai_monitored/command/storage/satellite -> /area/station/ai/satellite/maintenance/storage - /area/station/ai_monitored/turret_protected/ai -> /area/station/ai/satellite/chamber |
||
|
|
5540a074e3 |
Reverse beartrap message fix (#93737)
## About The Pull Request fixed wrong mob in span message ## Changelog 🆑 fix: Reversed bear trap now correctly displays name of person who put it on you. /🆑 |
||
|
|
ce509e0ad5 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 | ||
|
|
5a31b00b2f | [NO GBP]Fixes some wall mounted items & Flaky poster sign CI Failures (#93606) | ||
|
|
54198986b7 | generic device handling sounds (#93536) | ||
|
|
e28e9fbdba | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 | ||
|
|
9740c687de |
General maintenance for wall mounts (#93534)
## About The Pull Request - Fixes #93392 - Replaces all custom callbacks with call to `deconstruct()`. The callbacks weren't necessary as it did the same thing as `deconstruct()` but in an round about way - Removed duplicate `Initialize()` procs and the params `building` & `ndir` from all wall mounts. Makes everything cleaner ## Changelog 🆑 fix: wall mounts placed by player now falls off when the wall they are mounted on is destroyed code: cleaned up wall mount code /🆑 |
||
|
|
f5815719f5 |
Fix runtime with empty tape recorders burning (#93479)
## About The Pull Request `/obj/item/taperecorder/fire_act()` just assumes it has a tape inside when sometimes it doesn't ## Why It's Good For The Game Fix runtime |
||
|
|
9243bcdd3a |
Bluespace Light Replacer - Broken Bulbs Scanner (#93187)
## About The Pull Request This PR adds a scanning functionality to the bluespace light replacer that identifies broken light bulbs within visual range and highlights them with temporary bluespace firefly markers (sorry for this sprite): https://github.com/user-attachments/assets/a0f3b2cf-9dde-4888-9ce1-085ed18141d5 ## Why It's Good For The Game Makes finding broken lights in dark areas much less tedious, especially during station-wide electrical storm. By making broken light identification easier, this feature encourages players to actually fix lighting issues rather than ignoring them. ## Changelog 🆑 add: Broken Bulbs Scanner for Bluespace Light Replacer /🆑 --------- Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> |
||
|
|
348789fa8d |
The Renamening- upgrades UNIQUE_RENAME and moves a lot of renaming implementations under it (#93115)
## About The Pull Request Moves a lot of the unique renaming implementations described in #82664 to the functions given by the `obj_flag` `UNIQUE_RENAME`. `UNIQUE_RENAME` has been given new properties to account for non-standard renaming, these being the `RENAME_NO_DESC` flag that prevents changing the description, the `nameformat()` and `descformat()` procs that, when modified, allow for applying naming formats(i.e. "Body Bag - [input]"), as well as other post-renaming handling such as changing the name of the output plant of a renamed seed, the `rename_checks()` proc that allows for unique naming prevention(such as a locked personal closet), and the `rename_reset()` proc to clean up other possible renamed variables potentially changed in `nameformat()` and `descformat()`. This also adds `/datum/element/tool_renaming` to crayons, which will let them rename anything that has `UNIQUE_RENAME`. I looked through everything with that flag, and I didn't see anything that I don't think should be renameable by a crayon(except things that shouldn't be renamable with pens), so it shouldn't fuck anything up. ## Why It's Good For The Game moves all of the non-honorable mentions in #82664 to the same renaming system, and also moves all of the honorable mentions save for: - plaques, as they only get renamed once and wouldn't benefit from `UNIQUE_RENAME` imo - books, because they're far more than just renaming, and are persistent - paintings, because they're persistent - photos, because they're not normal renaming and they're persistent - endoskeletons, because they're done with a multitool in UI - cardboard IDs, because they're far more than just renaming Additionally, this fixes: - Implanter renaming didn't work because a ! was missing - Clown borg picket sign renaming didn't work because they didn't use the correct arguments This'll make it easier to make renameable objects in the future, as well. ## Changelog 🆑 fix: fixes implanter renaming not working fix: fixes clownborg picket sign renaming not working code: brought most unique renaming implementations under UNIQUE_RENAME /🆑 |
||
|
|
d14e538393 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 | ||
|
|
a2c7c8e57b |
Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request Heretic has received a complete overhaul. This PR touches nearly every aspect of the antagonist. For readability's sake, not every change is going to be listed in this pull request. For the full list of changes please refer to the design doc: https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g. Code by Me, @Xander3359 and @Arturlang TGUI by @Arturlang Sprites by OrcaCora and GregorDM Writing bits by @necromanceranne ### Core changes - Cross-pathing has been removed. Main knowledge spells are now exclusive to their path (for the most part). - For every main knowledge unlocked (save for the robes and the blade upgrade), Heretics can choose one option from a draft of 3 random side knowledges (this is a free point). - Heretics can now purchase side knowledges from a new tab, the "Knowledge Shop". Side-knowledges have been divided by tier (Stealth, Defense, Summons, Combat and Main). Tiers are unlocked as you progress toward your main path. - Heretics now gain the grasp and mark upgrade immediately, but their main knowledge choices cost twice as much (except for the first spell, the robes and the blade upgrade). - Path specific robes have been introduced! They come with their own set of quirks. - Each Path has received a passive ability. This passive is upgraded when you first create your robes, and again when you complete the Ritual of Knowledge. - Paths have been rebalanced as a result of the removal of cross-path progression. Cosmic and Moon paths have received soft reworks. - Upon unlocking the path 2nd level or reaching a total of 8 points worth of knowledge, Heretics will lose the ability to blade break (and the limit on blades all together). - Ascension now automatically calls the shuttle with no possibility of a recall. - Late join Heretic has been removed. ### New UI <img width="750" height="635" alt="moon path ui" src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990" /> ### Knowledge shop <img width="787" height="669" alt="Knowledge shop" src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7" /> ### Quality of life //General balance changes - Heretics will now gain X-ray vision for a few seconds when nearby an eldritch essence (this effect has a cooldown). - Ritual of knowledge now requires 1 uncommon item instead of 2. You may now use a stunprod instead of a baton to complete the ritual. Beartraps have been removed from the list of possible reagents. - The maximum number of possible sacrifices required to ascend has been reduced from 6 to 5 while the minimum has been upped to 4. - Codex Cicatrix no longer requires a special pen to be made. ### Passive abilities - Heretics now start with a passive ability. You can find what it does on the path info tab after a path has been selected, and what they gain when upgraded. - Crafting your first set of Eldritch robes will bump your passive to level 2. - Unlocking the 2nd level will subsequently unlock your "Ritual Of Knowledge" - Completing the ritual of knowledge or ascending will net you the final level. ### Path Specific Robes - Armorer's Ritual is no longer a side knowledge. Each path will have their own unique version of the ritual. This is placed after the 2nd spell in the tree. - Robes can no longer be destroyed by fire and acid, grant t4 flash protection (Moth Heretics stay winning) and protection against basic syringes, to bring them on par with other antagonist's armor sets. - The recipe to craft the robes is now a set of armor/vest, a mask (any mask will do now, not just gas masks), plus the unique reagent required for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so on) - Wearing the robes as a non-heretic may yield some unfortunate side-effects. ### Moon Path Rework Moon path rework. Moon Heretics gain immunity to brain traumas and slowly regenerate brain health. Equipping the moon amulette channels its effects through the moon blade; making it unblockable and cause sanity damage instead of brute. Ring leader's Rise now summons an army of harmless clones that explode when attacked; the explosion briefly stuns non-heretics and cause sanity and brain damage to them. Moon blade can also now be used when pacified and Moon spells are no longer blocked by regular anti magic, only mind magic protection. **Cosmic Path Rework** Cosmic path has received the biggest batch of changes alongside Moon. The path has been dead last in ascension and pickrate (less than 5%) for almost 2 years. It did gain some popularity over the last few months, reaching the highest ascension rate in the game (12%) while mantaining a relatively low pickrate. Cosmic sits in a weird spot, where pretty much every knowledge surrounding the path is either mediocre or, in the case of the ascension, dysfunctional. Yet it has maintained a smidge of relevancy due to how quickly Cosmic heretics can capture and sacrifice targets thanks to Star Touch. As a result, the best course of action would be to rebalance the entirety of the kit; granting the heretic more tools to manipulate space and dictate the flow of a fight, while lessening their ability to end a confrontation by instantly sleeping their opponents. lastly The Star Gazer is now ghost controlled ; And they shoot lazers! <img width="636" height="451" alt="gazer gag 3" src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b" /> ## Why It's Good For The Game ### Ok...but why do we want this? Again, if you want my full reasoning, please check my doc https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g. To keep it short and concise; Heretic is too complex and unintuitive for its own good. Too impenetrable for new players and too abusable for experienced players. This can be chalked up to a lot of poor design decisions. But ultimately, what I believe being the biggest contributor to the current status of Heretic is the ability to move into different paths, also known as "Cross-Pathing". ### Cross Pathing my beloathed. Cross-pathing, while cool in theory, overcomplicates the antagonist and overloads them with power. Players dealing with the heretic are incapable of working out what a given heretic can do. This also leads to late game heretics having 3 rows Worth of action buttons and virtually no weakness. Over the last year, I've often received the understandable but also kind of unfair accusations of making Heretic too powerful without a clear aim or purpose. My goal with the paths I've reworked over the last year (Rust,Void and Blade) wasn't necessarily to just make them stronger (although that was also part of the goal, as they were paths that were underperforming), but for them to have more interactions with the sandbox and to better live up to the fantasy presented to the player. If an harbringer of frost gets countered by a cup of coffee, we probably messed something up. Unfortunately, the current incarnation of Heretic doesn't really allow for surgical balance changes to specific paths. Every time a knowledge gets buffed, we make every path that can easily tap onto that knowledge stronger by default. It doesn't take a genius to understand why this system is ultimately unsustainable. ### Blade Breaking I feel that after a heretic has reached the near peak of their power, they no longer need the ability to instantly escape any encounter. Check my doc for my full reasoning. ## Less versatile, more specialized paths. By removing cross-pathing, we remove a huge maintainability burden from the antagonist. Paths can now be designed around clearer strengths and weaknesses. They become easier to balance and less of an headache to understand for everyone. It also means we can give paths some needed quality of life quirks without having to worry how such a change might have a knock-on effect for other paths. Ash heretics can finally let loose without dying by their own flames. Cosmic Heretic can go to space without having to carry a modsuit. Moon Heretic can use their abilities without fear of one random trauma ruining their day, and so on. ### What a horrible night to have a curse...., wait how do I curse people again? As of right now the heretic tree has quite a hefty amount of trinkets that pretty much never see use. Partly because the tree itself is a nightmare to navigate. And partly because why would anyone set up an elaborate plan or scheme when they can unleash 2 rows of spell in the span of bunch of seconds. Heretics mostly gravitate towards powers that push them towards greater, more potent combat strength. If it doesn't contribute to killing people quicker, it isn't worth doing for most. And given the opportunity cost associated for taking those powers, they will remain that way so long as there are better choices to be poached. The new draft system encourages Heretics to play more with the tools at their disposal. If you want to go for a specific combo from the side path options, you may now do so by tapping into the knowledge shop. Yes, the shop does include a few knowledges from the other paths. But these are limited to 1 per path, are very expensive and can only be unlocked very late into the shift. ## Drip Of the Mansus The iconic heretic robe is actually sequestered to a side path that is most easily access by only two paths at a time. Since heretic paths are being made to be much more specialized, the most obvious way in which this can be showcased is through an easily identifiable outfit. By using the robes, we can both telegraph WHAT heretic you are looking at, and just how much power they've accumulated and when it is reasonable to take the kid gloves off and treat them as a genuine threat. If a heretic is in their robes, that heretic is now a significantly more prominent danger to the station. It also serves as a useful means for gating some of the more powerful effects of a heretic's path behind the robes, AND enable options for disarming them of that power should they be captured without making it something endemic to their mob. A major problem with heretics is a lack of certainty as to how powerful they have become. A heretics robes is one of the milestones to help players dealing with heretics identify that. ### Will this be 100% fair and balanced? This is a massive overhaul to a pretty complex and bloated antagonist. I've done my best to show the changes to several maintainers and other members of the community for their feedback. But at some point we'll have to see how this behave in the environment to get a feel if something is over or undertuned. (that's my way of saying, yes this is likely gonna require a testmerge or two). What I will say is that I'm not trying to change the core identity of Heretic. Heretics should have the upperhand in single encounters early on, be able to joust a small group of players after they unlock their final spell, and end the round when they ascend. They're a progression antagonist. They should retain their payoff as well as pose a danger as they grow stronger. But if more players feel like they are more reliably able to play the antagonist in more varied and interesting ways, rather than the antagonist largely existing as a measuring stick for 'robustness' due to its elitist design philosophy, then the rework has been a success. There should be something for everyone in the antagonist, as is true for all of our antagonist roles. |
||
|
|
bbe729aef7 |
Converts more attackby's to interactions (#93106)
## About The Pull Request Converts the following: - Medical Kiosk - Implant case - Flamethrower - Chemical implant case - Pappercutter Also I've looked at some alt click procs and adjusted some of their returns |
||
|
|
f72eb75a6f |
Handcuffs can now be used to bind certain items (briefcases, toolboxes, etc.) to your hand. (#93305)
## About The Pull Request Technically, this PR introduces the cuffable_item element and the cuffed_item status effect and their relative code. In more player-friendly terms, this allows the ability to use handcuffs to bind certain items to your hands by right-clicking it with a pair of handcuffs in your active hand. This makes the item unable to be dropped, for better or worse, until you or someone else remove said cuffs. And no, this doesn't conflict with the ability to be handcuffed if you're silly enough to think that. There are more than one way to remove the cuffs. For the player with the item cuffed to their hand, to remove the cuffs they can either click the status alert, or examine the item and click the relative hyperlink. The second option is good to have if for some reason the status alert doesn't show up (too many alerts etc.). For other people, they can remove the cuffs by opening the strip inventory menu (the one you open by click-dragging the sprite of person with the item onto yours). It's an alternative action specific to this status effect (therefore only held items). Until the cuffs are removed, trying to remove the item **directly** will bring you nowhere **because the item is stuck to their hands**, duh. Alternatively you can just chop their arm off. You do what you do. For a list of items that can be bound with cuffs (suggestions welcome): - briefcases - toolboxes - lockboxes - first aid kits - shields (they generally have handles and all. gameplay-wise they already take away one hand slot to use. Using cuffs seals the deal: no swapping items on the go, so no two-handed weapons, but you won't drop the shield until it's broken) - jerrycans (Kryson's suggestion) - soup pots (ditto, kinda weird) - coffee mugs, and the mauna mug (ditto) - buckets - plushes (silly stuff, if you ever want to arrest a plush or test the feature) - pet carriers - mining drills - swords with closed guards (ERT chainsaw-sword, cap's sabre, parsnip sabre, cutlass, e-cutlass...) - crutches and the white cane - baskets - flashlights and lamps (not subtypes like flares, glowsticks and torches) - TTVs - chairs ## Why It's Good For The Game This opens up for some emergent use for handcuffs beside people (or prisoner shoes). Inspired by a scene of some 1998 action movie, where one of the bad guys had the mc guffin briefcase latched to his wrist with a pair of handcuffs. Codewise, it was also a reason to refactor bits of code like handcuffs and screen alerts slightly. On a sidenote, actual sprites for cult/heretic shackles. ## Changelog 🆑 add: You can now bind certain items like briefcases, toolboxes, medkits, shields, jerrycans etc. to your hand with a pair of handcuffs, preventing them from being dropped. You can remove said binds at any time unless incapacitated, and so can others through the strip inventory menu. qol: The appearance of a screen alert now updates if the object it represents (like, an item offered by another player) changes appearance. imageadd: The shadow shackles item (from cult magic and heretic sacrifices) now has its own icon. /🆑 |
||
|
|
cfbae07813 |
Fix admin debug gps to be toggable and reset the affected turfs (#93226)
## About The Pull Request This fixes the admin debug gps tool so that it must be turned on to activate. (it spawns off now) Also when it is toggled on/off, it resets the colored turfs to their initial state. ## Why It's Good For The Game When someone would equip the admin outfit, the debug gps would start processing immediately, despite it not being in your hand, or even turned on. This adds some restrictions so that you have to manually activate it and allows the turfs to reset. ## Changelog 🆑 fix: The admin debug gps is now turned off by default and toggling it will reset the affected turfs. admin: Equipping the admin outfit will no longer automatically trigger the debug gps effect. /🆑 |
||
|
|
8aa39b75f0 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
def17fd90a |
Rare Earths! Advanced soils for botany. (#92513)
## About The Pull Request This PR adds 4 new types of soil and a holder item; the soil sack, to contain and transport said soils. <img width="496" height="378" alt="bild" src="https://github.com/user-attachments/assets/57f42a9c-c731-4195-91df-b4456ec45e7b" /> Two of the new soils + the regular old soil are available in the premium section of the nutrimax. All 5 soil types are available from cargo. It also adds two new plant traits; soil lover and semiaquatic, that allows coders to confer maluses to plants growing in trays or soil respectively. Potatoes, sweet potatoes, carrots, parsnips, cahn'roots, white and red beets currently have soil lover, reducing their produced yield by 30% and their potency randomly between 20-80% if grown hydroponically. Rice has semiaquatic which increases the amount of weeds gained by 50% if grown in soil rather than hydroponically. ## Advanced soil types ### Vermaculite #### Stats Max Nutrients: 20u Max Water: 150u #### Special Effects Multigraft: Up to 3 grafts can be cut from a plant planted in vermaculite. Graft Medium: Graft cuttiongs can be directly placed into vermaculite to create a new plant vegetatively. ### Hydrogel Beads #### Stats Max Nutrients: 15u Max Water: 300u #### Special Effects Hydroponic + Soil: Both water loving and soil loving plants can grow without maluses. Super Water: Water consumption rate is decreased by 50% ### Korta Coir #### Stats Max Nutrients: 20u Max Water: 100u #### Special Effects Fast Mushrooms: Mushrooms mature(and age) 40% faster if planted in this soil. ### Worm Castings #### Stats Max Nutrients = 35u Max Water = 200u #### Special Effects Slow Release: If the nutrients run out, 1u nitrogen will be automatically added to the nutient pool. Worm Habitat: Composting veggies in this soil has a chance to produce an extra slimy worm. ### Soil Sacks Use them on the floor to place a soil at that location. You can reverse this process by right clicking a soil with a shovel. The sacks are huge items that deals stamina damage, but have slowdown when carried. They can be wielded to remove slowdown, double the damage output and gain 25% block chance. They have unique normal and wielded inhands for each sack type. #### Price List **Soil** Nutrimax: 50 cr Cargo: 400 cr / 5 sacks **Vermaculite** Nutrimax: 100 cr Cargo: 400 cr / 3 sacks **Hydrogel** Nutrimax: 100 cr Cargo: 400 cr / 3 sacks **Coir** Nutrimax: N/A Cargo: 600 cr / 3 sacks **Worm Castings** Nutrimax: N/A Cargo: 800 cr / 3 sacks #### Misc Soil Changes Soil now have a new armour type and are generally much harder to destroy by shooting or bashing them. Fixed a bug where weeds would instantly reduce yield to 3 instead of lowering it by 1-2 per cycle. ## Why It's Good For The Game I have long been a fan of using soils in botany, they are the cheapest and easiest way to make new trays and enable many interesting strategies. The default soil is fine for what is but it kinda sucks, not only having low stats but also missing autogrow, a feature botanist have grown completely addicted and dependent on. When self sustaining trays were removed and autogrow added, it was intended as a way to keep a couple of plants alive while you ran out to do errands or grab a drink. However, the feature has devolved into basically a shift start self sustaining for all your trays and standard practice is using it on every single tray that currently is not trying to mutate. This has resulted in certain core botany mechanics like water and pests being made totally irrelevant, shrinking design space a lot. Rather than just reaching for the stick, I thought it would be fun to instead offer them a carrot in the form of an expanded toolset of soils with unique effects that cannot be replicated by trays. These new soils offer niche benefits that enable advanced botany gameplay and provides a framwork for deepening plant / tray interactions in the furture. ## Changelog 🆑 add: Added 4 new types of soil add: Added soils sacks to the nutrimax add: Added soil sack crates to cargo. balance: Soil now has higher armor values. balance: Rice now gets more weeds if grown in soil. balance: Carrots, potatoes, beets and their mutations now get reduced yield and potency if grown hydroponically. fix: Weed overgrowth no longer instantly sets yield to 3. /🆑 |
||
|
|
b308ee9d78 | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
4a618934e9 |
Removes message arg from Hear, free performance (#93020)
## About The Pull Request The first argument of `Hear` is `message`, the message heard OR SO YOU'D THINK Actually the first argument doesn't do anything but get overridden by ALL implementations of `Hear` No other uses as far as I and Ephe can tell. Removing it makes it a ton easier to understand and gives us some free performance in radio code by not rendering messages twice ## Changelog 🆑 Melbert code: Removed some redundant code from core hearing code. Report if you hear anything weird. /🆑 |
||
|
|
0ebdc63352 |
Cyborgs can use intercomms (#93024)
## About The Pull Request Fixes Cyborgs not being able to interact with station intercoms Ai and Humans ## Why It's Good For The Game Seems like a bug no? Silicon Remote interaction should be the same for Ai and Cyborgs. ## Changelog 🆑 fix: Intercomms work for Cyborgs /🆑 |
||
|
|
8f7f8a26d2 |
Allows health analysers to scan Cyborg MMIs and show a brain (or not) (#93035)
## About The Pull Request Fixes #92892 may not need fixing as looking at the code the feature was only left in for soul But I expanded it a little to work on Cyborgs/MMIs ## Why It's Good For The Game - Preserves soul ## Changelog 🆑 fix: Allows health analysers to scan Cyborg MMIs and show a brain (or not) /🆑 --------- Co-authored-by: loganuk <falseemail@aol.com> |
||
|
|
9b282a850e | Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync | ||
|
|
56b75431d5 |
clocks are a little more beautiful (improve area beauty value) (#92966)
## About The Pull Request This PR gives table and wall clocks the beauty element. ## Why It's Good For The Game These are furnitures that might make the room a smidge prettier. ## Changelog 🆑 balance: Clocks, both mounted or tabletop, now improve room's beauty a little. /🆑 |
||
|
|
1d97051b6e |
Removes a ton of obsolete or unused skyrat icon overrides (#4661)
## About The Pull Request Not much more to say summary-wise. It does as the title says. The PR was done commit-by-commit so it should be easy to undo anything that for some reason wants to be kept. Comparisons are in Proof of Testing. <details><summary>Full Change List</summary> - **Removed overwrites in favor of TG icons:** - - Airlock Machines (Atmos Buttons) - - Extinguisher Cabinets - - Experimentor - - Buckets - - Deep Fryer - - Food Processor - - GPS - - Analyzer - - T-Ray Scanner - - Geiger Counter - - Plumberer (This was only a slight green tint on the service one.) - **Removed unused code/icons** (Due to being identical to TG or already commented out) - - Cameras - - Air Alarms (Also updated light color for these) - - Doublebeds/Doublebed sheets - - Gibber - - Coffeepot - - _Unreached, duplicate TG icons in all touched files (This just wastes space and server load)_ - **Other assorted changes:** - - Resprites the Heavy Crowbar to match other crowbar overwrites - - 'Resets' Status Display overwrite, updating the TG base-icons for standard alerts while maintaining modular alerts + a few overwritten icons - - Fixes some modular AI screens not staying stationary as they should - - _**Removed a few other entirely-unused and never-used icon files. Namely some biohaz suits.**_ </details> ## Why It's Good For The Game **For still-functional overwrites that were removed:** TG has updated all of these, and all of them match each other. The wallmounts are consistent with the ones already in use here (i.e. bounty boards), the machines with other machines in use (i.e. the kitchen equipment).... this same argument applies to all of them. They're all up-to-date, they're all vast improvements over what they were pre-overwrite, and they all are intended to work with each other. There's no need to keep the hodgepodge of overwrites taken from different places and sprite styles. The 'outdated sprites' they replaced are no longer outdated. **For the rest:** Sprite and code maintenance! Removing overwrites that are no longer in use and unused icons that are taking up space ## Proof Of Testing <details> <summary>Screenshots/Videos</summary> Yea dis shi works <img width="130" height="84" alt="image" src="https://github.com/user-attachments/assets/8744a8aa-a44b-4564-84f1-5df73f4fcbd2" /> <img width="336" height="222" alt="image" src="https://github.com/user-attachments/assets/6cfecd82-52f1-481d-85f9-7a1a3c0a72f8" /> And yes I went through all the alert icons <img width="87" height="91" alt="image" src="https://github.com/user-attachments/assets/9abba158-fb1f-4416-b36d-7b91f440e7c5" /> </details> --- <details> <summary>Comparisons (New | Old)</summary> **Extinguisher Cabinets** <img width="344" height="124" alt="image" src="https://github.com/user-attachments/assets/1e6843ea-132b-49cd-9aad-aa9a0709d1c1" /> **Atmos Buttons** (Yes, half of them are already updated on Master) <img width="190" height="68" alt="image" src="https://github.com/user-attachments/assets/a92423ff-4a59-426f-8f01-d0f7f4c62e1a" /> **Fryer** (TG one includes animations! The baskets go in when there's actually something frying!) <img width="264" height="167" alt="image" src="https://github.com/user-attachments/assets/c6befcf1-0801-4a22-9bd7-79e479cb29f8" /> **Processor** <img width="175" height="99" alt="image" src="https://github.com/user-attachments/assets/7db37b9d-83fa-48d1-bfd3-2b61c7053f23" /> **Experimentor** <img width="294" height="92" alt="image" src="https://github.com/user-attachments/assets/a58a5fef-a352-44c7-b086-0faad7a3cb0a" /> **Buckets** <img width="227" height="62" alt="image" src="https://github.com/user-attachments/assets/f197894d-48a2-48c4-8df3-cbd209ff13d2" /> **GPS** <img width="243" height="126" alt="image" src="https://github.com/user-attachments/assets/839c9943-1779-400e-a82e-32285febcadd" /> **Plumber** <img width="261" height="82" alt="image" src="https://github.com/user-attachments/assets/185c8f11-53ed-4dff-a42b-3f44288fb2c4" /> **Status Display** <img width="169" height="232" alt="image" src="https://github.com/user-attachments/assets/74e60269-6b18-4ce8-975f-6b8b1308ab7f" /> **Geiger Counter** <img width="322" height="75" alt="image" src="https://github.com/user-attachments/assets/f224e239-74f2-47dc-bce7-e22e6403afbb" /> **T-Ray** <img width="120" height="114" alt="image" src="https://github.com/user-attachments/assets/1c3fbbfc-ff13-41c9-9544-874c0dee15e5" /> **Analyzers** <img width="258" height="64" alt="image" src="https://github.com/user-attachments/assets/176cfa35-f01a-4323-a398-76c5f21d1398" /> </details> ## Changelog 🆑 image: removed a lot of no longer needed or already-unused icon overrides from the Skyrat era fix: fixed some jittering in AI status display icons /🆑 |
||
|
|
d2f34e33be |
moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request moves all implementations (im aware of) for "Im a parent type dont spawn me please" to the datum layer to standardized behavior adds a standerized proc for filtering out "bad" items that we dont want spawning. applies to it the subtype vendor, gifts, and a new spawner and mystery box for a random gun (neither playerfacing) "port" of https://github.com/shiptest-ss13/Shiptest/pull/4621 https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa small warning: I dont have EVERY abstract type defined right now but, ive done a good enough job for now. Im tired of data entry rn ## Why It's Good For The Game standardizing behavior. Might be a micro hit to performance however having this lets us not rely on icon state to determine whether something is a parent type and makes it much easier to tell something is a parent type (could be applied further to things like admin spawning menus and things like that). need feedback on if this is actually good for the game. ## Changelog 🆑 add: Soda cans show up in the silver slime drink table. add: Examine tag for items that are not mean to show up ingame. refactor: Standardizes how gifts rule out abstract types. fix: gifts no longer check if something has an inhand, massively expanding the list of potential items. /🆑 |
||
|
|
7c0973ccf4 |
Refactors names and voices / potted plants no longer conceal voice (just appearance) / honorifics show on examine (#92781)
## About The Pull Request Closes #92778 Closes #86829 <img width="347" height="39" alt="image" src="https://github.com/user-attachments/assets/c50bd1ff-8c00-47a7-a31a-617fae2adc5b" /> 1. Splits `TRAIT_UNKNOWN` into `TRAIT_UNKNOWN_APPEARANCE` and `TRAIT_UNKNOWN_VOICE` 2. Renames some stuff like `getvoice` and `getspecialvoice` 3. Gets rid some crummy signals around `get_visible_name` and `get_voice` 4. Heads now apply the disfigured trait when relevant (rather than snowflake checking for damage amount) 5. Ling voice refactored into using special voice (it was only used by a viro symptom anyways; I don't anticipate this overlap being problematic) 6. Mask voice changer refactored into a trait ## Why It's Good For The Game Potted plants shouldn't have magical voice concealing powers - especially not over radio, but not over in person either. It's a damn plant So I addressed this by refactoring our face and voice system. Overall things should be a lot cleaner and easier to use. ## Changelog 🆑 Melbert refactor: Refactored a lot of code relating to human face and voice, ie, what shows up in examine and in say. Report anything odd when examining people, with ID cards, when talking over radio, or when disguised refcator: Refactored how you get disfigured when your head's super damaged refactor: Refactored ling mimic voice and traitor voice changer del: Potted plants no longer hide voice. They still hide appearance, though qol: Honorifics now show in examine / in world, rather than only when speaking. /🆑 |
||
|
|
a8d1925a8b |
Updates formatting of the paper printed by Autopsies, adds some missing info (#92689)
## About The Pull Request <details><summary>Updates the paper printed by an Autopsy</summary> <h5>(It's actually not much longer than the old autopsies could get. It has only a few new lines, most notably the missing organs it already should have been listing and Temperature) (Also it actually has fewer characters than the healthscan still because of having no color.)</h5> <h6>I genuinely don't know how to get the Overall to stop stacking like that. It was suggested it looks better at the bottom as a summary-type thing, and I think that's true and it does work, but it's hard to format right with paper width like it is.</h6> <img width="261" height="680" alt="image" src="https://github.com/user-attachments/assets/76190f1b-073a-4a61-a2fe-8002aaeb9187" /> </details> <details><summary> COMPARISONS </summary> <details><summary> New vs Old </summary> <h6>Obviously not the same info. I'm not gonna recreate two identical deaths in seperate code. I'm not crazy!!! Also I know I missed the virus scan, fwiw the formatting is about the same as the chemical. About. Ish.</h6> <img width="523" height="679" alt="image" src="https://github.com/user-attachments/assets/59057056-5964-4902-bb32-b678333152ab" /> </details> <details><summary> New vs healthscan </summary> <h6>Similar, yes, not identical though. See the PR body.</h6> <img width="528" height="677" alt="image" src="https://github.com/user-attachments/assets/e409deee-f327-4bab-a8b3-335999677e08" /> </details> </details> Now, it's largely comparable to a printed Health Scan. It has all its unique features unchanged: - Colorless advanced health scan (exact numbers of damages) - Lists all organs/limbs present (even undamaged organs, and with exact names) - Shows wound sources - Lists Chemicals/Diseases in detail Adds some missing info/QoL to the autopsies: - Lists Missing Organs (why weren't these listed???) - Sorts organ/limb lists the same as healthscan - Shows temperature, genetic stability, and blood alcohol (can inform how someone died) - Shows how long they've been dead in realtime (ingame time is neat, but not at all helpful) - Ends with a 'Coroner's Notes' section (so the coroner can write info such as how they think they died) Still has notable differences, of course: - No color (so sad) - Doesn't list quirks (they are dead their Heirloom is irrelevant) - No tooltips (it's paper) - Only possible while dead - Requires a surgery to get the printout Hopefully this will give it more usecase outside only boosting surgery speed. Detectives will appreciate a good coroner's autopsy now. <h5>(It feels really copy-pastey, but with it mostly just being paper formatting, I don't know how much CAN be made into unique procs. Suggestions on how to improve that are welcome.)</h5> --- Additionally: **Creates `/mob/living/carbon/human/proc/get_missing_organs()`.** Just takes some code from healthscan() and makes it useable elsewhere. Does what you'd guess. Returns a list of empty organ slots that should have organs, where key is the ORGAN_SLOT and value is the "name". **Adds a 'colored' variable to /obj/item/organ/proc/get_status_text()** Decides if it returns it with color. Autopsies call this with colored false. <h6>(See above note about copy-paste. These were two things I could see that I could minimize copy-paste with)</h6> ## Why It's Good For The Game These are so fun to do, but are missing **just** enough information to be kind of irritating without also doing a healthscan. You shouldn't need to print a healthscan alongside the autopsy, the autopsy is already the healthscan. _An unhealth-scan, perhaps?_ Hopefully this will make them nicer to use. _(An autopsy? Not showing missing organs? Crazy.)_ ## Changelog 🆑 qol: made Autopsy Reports follow similar formatting to Health Scans, and adds some information previously missing such as Missing Organs. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
939f2fc9ac | Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync | ||
|
|
ee99d0e5b0 |
Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request Revival of https://github.com/tgstation/tgstation/pull/79691 A while back, I made this PR, but lost motivation after diving too deep into the code soup of can_breathe and related procs. Now, I have removed those parts, and have simplified that part of the code to the point I think it's ready for review. Many reviews from the previous PR have been addressed in this PR. <hr> <details> <summary>Details</summary> Asthma is a 4 point negative quirk that emulates real life asthma. It works by slowly decreasing the amount of pressure each breath you take receives, until your lungs completely seal, ensuring death if you dont get oxyloss meds/windpipe surgery. Inflammation (the tracker for intensity) increases whenever you breathe smoke, use a cigarette, metabolize histimine, or suffer an asthma attack. Asthma attacks have a low chance of happening every second, starting 10 minutes after you spawn and with a 20-30 grace period between attacks. They are "diseases" that cant be outright cured by albuterol, only put into remission. They increase inflammation at varying rates depending on their severity, with extreme asthma attacks being a immediate threat to your life while mild ones might not even cause inflammation. The response to these is always the same - use your inhaler before you start choking. Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded with albuterol, which I will get to later. Albuterol is a new medicine thats a little tricky to make but still doable. It can be efficiently created with inverse convermol, or transmutated from salbutamol and convermol. The opposite is true, with albuterol able to be turned into salbutamol. Two canisters are available in chemvends. Upon use, it increases the virtual pressure of all breaths taken by 40%. This allows for you to breathe in lower pressure environments, as well as enhancing the effects of things like healium. It's OD causes your diaphram to spasm, causing sporadic losebreath and forced breathing. Inhalers are a fancy new reagent application apparatus that uses the INHALE reagent bitflag. Inhalers themselves are rather unremarkable, they are merely the method of using inhaler canisters (they also have a rotary display approximating the uses left in a canister - just like real life inhalers). Inhaler canisters are the reagent containers, and are generally low capacity. They can only be used in a inhaler, and contain aerosolized chemicals. Inhaler canisters and inhalers are unlocked from chemical synthesis, and are printable for cheap from a medlathe. In order to use a inhaler, one must uncover the mouth of a carbon and wait a few seconds (its faster if its a self-application) before a small amount of the reagents are delivered via the INHALE bitflag. This only works on things currently breathing - if theyre dead, have no lungs, or just, arent breathing - it will fail. This includes asthmatics with 100% inflammation. </details> <img width="181" height="74" alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521" src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e" /> <img width="1465" height="202" alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963" src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667" /> Sprites are not mine; they are from swanni and I can NOT sprite for the life of me ## Why It's Good For The Game 1. Asthma is just cool. One of my favorite features on bay was the fact lung damage required you to turn up the pressure on your O2 tank to survive, and this does precisely that. 2. Its always fun to add new ways to interact with atmos as a player that arent grossly broken, and I fail to see how a 40% increase of gas intake will really affect balance too badly. 3. Inhalers are badass. ## Changelog 🆑 add: Asthma quirk, based on IRL asthma add: Inhalers, a new reagent administering method that uses INHALE add: Albuterol, a new reagent that increases the amount of gas you inhale by 40% balance: Inverse convermol now forms once the reaction is done, not on metabolize /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> # Conflicts: # code/datums/quirks/negative_quirks/allergic.dm # code/game/objects/items/devices/scanners/health_analyzer.dm |
||
|
|
fadbf16e1b |
Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request Revival of https://github.com/tgstation/tgstation/pull/79691 A while back, I made this PR, but lost motivation after diving too deep into the code soup of can_breathe and related procs. Now, I have removed those parts, and have simplified that part of the code to the point I think it's ready for review. Many reviews from the previous PR have been addressed in this PR. <hr> <details> <summary>Details</summary> Asthma is a 4 point negative quirk that emulates real life asthma. It works by slowly decreasing the amount of pressure each breath you take receives, until your lungs completely seal, ensuring death if you dont get oxyloss meds/windpipe surgery. Inflammation (the tracker for intensity) increases whenever you breathe smoke, use a cigarette, metabolize histimine, or suffer an asthma attack. Asthma attacks have a low chance of happening every second, starting 10 minutes after you spawn and with a 20-30 grace period between attacks. They are "diseases" that cant be outright cured by albuterol, only put into remission. They increase inflammation at varying rates depending on their severity, with extreme asthma attacks being a immediate threat to your life while mild ones might not even cause inflammation. The response to these is always the same - use your inhaler before you start choking. Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded with albuterol, which I will get to later. Albuterol is a new medicine thats a little tricky to make but still doable. It can be efficiently created with inverse convermol, or transmutated from salbutamol and convermol. The opposite is true, with albuterol able to be turned into salbutamol. Two canisters are available in chemvends. Upon use, it increases the virtual pressure of all breaths taken by 40%. This allows for you to breathe in lower pressure environments, as well as enhancing the effects of things like healium. It's OD causes your diaphram to spasm, causing sporadic losebreath and forced breathing. Inhalers are a fancy new reagent application apparatus that uses the INHALE reagent bitflag. Inhalers themselves are rather unremarkable, they are merely the method of using inhaler canisters (they also have a rotary display approximating the uses left in a canister - just like real life inhalers). Inhaler canisters are the reagent containers, and are generally low capacity. They can only be used in a inhaler, and contain aerosolized chemicals. Inhaler canisters and inhalers are unlocked from chemical synthesis, and are printable for cheap from a medlathe. In order to use a inhaler, one must uncover the mouth of a carbon and wait a few seconds (its faster if its a self-application) before a small amount of the reagents are delivered via the INHALE bitflag. This only works on things currently breathing - if theyre dead, have no lungs, or just, arent breathing - it will fail. This includes asthmatics with 100% inflammation. </details> <img width="181" height="74" alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521" src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e" /> <img width="1465" height="202" alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963" src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667" /> Sprites are not mine; they are from swanni and I can NOT sprite for the life of me ## Why It's Good For The Game 1. Asthma is just cool. One of my favorite features on bay was the fact lung damage required you to turn up the pressure on your O2 tank to survive, and this does precisely that. 2. Its always fun to add new ways to interact with atmos as a player that arent grossly broken, and I fail to see how a 40% increase of gas intake will really affect balance too badly. 3. Inhalers are badass. ## Changelog 🆑 add: Asthma quirk, based on IRL asthma add: Inhalers, a new reagent administering method that uses INHALE add: Albuterol, a new reagent that increases the amount of gas you inhale by 40% balance: Inverse convermol now forms once the reaction is done, not on metabolize /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
f8186a7db3 |
Adds a furnace that grants space protection to nearby people (#92342)
## About The Pull Request ##### Code bounty for holinka4ever Adds a furnace equippable to the back slot, which when active (it is a lamp), will form a bubble of space protection, affecting the user and people nearby, and will last 5 minutes before it dissipates and needs to be re-formed. This item requires a pyroclastic anomaly core to activate, while the bubble itself can only be formed in pressurized environments. It's researchable in the Anomaly technology node. The downsides of the item is it requires 2 hands to hold, can't be inserted into storage items (as it's bulky), can only be equipped to the bag slot, and has slowdown while on, which only affects you when you're in gravity anyways. ## Why It's Good For The Game The pyro anomaly is currently one of the more useless anomaly cores, not even getting a unique reactive armour variation. This hopefully gives it some purpose as a good tool to keep people alive in a spaced area at a good cost to the user. This is an item that shouldn't be overpowered, but also isn't just a selfish tool- when someone's crafting this item it's specifically aiming to help people, which I think is a benefit. ## Changelog 🆑 JohnFulpWillard, sprites by PopLop add: Added a new pyroclastic anomaly locked item, the Space Furnace. Grants space immunity to people nearby while active. /🆑 |
||
|
|
b348b617a3 |
Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts: # README.md # code/__DEFINES/admin.dm # code/__DEFINES/melee.dm # code/_globalvars/traits/_traits.dm # code/controllers/subsystem/economy.dm # code/datums/components/crafting/crafting.dm # code/datums/elements/crusher_loot.dm # code/modules/antagonists/pirate/pirate_shuttle_equipment.dm # code/modules/clothing/suits/_suits.dm # code/modules/escape_menu/leave_body.dm # code/modules/jobs/job_types/_job.dm # code/modules/mining/equipment/mineral_scanner.dm # code/modules/mob/living/living.dm # code/modules/plumbing/plumbers/pill_press.dm # tgui/packages/tgui/interfaces/Vending.tsx |
||
|
|
f8511ea227 |
You can install B.O.R.I.S. in circuits with MMI components (+other MMI component changes) (#92002)
## About The Pull Request This PR adds the ability to install a B.O.R.I.S. in a circuit that contains an MMI component. These circuits can then be remotely connected to by an AI by clicking on them or anything they are inside of. To indicate that a circuit allows remote AI connection, an indicator is given to the circuit and anything containing it. Additionally: - Refactors the MMI component to use `item_interaction`, since it was pertinent. - You cannot insert an MMI/B.O.R.I.S. into a locked circuit. - You can no longer hotswap MMIs/B.O.R.I.S.es - you must manually eject the inserted one. Let me know what changelog labels I should use for the hotswap removal and the prevention of insertion into locked circuits. ## Why It's Good For The Game If you can put an MMI or posibrain in a circuit, why not allow an AI to use it using a B.O.R.I.S.? ## Changelog 🆑 add: B.O.R.I.S.es can be installed inside of integrated circuits with MMI components, allowing an AI to remotely interface with them the same way an MMI or posibrain could. refactor: The MMI component now uses item interaction behavior for inserting MMIs/B.O.R.I.S.es. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
d2b92afe55 |
Plant Analyzer UX Revamp (#92667)
## About The Pull Request <img width="1300" height="706" alt="image" src="https://github.com/user-attachments/assets/c7971eab-6af3-4fea-94f5-b76104696b73" /> 1. Chems are no longer hidden in an icon's tooltip. There is a separate tab for chems. Right clicking to do a chem scan will pull up the chem tab, but you can also just use the two buttons at the top - Closes #91172 2. You no longer need to repeatedly scan a tray to update the UI. Standing adjacent to a scanned tray will update it regularly. 3. Units have been redefined from pure seconds to minutes/seconds where applicable. 4. The report has been swapped around, with tray on top and plant on bottom. 5. The nutrient bar is now colored based on contents of the tray. It no longer has a tooltip listing the tray's contents, that's now in the chemicals tab. 6. Auto-grow, pollinating, and yield modifier icons have been brought center below the tray, instead of in the top right section. They now change color to make it more apparent at a glance. 7. Traits have been moved from icons to a collapsible list at the bottom of the UI, and are now printed entirely. They still have tooltips explaining what they do. 8. Grafted gene was moved center below the plant, and is now printed entirely. 9. Mutations have been moved to a collapsible list center below the plant. 10. Plants now indicate if they are dead in the UI. 11. Scanning produce now lists all the chemicals inside it on top of all the chemicals it produces. - Closes #89443, Closes #90793 12. Restores lost behavior of seed unique data - Closes #90706 Also 13. Added Hydroponics to Runtime station 14. Added screentip for dumping reagents from hydro-trays ## Why It's Good For The Game While I was initially supportive of the move to a plant analyzer UI it was undeniable it was a huge UX stepdown from printing results to chat. This PR aims to bring back some of those lost UX features by making more information visible at a glance (instead of requiring memorization of mystery meat icons or hovering over many elements to find information hidden in tooltips) I know it's a little bit of a mess with the colors and layout, I planned on doing a whole custom css and layout and such but I kinda just wanted to get it out. ## Changelog 🆑 Melbert qol: Plant analyzer: Scanning a tray will regularly update the UI with the tray's information while you stand adjacent to it, no longer requiring you re-scan the tray to update it. qol: Plant analyzer: UI is now split between chems and stats - RMB will open directly to the chem tab. qol: Plant analyzer: UI received several UX changes - listing out more information at a glance, rather than behind tooltips or icons fix: Plant analyzer: Chem scanning plants now shows the plant's current chemical contents once again (on top of their genes) fix: Plant analyzer: Unique seed data (kudzu mutation, replica pod dna) is shown again qol: Added hydroponics to runtime station qol: Added screentip to hydroponic trays for clearing reagents /🆑 |