mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-04 13:45:25 +01:00
ff3c7dc9ec724770d570f556300a4150e8f1acf8
259 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
093bf3d978 |
Fishing lures box peeve (#90741)
## About The Pull Request This fixes a small excerpt from #90678: >"[...] double-examining it to see what extra items it can hold (normally all lures) only reports the Artificial Minnow as fitting." By making it use subtypesof instead of typesof for purpose of spawning lures and making the minnow its own subtype. ## Why It's Good For The Game Fixing a mild botherance. ## Changelog 🆑 fix: Examining a fishing lures box twice no longer says it can hold just artificial minnows. /🆑 |
||
|
|
32d04164c4 |
Adds Common Second Language quirk, tweaks to partial understanding (#90614)
## About The Pull Request - Tweaks partial understanding. Paragraphs are now split into sentences first creating more natural breaks between sentences. - Adds "Common Second Language" quirk This quirk changes your default understanding of common (up to) 90% (your choice), meaning you drop the occasional word.   Additionally, when your sanity drops below a threshold, you become forced to speak your native language, albeit with a partial understanding applied for everyone else. Incompatible with similar language quirks + can't be taken by humans (yet?) ## Why It's Good For The Game Just a fun way to play around with the new "partial understanding" system. ## Changelog 🆑 Melbert add: "Common Second Language" quirk qol: Language translations chunk sentences together better, making partial understanding a bit easier to parse. /🆑 |
||
|
|
90f019fe81 |
player hud stays post roundstart, has more info (#90632)
## About The Pull Request Once the round starts, the TV's text shows the current map, how much time it is in-game, how many players are connected, and what the overflow job is (if the station trait is on). video as demonstration but the overflow text has changed to "[job] overflow" instead of "Overflow job: [job]" https://github.com/user-attachments/assets/fe74b28b-06de-4827-9c4d-ca2e51f1e0b9 Closes https://github.com/tgstation/tgstation/issues/90651 ## Why It's Good For The Game Gives useful info on the TV instead of having it just magically disappear (which currently doesn't work cause I forgot to deactivate it on initialize for latejoiners) which will become more useful if the stat panel is removed. Also makes overflow job more obvious, the TV is just a good place to put info useful for new players though round time personally was just put there to make the TV feel more full. Wanted to put this in the original PR but wanted to try to match parity to the stat panel in case this wasn't wanted. ## Changelog 🆑 qol: The TV on the title screen has round info once the round has started or ended. fix: The TV now fits on non-widescreen screens. /🆑 |
||
|
|
d71375eafd |
Adds some trailing commas to lists (#90501)
## About The Pull Request I heard you liked commas. ## Why It's Good For The Game Trailing commas make everyone happy! ## Changelog Nothing anyone will notice besides downstreams adding to these lists |
||
|
|
6ff440bbc2 |
Lobby info is now part of the hud instead of stat panel (#90572)
## About The Pull Request Removes ``/mob/dead/get_status_tab_items()``, replaces it with a lobby hud icon showing the same information TV sprite made by Kryson, scanline and static taken from ``effects.dmi`` which I then blew up to fit the size. https://github.com/user-attachments/assets/99733ae6-c596-42b1-bcae-d1a8d8f094c3 ## Why It's Good For The Game I want to try to remove as much reliance from the stat panel as possible so we can hopefully remove it, as it takes up 1/3 of the screen for nothing. ## Changelog 🆑 Kryson, JohnFulpWillard qol: Lobby info is now on the title screen rather than being hidden in the stat panel. /🆑 |
||
|
|
5bc18586a7 |
System for restricting quirks based on species, no more blood deficiency on bloodless species (#90326)
## About The Pull Request Quirks can now define if they're "species appropriate," where the base proc's behavior is simply "does this species already have the quirk's main trait" I am unsure if that on its own imposes any new restrictions, currently. Additionally, blood deficiency cannot be picked on any species without blood or that doesn't breathe. I'm sure there's more that might make sense, I'm open to suggestions Alternative to #90238 ## Why It's Good For The Game Currently, reduces the possibility of taking something like blood deficiency on a race which suffers no downside from it in order to get free positive quirks. Future-ly, potentially allows quirks exclusive to only a select few species as offered by #90238 ## Changelog 🆑 fix: Species without blood can no longer be blood deficient /🆑 |
||
|
|
6c017cf1e1 |
Refactors subsystems to use dependency-ordering to determine init order. Subsystems can now declare their own dependencies. (#90268)
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
/datum/controller/subsystem/atoms,
/datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
/datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.
## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.
## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
|
||
|
|
c9d4d83412 |
Fish no longer dies when flopping on safe water. (#90024)
## About The Pull Request I've been feeling for some time that fishes dying if placed on fishable water (or lava/plasma for a couple ones) to be kinda lakluster and counterintuitive. YakumoChen opening an issue about it proved I wasn't the only one thinking that, and I'm not feeling like starting with adding fishing stuff just yet. Not without improving the existing content first. The source_types file was also getting big and a bit bad to navigate through, so I've decided to split it into half a dozen distinct files: fishing portals, rifts, turfs, structures, mining/ruins and surgery. ## Why It's Good For The Game This fixes #89872. The files should also be bit more organized now. ## Changelog 🆑 fix: Fish will no longer drown if left half-submerged in a fishable turf on which it can normally be found. Instead it will disperse after a while or if starving. Note that this only happens if the fish is native to such turfs (eg. lavaloop on beach water will still die). /🆑 |
||
|
|
93a2b723da |
IconForge: rust-g GAGS (250x faster edition) (#89590)
## About The Pull Request Offloads GAGS generation to rust-g IconForge. **Key Notes** - The builtin GAGS editor still uses the 'legacy' generation to allow for debugging. - Does not support `color_matrix` layer type, which is currently not used by any GAGS configs. Will do nothing if used. - Does not support `or` blending mode, which is currently not used by any GAGS configs. Will error if used. - Has some 'quirks' compared to BYOND when it comes to mixing icon states with different dir/frame amounts. BYOND will just silently handle these and it's basically undefined behavior because what should you expect BYOND to do? IconForge will spit errors out instead. So this PR also fixes a few of those cases. Functions by writing output to `tmp/gags/gags-[...].dmi`, copying that output into the RSC and assigning the file object to `icon`. Saves ~1.7s init by reducing worst-case GAGS icon generation from 250ms to 1ms. Also optimizes `icon_exists` by using `rustg_dmi_icon_states` for file icons, saving ~60ms. Would have more savings if not for json_decode as well as DMI parsing in rust being somewhat slow. Perhaps having `rustg_dmi_icon_states` share a cache with IconForge could reduce this cost, however I'd still recommend limiting these tests to unit tests (https://github.com/tgstation/dev-cycles-initiative/issues/34), especially for GAGS configs. I'm not sure they're worth 700ms. Saves another ~400ms by replacing `md5asfile` with `rustg_hash_file` in `/datum/greyscale_config/proc/Refresh` Savings are likely even higher when combined with #89478, due to spritesheets sharing a parsed DMI cache with GAGS. This means GAGS will spend less time parsing icons synchronously and can generate output faster. Tracy tests with this combo seem to yield ~2sec savings instead of ~1.7sec Total savings: ~2.16sec to ~2.46sec - Ports https://github.com/BeeStation/BeeStation-Hornet/pull/10455 - Resolves https://github.com/tgstation/dev-cycles-initiative/issues/9 ## Why It's Good For The Game GAGS go zoooom <details> <summary>GAGS Working Ingame</summary>   </details> <details> <summary>GetColoredIconByType</summary>  </details> <details> <summary>icon_exists</summary>  </details> <details> <summary>Refresh</summary>  </details> ## Changelog 🆑 tweak: Optimized GAGS using rust-g IconForge, reducing worst-case generation time to 1ms /🆑 |
||
|
|
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 /🆑 |
||
|
|
3a97af3f6f |
Fishing UI resprite and bugfixes (#89267)
## About The Pull Request Fishing UI has received a major glowup: https://github.com/user-attachments/assets/e255822c-9c2c-4e09-843d-20ea70f470f5 All fishing rods now have unique frames (with material rods' frames' colors being based on their material), and most fishing sources now have unique backgrounds. Completion bar now uses alpha filters, making it much smoother, and bait bar is assembled from thin lines, which allows us to avoid stretching it when we need to resize the bar. Fixed experiments not unlinking after being completed, resulting in infinitely stacking examine lines on advanced fishing rods. Fish death messages now use more fitting span_warning. Removed devious SS_POST_FIRE_TIMING from the fishing SS, as it made sometimes the fishing SS only fire every ***two*** ticks instead of every tick, despite passing 0.05s (1 tick) into its process() calls - this flag only makes sense on heavy and costly subsystems, not on a subsystem dedicated mostly to fishing minigames. This is required as now instead of directly assigning coordinates (why???) fishing UI uses animate() to control the bait bar and fish icons, making it much smoother. Also gave blue dough its own bait overlay and mansus rift its own portal icon because why not. ## Why It's Good For The Game Fishing UI didn't look very nice, and removing the subsystem flag makes the game smoother. ## Changelog 🆑 qol: Fishing minigame should be smoother now fix: Fixed infinitely stacking examine lines on advanced fishing rods image: Resprited fishing UI image: Blue doughballs now have their own fishing rod overlay image: Resprited mansus rift fishing portal overlay /🆑 |
||
|
|
cc80029518 | Process certain status effects using a new "priority effects" subsystem (#89076) | ||
|
|
e755854af2 |
Nearsighted severity sources (with unit test) + status_effect/grouped minor rework (#88591)
# About The Pull Request ## Nearsighted Sources Nearsighted now associates/tracks severity applied by each source. Previously, nearsighted only used a single variable which had to be shared by every source, which caused problems for things like scarred eyes which needed independent behaviour. This implementation allows sources with different severity levels to coexist without needing workarounds There are now two different severity types for nearsightedness: * Correctable: Can be mitigated with vision correction (like glasses) * Absolute: Cannot be mitigated from any source, used for scarred eyes Which can allow nearsighted sources to not be affected by vision correction. Also, since there is no more technical conflict between the two quirks, I've made it so that nearsighted and scarred eye can be selected together (as a QOL change) There is also a new unit test for this new behaviour (nearsighted_effect) that checks application and removal ## status_effect/grouped minor rework Grouped status effects now have `source_added()` and `source_removed()` procs, which are called whenever a source is added or removed from the effect I did this because the previous implementation was somewhat unwieldy. Inherited status effects would recieve the _currently existing_ effect through merge_with_existing, and require them to modify the existing effect's properties, which is odd and not intuitive to work with (the proc's `src` was not the existing effect) It not being called for every source also made users repeat code in `on_creation()` and `merge_with_existing()` for every source added. This new interface should prevent repetition and be generally more intuitive to work with. # Changelog 🆑 refactor: Nearsighted has been reworked to track severity applied from each source, as well as allow "non-correctable" nearsightedness (for things like scarred eyes). qol: The above being possible now means that you can select the Nearsighted and Scarred eye quirks together fix: Any bug that would occur from becoming nearsighted with a scarred eye should be fixed now code: status_effect/grouped merging code has been improved (i hope) /🆑 |
||
|
|
640a1229ca |
Adds blinking and a new Fluoride Stare quirk (#88927)
## About The Pull Request Spessmen now need to blink! If you have non-robotic eyes, you'll automatically blink every once in a while. Lizards have asynchronous blinking, and whenever they blink one of their eyes (chosen at random) will blink slightly sooner. https://github.com/user-attachments/assets/e62020ef-d2f8-4634-9399-a27244326cfe You can also blink manually, as emotes now fire the animations. https://github.com/user-attachments/assets/80d6304f-f3c2-424a-a5aa-96a4aee7acdc Adds a new eye-related quirk, Fluoride Stare! It will spawn you without eyelids, preventing random or manual blinking and forcing you to wet your eyes with some saline solution (of which you get a bottle, and a dropper to apply it) every minute or so. Additionally, eyes now display their color on their organ sprite, instead of always showing up as blue. (Don't tell roleplayers, but Fully Immerse smite now blinds you when you blink, for true full immersion) ## Why It's Good For The Game Spessmen blinking is just soulful, and brings some life into the game. As for the quirk, its just a funny bit/reference that people can use to... torture themselves? ## Changelog 🆑 add: Spessmen now blink. add: Added a new Fluoride Stare quirk, keep those eyeballs wet, lest they crack! image: Eyes now display their color on their organ sprite, instead of always being displayed as blue. /🆑 |
||
|
|
63bcfdcc00 | [NO GBP] Fixing fishing lures (#88296) | ||
|
|
1dff5f6de3 |
Aquariums are now potential fishing spots. (#88243)
## About The Pull Request You can now fish from aquariums if you wish to. This includes some backend changes to make it possible for the fish table from get_fish_table() to contain instances, and all that it entails up to spawn_reward(), which is a requirement for the gimmick to respect the various traits and other variables of the already instantiated fish rather than read from cached properties. ## Why It's Good For The Game The fish progress score/index had only little nasty flaw that has been nagging me since day one: Not all fish species can be caught. Skipping McGill, which is a peculiar case that for cheevo purposes should be considered a standard goldfish, there is the one, unsignificant yet rare purple sludgefish which can only be gotten as a rare evolution of the generic sludgefish. Talk about petty, but this may be a long-term nit I prefer to handle right now. Also why not? The 'unmarine mastodon' is near impossible to get unless you somehow find a oil well which is locked behind a specific ruin. ## Changelog 🆑 fix: Aquariums are now potential fishing spots. /🆑 |
||
|
|
bbb7a41743 |
Guncode Agony 4: The Great Projectile Purge (#87740)
## About The Pull Request ~~Kept you waitin huh!~~ The projectile refactor is finally here, 4 years later. This PR (almost) completely rewrites projectile logic to be more maintainable and performant. ### Key changes: * Instead of moving by a fixed amount of pixels, potentially skipping tile corners and being performance-heavy, projectiles now use raymarching in order to teleport through tiles and only visually animate themselves. This allows us to do custom per-projectile animations and makes the code much more reliable, sane and maintainable. You (did not) serve us well, pixel_move. * Speed variable now measures how many tiles (if SSprojectiles has default values) a projectile passes in a tick instead of being a magical Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired because it never had a right to exist in the first place. __This means that downstreams will need to set all of their custom projectiles' speed values to ``pixel_speed_multiplier / speed``__ in order to prevent projectiles from inverting their speed. * Hitscans no longer operate with spartial vectors and instead only store key points in which the projectile impacted something or changed its angle. This should similarly make the code much easier to work with, as well as fixing some visual jank due to incorrect calculations. * Projectiles only delete themselves the ***next*** tick after impacting something or reaching their maximum range. Doing so allows them to finish their impact animation and hide themselves between ticks via animation chains. This means that projectiles no longer disappear ~a tile before hitting their target, and that we can finally make impact markers be consistent with where the projectile actually landed instead of being entirely random. <details> <summary>Here is an example of how this affects our slowest-moving projectile: Magic Missiles.</summary> Before: https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e After: https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915 </details> <details> <summary>And here is a much faster, and currently jankier, disabler SMG.</summary> Before: https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348 After: https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238 </details> ### But how will this affect the ~~trout population~~ gameplay? Beyond improved visuals, smoother movement and a few minor bugfixes, this should not have a major gameplay impact. If something changed its behavior in an unexpected way or started looking odd, please make an issue report. Projectile impacts should now be consistent with their visual position, so hitting and dodging shots should be slightly easier and more intuitive. This PR should be testmerged extensively due to the amount of changes it brings and considerable difficulty in reviewing them. Please contact me to ensure its good to merge. Closes #71822 Closes #78547 Closes #78871 Closes #83901 Closes #87802 Closes #88073 ## Why It's Good For The Game Our core projectile code is an ungodly abomination that nobody except me, Kapu and Potato dared to poke in the past months (potentially longer). It is laggy, overcomplicated and absolutely unmaintaineable - while a lot of decisions made sense 4 years ago when we were attempting to introduce pixel movement, nowadays they are only acting as major roadblocks for any contributor who is attempting to make projectile behavior that differs from normal in any way. Huge thanks to Kapu and Potato (Lemon) on the discord for providing insights, ideas and advice throughout the past months regarding potential improvements to projectile code, almost all of which made it in. ## Changelog 🆑 qol: Projectiles now visually impact their targets instead of disappearing about a tile short of it. fix: Fixed multiple minor issues with projectile behavior refactor: Completely rewrote almost all of our projectile code - if anything broke or started looking/behaving oddly, make an issue report! /🆑 |
||
|
|
e6253c7812 |
Adds a score for all species of fish that you've caught. (#86049)
## About The Pull Request I'm adding a score that tracks which types of fish you've caught across multiple rounds. To do so, I had to add a new score subtype that manages the score value not being a number. Thankfully the achievement code is fairly flexible so not a whole lot had to be done, although I've to add a new column to the achievements table in the DB, because the 'value' is for integers, while we need one for text strings ~~(the contents of the list are converted to text with a delimiter before being saved cuz I'm not sure if and how our DM slash SQL integration handles using lists directly and I don't want to waste time finding it out)~~. EDIT: It's mostly done beside the reviews that are going to point out things that need to be changed. The UI changes are done. It's time for reviews. Here are screenshots of the UI with all fish still uncatched beside one (I've since then the typo on its name and removed an extra zero from the index number, as well as a nit with the spacing between cells):   ## Why It's Good For The Game We have about dozens over dozens of different fish in the game now, many of which are just fluff anyway. It's getting to the point it's perhaps doable to add a score or something to be a braggard about. ## Changelog 🆑 add: Added a new score that keeps track of all different fish that you've caught between shifts. server: Added a new schema table to store the aforementioned entries and the ckeys associated to them, with an additional timestamp column. /🆑 |
||
|
|
df00d85356 |
Eye wounds, scars and a new ~Pirate~ RP quirk (#87209)
## About The Pull Request Upon getting stabbed in your eyes or having a bullet fly through your head there's a chance (minor for stabbing, extremely low for headshots) you'll receive a new "Eye Puncture" wound which causes profuse bleeding out of your now-empty eye hole. Once healed you'll have to deal with a scar on your eye which cannot be cured and requires surgical replacement. Eye scarring will reduce your eyes' max health by 15, give you a minor screen tint and a fancy visual on your character sprite. Getting scarring on both eyes will turn you completely blind.  This PR also introduces a new quirk which gives you eye scarring on the eye of your choice and an eyepatch to go alongside it, just make sure that it sits on the right eye. Also added medical(white) subtype of eyepatches to loadout for those who want that version instead. Credits to AnturK on discord for the idea. ## Why It's Good For The Game Its a neat lil' feature that makes the game more immersive, and unlocks more roleplay opportunities for players. New quirk gives access to this feature for players who want to make it a part of their character's backstory (or maybe as a part of permanent scar roleplaying). ## Changelog 🆑 add: Getting stabbed or shot in the eyes has a chance of giving you a new wound and a semi-permanent scar, blinding you on one side add: Added new "Scarred Eye" quirk which blinds you on one eye but gives you a fancy eyepatch add: Medical eyepatches have been added to loadout /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
834f983f3a |
Adds the Fundamentally Evil quirk. Interactions with Empathy and Honorbound. (#87045)
## About The Pull Request Adds the Fundamentally Evil quirk. The quirk does nothing in of itself. If an Empath examines you, they will be shaken up by the fact that you are totally evil. Mindreaders can literally see that you're evil. If they're ALSO evil, it gives a gives a unique message. Honorbound chaplains can freely attack you without first declaring you evil. You are already evil. There is no outward tells for this fact, but if the chaplain pays attention to the medical records, you might have a problem on your hands. You are significantly harmed by holy water and holy explosions. So don't drink holy water if you can help it. ## Why It's Good For The Game I just think it'd be funny to have some crew, for whatever reason, be fully committed to being evil for no reason other than it is funny to bother empaths. I want a chaplain to come to the realization that I'm evil and see what happens. ## Changelog 🆑 add: Fundamentally Evil quirk. You might act normal, but you know deep down that you totally don't give a shit about anyone but yourself. Empaths better watch out. /🆑 --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com> |
||
|
|
0771b1b3a7 |
adds some "factory" machines (#86063)
## About The Pull Request https://github.com/user-attachments/assets/4ceb4c0f-d5ef-4fc0-8436-d7eec5b6f396 https://github.com/user-attachments/assets/56ddd387-7376-4c35-a067-1adccbddeecd https://github.com/user-attachments/assets/dda6cc2b-614a-4adb-a8f4-2c03b51162e0 https://github.com/user-attachments/assets/fa7697fb-f484-48a0-bb85-ee0c2f4867e2 https://github.com/user-attachments/assets/02de4b24-2fa0-4a1e-b147-df9500109b3c https://github.com/user-attachments/assets/b56c03ab-49c9-487f-a99f-fcba5ce038ac https://github.com/user-attachments/assets/52bae5a4-68b0-4f25-99c1-1b677b99790a i didnt feel like recording the lathe and crafter for a suitable file size again but essentially the crafter crafts and the lathe lathes all machines but the router and sorter are cable powered (suitable on lavaland) theyre researched roundstart they can receive any resource that bumps into it if that resource is on the conveyor ## Why It's Good For The Game more fun engineering stuff and perhaps mining given these are more efficient but require effort to set up https://hackmd.io/@jimmyl/S1dZRZosC ## Changelog 🆑 add: added the manufacturing smelter,router,sorter,crafter,lathe,crusher,unloader /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
613fb4c08a |
ai controllers that fail to make a plan no longer process until theyre able to plan again (#86600)
## About The Pull Request ai controllers that fail planning no longer process until theyre able to plan again. this makes it so /process is called less thus you'll have less AI competing against one another for cpu. also converts idle behaviors into singletons ## Why It's Good For The Game AIs that dont have a plan dont do anything during processing so its better to just make them sit out the cycle instead of draining cpu ## Changelog 🆑 /🆑 |
||
|
|
a4e9a56b4c |
Small refactor on station trait lobby buttons. (#86624)
## About The Pull Request So, I've been looking into manually loading job traits today, and it seems the buttons don't appear until you reconnect. Upon further investigations, it turns out that the code doesn't support showing lobby buttons outside of SSstation init. To add injury only up to three buttons can be displayed for some stupid reason (the lack of code for x offsets), plus the buttons aren't relocated when one is removed, thus possibly leaving behind an empty gap. This PR fixes all of that, while removing some crumbs of shitcode from new players' HUDs and making sure to remove datum traits and references are removed when the trait is deleted (usually never the case outside VV).  ## Why It's Good For The Game Lobby buttons should ALWAYS be shown to the player if the relative trait is loaded, the only exception being the conditions set by the trait itself (for job traits is the job age and whether the game has started or not), while the offsets of the lobby buttons should stay synced with how many are being displayed to the new player at any given time, so if a button is deleted, the others are relocated to avoid having leaving an empty gap behind. Beside, this is necessary for the lobby button for the playable pun pun to show up during Monkey Day. ## Changelog N/A, all backend. |
||
|
|
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). /🆑 |
||
|
|
023bfd0e5d |
Autowiki for fishing. (#86035)
## About The Pull Request I've come to realize manually updating all fishing stuff on the very much outdated wiki would be a colossal pain in the rear, so I've decided to automate a few bits to generate autowiki lists containing information about fish, fish traits, bait, hooks, reels, fishng rods, fish sources and fish experiments. Now tested. ## Why It's Good For The Game Making a huge autowiki for a feature that's being constantly updated (by me) but still has a particularly lame and outdated page on the wiki. ## Changelog N/A |
||
|
|
10c2b7364e |
The fishening v3: Fishing lures. (#86007)
## About The Pull Request Over half of the line changes are merely from splitting the fish_types.dm into several files since it was over 1k lines already. One of the small issues with fishing right now is RNG. You want to get some specific fish, and you go through all the micromanaging with hooks, reels and baits only for the random number god to say "nope", and that's only going to get worse the more fish are in the game. However, I've a solution: (unconsumable/reusable) fishing lures, each of which attracts different fish based on different conditions. The only caveat is that they require to be spun at set intervals (usually 1 to 3 seconds, depending on the lure, with a second-long window). Worry not, there're visual cues in the form of a green/red light hovering the fishing float, so you won't get screwed up by the server slowing down or whatever. The whole box of lures (12 so far) can be from cargo for the fair price of 450 credits. I've also added 5 new fish: monkfish, plaice, pike, another punnier variant of the pike, perch and squid. The latter is quite special because of the ink production trait, which lets players use it to blind others at a close range and when butchered, it yields an ink sac, which can be processed into a can of squid ink (one less item exclusive to the produce console), or thrown at people in a sort-of-similar fashion of banana cream pies (except it's ink). <details> <summary>Images</summary> Fishing lures (forgot to take my cursor off the veggie one before the screenshot):  The five new fish:  </details> <details> <summary>A table of fish catchable wth each lure (excluding holodeck)</summary>  </details> A few more things in the CL, baitfish are a thing now. ## Why It's Good For The Game There should be ways to contrast some of the RNG fishing has. After all, it's only going to get more random the more fish are in the game. Furthermore, I find it disappointing that a lot of food stuff is exclusive to the ingredients console and there're no other ways to get it. ## Changelog 🆑 add: Added fishing lures to the game. They don't get used up like baits and let you catch specific kinds of fish, though they need to be spun every few seconds. The whole set can be ordered from cargo for 450 credits. balance: The magnet hook now removes dud chances. add: Added five new fish types: perch, two types of pike, monkfish, plaice and squid. Squids have a fairly special ink production trait, which lets you use them (unless dead) to ink people face at close range, and can be butchered for an ink sac, which can either be processed into canned squid ink, or thrown at someone. fix: Refactored throwing a little. Some items (specifically components/elements) won't be triggered when caught. no more plates shattering despite being caught for example. add: Goldfish, lavaloops, needlefish and armorfish can now be used as baits. /🆑 |
||
|
|
659e6f0ca2 |
Fishing expansion 2: one-year later boogaloo (#85252)
## About The Pull Request This PR mainly adds more fish and more fishing spots to the game, while refactoring a few aspects of the fishing minigame. Listing out with the new fish: - Arctic char: mainly filler content for the ice hole fishing spot - Sockeye Salmon: ditto but also provides better fillets that boost the quality of resulting food items when cooked or used in recipes - Soulfish: joke content, found by the cursed spring ruin - Skin Crab: also a joke found by the cursed spring - Bump-Fish: filler for the sand fishing spot - Burrower Crab: ditto, reusing a fish sprite I made last year - Sand Surfer: ditto - Three-Eyed Goldfish: It's a reference, doh - Stingray: A modestly weaponizable fish (whoops I've forgot to set the hit sounds), it possess a few traits that make it deliver bits of venom each time you hit someone with it - Swordfish: Huge-ass fish that may require two hands to wield (or not, if the RNG wants to make it smaller). Stats-wise, it's more or less the equivalent of the captain sabre, if not stronger (and more unwieldy due to size and weight). Becomes weaker when dead. Also gives better quality fillets. - Chainsawfish: A mutation of the goldfish with some size, weight and traits requirements, but can also be found on emagged fishing portals. Stronger than the swordfish, it behaves sort of like a chainsaw, with the similar tool behaviour and var values. Also becomes weaker when dead. As for the fishing spots, you can now fish on sand turfs, at the cursed springs or on ice. Rivers/jungle water now has its own fishing spot datum, and no longer uses the generic fishing portal one. To fish on ice, you first have to carve a hole with a pick or a shovel. I've also refactored the fish "AI" hardcoded stuff used in the fishing minigame into their own datums, which let me add a few fancier ways to how the fish moves during the minigame (i.e. the soulfish moving at 1 FPS or the chainsawfish getting faster and faster). As for the sword and chainsaw fish, their potential strength is balanced out by the need of keeping them alive, as well as the potential cumbersomeness, two-handed wielding and potential slowdown from the excessive weight of the fish (Thank you Big Slappy for the inspiration). Other minor changes include: Pufferfish giving better quality fillets (too bad they're poisonous, I'll go and make a skillchip to let cooks safely separate the poisonous liver from the fillets); McGill The lawyer's goldfish) having a 15% of being three-eyed; the aforementioned slowdown from fish weight and two-handed carry from fish size; a couple new fish icons (the ones that hint you on what you're trying to catch) for the fishing minigame; a few adjustments to prevent self-reproducing fish from ignoring the population cap and let fish with a stable population of 1 to crossbreed (also gotta make a different PR to let it happen rarely without the crossbreeding trait). This PR is still a WIP, gotta test it several times. ## Why It's Good For The Game Fishing is something I've been working on for about a year now, but there are still a few places where it's kinda lackluster, like there's not enough diverse fishing spots or useful fish (I'll be working on a separate PR to make the logistic of a carrying a fish around without letting it die a tad easier). Also, look at these sprites:  Can you guess which is which? ## Changelog For the sake of not dumping players with niche information 90% of the players won't understand, I'll keep the CL pretty generic 🆑 add: Added twelve new fish types to the game. Some are cool, other are not, some come with their own special traits and some are straight-up weapons. add: Added more fishing spots to the game. Sand, ice, rivers, the cursed spring... balance: A few fish like salmon, swordfish and pufferfish (poisonous btw) now give better quality fillets when butchered, which can improve the quality of food that uses them even further. balance: Excessive fish weight will make the fish slowier to carry, while excessive size may make it require two hands. balance: Adjusted size, weight and cooldowns of several fish, for the better. /🆑 |
||
|
|
4273fc9dd9 |
idle basic mobs can plan again (#85348)
## About The Pull Request idled basic mobs now instead of completely shutting off, will be delegated to a much lower priority subsystem to do their planning. ## Why It's Good For The Game Mobs can now perform their functions without needing players to be nearby in a way that doesnt starve other subsystems. this allows animals such as goldgrubs to eat ores, lobstrosities to fish, seedlings to tend plants (and many others) without needing any players nearby ## Changelog 🆑 fix: idle basic mobs will now plan behaviors rather than completely shut down /🆑 |
||
|
|
0d05492e73 |
Fixed quirk conflict between transhumanist and prosthetic limb (#84325)
## About The Pull Request Transhumanist and prosthetic limb no longer conflict. If you pick the same limb for both it uses the weaker prosthetic (dumbass) Made the name for prosthetic limb global list more intelligible ## Why It's Good For The Game > Transhumanist and prosthetic limb no longer conflict. If you pick the same limb for both it uses the weaker prosthetic (dumbass) I wanted to RP a guy with a robotic voicebox and prosthetic limb but the game didn't let me, which I thought was pretty lame! Since the root issue is likely that both can have the same limb which ends up as Free Points as transhuman takes priority, I just added a check to ensure that can't happen and is overridden by the negative instead. Any transhumanist mood point benefits are made up for by the bad limb. > Made the name for prosthetic limb global list more intelligible It was bad ## Changelog 🆑 qol: Transhumanist and prosthetic limb no longer conflict. If you pick the same limb for both it uses the weaker prosthetic (dumbass) code: Made the name for prosthetic limb global list more intelligible /🆑 |
||
|
|
114c87c943 |
Fixes station trait based event weight modifiers being added for events that aren't valid on the current map (#83897)
``` [2024-06-12 02:12:22.135] RUNTIME: runtime error: Cannot execute /datum/round_event_control/met... (/datum/round_event_control/meteor_wave/dust_storm).valid for map(). - proc name: New (/datum/station_trait/random_event_weight_modifier/New) - source file: code/datums/station_traits/negative_traits.dm,296 - usr: null - src: Dust Stormfront (/datum/station_trait/random_event_weight_modifier/dust_storms) - call stack: - Dust Stormfront (/datum/station_trait/random_event_weight_modifier/dust_storms): New() - Station (/datum/controller/subsystem/processing/station): setup trait(/datum/station_trait/random_ev... (/datum/station_trait/random_event_weight_modifier/dust_storms)) - Station (/datum/controller/subsystem/processing/station): SetupTraits() - Station (/datum/controller/subsystem/processing/station): Initialize() - Master (/datum/controller/master): init subsystem(Station (/datum/controller/subsystem/processing/station)) - Master (/datum/controller/master): Initialize(10, 0, 1) - ``` 🆑 ShizCalev fix: Fixed a bug with station traits being added to modify weights for events that couldn't actually occur on the current map! /🆑 |
||
|
|
d244c86ce6 |
Adds Character Loadout Tab to preferences (with just a small handful of items to start) (#83521)
## About The Pull Request Adds a Character Loadout Tab to the preference menu This tab lets you pick items to start the round with  This also has some additional mechanics, such as being able to recolor colorable items, rename certain items (such as plushies), set item skins (such as the pride pin)  ## Why It's Good For The Game This has been headcoder sanctioned for some time, just no one did it. So here we are. Allows players to add some additional customization to their characters. Keeps us from cluttering the quirks list with quirks that do nothing but grants items. ## Changelog 🆑 Melbert add: Character Loadouts del: Pride Pin quirk (it's in the Loadout menu now) /🆑 |
||
|
|
af2144f2dd |
Small optimization for Aura Healing (#82674)
## About The Pull Request - Makes use of the byond internal optimization for `view` to speed up aura healing a tiny bit. - In case you didn't know, byond has an optimization for `view` which speeds up iterating over objects in view if you provide it a type. This use of a ternary (likely) prevented this optimization from kicking in, and since worst-case we're doing view(7) it can add up. - Test case: 2 staff of Ascelpius users surrounded by 15 humans and 15 random objects constant being damaged. ~8 minutes of testing. - Profile: ``` /datum/component/aura_healing/proc/heal_old 0.789 6.590 6.596 0.000 4076 /datum/component/aura_healing/proc/heal_new 0.682 6.443 6.442 0.000 4081 ``` - Generalizes `SSaura_healing` to `SSaura`, makes "damage aura" component (which is totally 99% copied from "healing aura" but that's for another pr) use it as well ## Changelog 🆑 Melbert refactor: Staff of Healing should perform slightly better. /🆑 |
||
|
|
d554ab7766 |
RPG Loot: Revisited & READY (#82533)
## About The Pull Request Revival of #72881 A new alt click window with a tarkov-y loading spinner. Replaces the object item window in stat panel. ## Videos <details> <summary>vids</summary> toggleable grouping:  now lists the floor as first obj:  in action:  </details> ## features: - search by name - 515 image generator is much faster than alt click menu - opening a gargantuan amount of items shouldnt freeze your screen - groups similar items together in stacks by default, toggleable - shows tile as first item - <kbd>Shift</kbd> and <kbd>Ctrl</kbd> compatible with LMB 🖱️ - RMB points points at items (sry i could not get MMB working) - key <kbd>Esc</kbd> to exit the window. For devs: - A new image generation tech. - An error refetch mechanic to the Image component - It does not "smart track" the items being added to the pile, just reopen or refresh. This was a design decision. ## Why It's Good For The Game Honestly I just dislike the stat panel Fixes #53824 Fixes  ## Changelog 🆑 add: Added a loot window for alt-clicking tiles. del: Removed the item browser from the stat panel. /🆑 --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: AnturK <AnturK@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
bd8c1aebff |
Instrument editor now uses TGUI (#81923)
## About The Pull Request Instruments now use TGUI as their editor which is pretty cool. It's mostly a 1:1 remake of the HTML UI except I did make a change to make the playback options a little more compact, leaving some more space for the editor before you have to scroll, and some other minor things that were made to make the UI hopefully nicer to look at and mess with. When there's a song to play - While playing, Repeat section can't be edited  Help section and UI when there's no song put in  ## Why It's Good For The Game It is yet another step in finishing up https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA?view Instruments especially were in a poor spot because they didn't respect things like ``IN_USE`` to not refresh if it's not the "UI" you are on, and such. ## Changelog 🆑 refactor: Instruments now use TGUI. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
9ac81e1a64 |
New station trait job: Human AI (#81681)
## About The Pull Request This PR does many things, I'll try to explain the basic/background stuff to the main thing first: 1. Adds a new remote that allows a human to function like an AI. It controls a fly that will fly around the station slowly, and when it reaches a machine then the person can interact with it as if they were an AI. This required changing a lot of silicon/AI checks with one that also checks for this remote, and some messing with shared ui state. 2. Moves req_access from the obj and bot to ``/atom/movable`` which lets it be shared between the two, no more copy-paste and one side lacking features/checks/signals the other has. 3. Adds a check for AI config for AI-related station traits, which was lacking prior Now for the good part... Adds a new station trait that replaces the AI with a Human. This person is equipped with an AI headset (including Binary), an advanced camera console, an omni door wand, the machine controller, and their laws. They are immune to the SAT's turrets (even if set to target borgs) and are slow outside of the SAT, mimicing the actions of the AI. They interact with the world through their advanced camera console, which allows them to do most AI stuff needed, and the holopad they can connect to without having to ring first (like Command can). They are given a paper with the laws they must follow, but since they are human they are able to bend it. Cyborgs that run the default lawset are "slaved" to them via an unremovable law 0, so the Human AI can bend the laws if they really need to (for their own survival n such), and make the cyborgs obey their commands above laws, but in general this shouldn't be a frequent occurrence. This does take into account the unique AI trait, so it's not guaranteed Asimov. When this station trait rolls, all Intellicards, AI uploads, and AI core boards are destroyed and are unresearchable. They can be spawned by admins in-game if necessary. Maybe in the future we can also exclude Oldstation from this but I haven't really decided. Extra perks: Human AI spawns with a Robotic voicebox (unless they are a body purist) and teleport blocking implant, so they can't use teleporters to bypass their on-station slowdown. They also have an infinite laser pointer that can be used to blind through their camera console. This is unfortunately nerfed from the recent borg balance PR that removed its stun. This was meant to be the alternative to no longer being able to permanently lock borgs down like AIs can (or more than one, for that matter). They aren't affected by Roburgers, Acid, and Fuel's toxicity. Bots salute them like they do Beepsky (which is now a trait) They spawn with SyndEye to replace the AI's tracking ability They do not have a bank account ### The machine remote The machine remote has a little fly in it that flies to the machines it is pointed to, working as the arms and legs of the Human AI. It scans the machine and punches in the action the AI does, and is how the AI accesses basically anything. This fly slowly moves from one machine to the next, and can be recalled with Alt Click. It works on machines and bots. ### Video (Low quality to fit Github) https://github.com/tgstation/tgstation/assets/53777086/e16509f8-8bed-42b5-9fbf-7e37165a11e8 ## Why It's Good For The Game I've seen a funny screenshot one day of a person replacing the AI by using a bunch of door remotes, camera console, crew monitoring console, and a few other things. I've been thinking about that for a few years and really wanted to make it official if not easier to make possible, because it is an incredibly funny interaction. This makes it a reality, and while they aren't as powerful as regular AIs, I think it makes for better and funnier in-game moments. With the same weight as Cargorilla (1), I hope this wouldn't be rolling too often and ruin rounds, but instead show off the different capabilities that Humans and AIs can do, to do the job of an AI. You win some you lose some. ## Changelog 🆑 JohnFulpWillard, Tattax add: Adds a new station trait job: The Human AI. /🆑 --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
5f2f9e67ad |
Add compile option for compiling in MAP_TEST mode, which disables common annoyances when testing new maps (#81697)
## About The Pull Request Adds `MAP_TEST` compile flag. This compile flag blocks common things which make it difficult to test a map. Things this applies to: - Rats no longer spawn. - Rat spawning will (obviously) break up the powernet, which is INCREDIBLY annoying when trying to test if all the rooms of the station are wired correctly (or testing which rooms lose power first, etc) - Light tubes no longer break on initialize. - Random light breakages can easily cause mappers to accidentally over light a room. - Roundstart command report is not printed. - Might be a personal preference, but it's kinda annoying to hear the alert over and over again. - Random events do not trigger. - Some events such as gravity generator outage can trigger with 0 population. - Random camera breakage event can cause over-placement of cameras. - Other stuff tends to just get in the way. - Station traits do not trigger. - Probably the biggest annoyance. Many traits modify the map in some way which disrupts testing. - Roundstart landmarks don't self deletes. - Allows mappers to use sdql to find them. - Mapping verbs start enabled. Obviously more things can be added if they come up. |
||
|
|
a210563de0 |
Adds a Touchy quirk (#81387)
## About The Pull Request Adds a new quirk for -2 points that requires you to be next to something to examine them, like blindness but without the timer or actual blindness itself. ## Why It's Good For The Game For the player using the quirk, it's 2 points for losing the ability to simply examine everything around you, making it harder to tell what someone has in their hands when they are charging at you, for example. You need to get up and close to things to see what they are. For people being examined, it's just another possible excuse to be near them, opening up plausible deniability for actions such as sleepy pens, changeling stings, etc. ## Changelog 🆑 Atlasle, JohnFulpWillard add: Adds the Touchy quirk, you need to be next to something to examine it, for 2 extra quirk points. /🆑 |
||
|
|
c76df7f37a |
Station Goals are now handled by SSstation instead of a global list (#81177)
## About The Pull Request You can now get station goals in a slightly better way over using a `locate() in` call on a global list. The Meteor Satellite goal no longer stores a giant list of ALL OBJECTS in view. And now correctly only counts turfs. ## Changelog 🆑 fix: Meteor Satellites no longer erroneously count every piece of paper as a protected turf. fix: As a result the station goal is slightly more difficult /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> |
||
|
|
495fde6a2c |
Add: 2 Quirks Configs (#81033)
## About The Pull Request This PR adds two new config options for quirks: - *Flag* `DISABLE_QUIRK_POINTS` - When enabled, disables quirk points balancing. - When enabled, players can select positive quirks without first selecting negative ones. - When enabled, the quirk points balance visually hides itself on the Quirks page. - *Number* `MAX_POSITIVE_QUIRKS` - Limits the maximum quantity of positive quirks which players can select using the Character Preferences page. - I ported this from the old `MAX_QUIRKS` define. - When set to `0`, players won't be able to select any positive quirks, and they won't appear on the Quirks page. - When set to `-1`, players will be able to select any quantity of positive quirks. - When commented-out or undefined, the default is `6`. - When set to `0` or `-1`, the positive quirk balance visually hides itself on the Quirks page. ## Why It's Good For The Game There is some downstream repositories asking for the quirks system to be configurable. Additionally, I always find myself tweaking these values on my own private servers and I thought it would be nice to share my edits. Usually I was simply commenting-out sections of this code in order to get the same result, so it helps to have an official way to disable quirk points. ## Changelog 🆑 A.C.M.O. config: Added two new config flags for quirks, DISABLE_QUIRK_POINTS and MAX_POSITIVE_QUIRKS. /🆑 |
||
|
|
a59cebea56 |
Increased odds of station traits a little. Introduced a "budget", so smaller traits only take half as much space. (#80211)
## About The Pull Request Recently, I chatted with others about how few station traits are rolled on a round by round basis - about 59% of the shifts go without either positive or negative traits for example - and how the mild most of these traits are (not a bad thing per se), which results in an underwhelming feature, despite the more interesting bits of it. So, after sharing opinions, I've decided to make this PR to increase the rolls and odds a bit. EDIT: After reading comments and taking some time to think this thoroughfully, I've decided to push the probabilities back a little in favor of a simple budget system for station traits, to allow for smaller things to only count as half a station trait. This mean smaller traits won't necessarily stop "better" ones from rolling, or at least allow for plentier permutations of traits that do not affect the round TOO much. I've also reduced the weight of the glitched pda beeps trait from 15 to 10, the same of scarves, wallets and colored assistant jumpsuits. ## Why It's Good For The Game I believe the current odds of station traits to be a smidge low, and that the lack of any sort of cost-budget for station traits to hurt the rarer, more interesting traits (and the feature in general) if the more common, milder ones take just as much space. It's totally within the spirit of the feature to have small, niche traits, though they can get quite boring pretty fast on their own, so what I'm saying is that their cost should stay low so that other traits can roll. ## Changelog 🆑 refactor: Introduced a simple budget system to station traits, so that smaller things only count as half a trait, for example. balance: Increased the odds and maximum number of station traits that can be rolled each shift. /🆑 |
||
|
|
55f6d34930 |
Change quirks_taken from nested tally to tally (#80479)
Nested tally is overkill and requires that this be handled especially in Superset. Version is not updated as the data for this is the exact same. I recommend running this query after merge (CC @MrStonedOne): ```sql UPDATE feedback SET key_type = 'tally' WHERE key_name = 'quirks_taken' ``` |
||
|
|
5814371023 |
Replaces cyborg lover with transhumanist (#80509)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> This reworks cyborg lover to be more interesting. Taking this quirk will start the user off with a robotic limb. The user gains mood buffs by being around silicon based lifeforms and loses mood by being around organic based lifeforms. Additionally, they can gain mood buffs by replacing all of their limbs to their silicon counterparts but can also gain a massive mood debuff if they lose or replace their starting robotic limb with an organic one. The idea being here that they hate organics and seek to become robotic Also, transhumanists won't be scared of people who have two or more augments. ## Why It's Good For The Game <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> Cyborg lover isn't really all that interesting since it's just a basic mood buff upon clicking on a silicon. This makes it more interesting by making it a dynamic between silicons and organics and may adapt the playstyle of anyone choosing to take this perk as they will need to stay away from organics to avoid mood debuffs. ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 balance: Cyborg lover has been replaced with Transhumanist. Transhumanists start with a robotic limb and get mood buffs by being near to silicon-based lifeforms. However, they get mood debuffs by being near organics, so there is a tradeoff to taking this quirk. The cost for this quirk has been reduced from 2 to 0. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> --------- Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
a3fa541e2e |
Bridge Assistant Station Trait (#80279)
## About The Pull Request adds a station trait which adds a new role, the bridge assistant he is designed to help commandeer the bridge and help out other heads when needed. he is armed with the mini energy gun (the one heads used to have on kilostation), a flash, a toolbelt (with an inducer), some cool shades and a swanky scarf. as he is a nerd he is weak and unable to twohand weapons, preventing him from wielding the fire axe. currently he does not have a mindshield but he cannot roll antag he currently has access to the bridge, announcement console, eva, teleporter, gateway, maint, and a weapon permit (somewhat (not really other than for nerds) interestingly this is the first job that isnt assistant that doesnt have access to any lathes, so he doesnt have orm access unlike all the other jobs (except assistant)) the trait also makes a coffee machine spawn on the bridge here is some useful art of your role  and ingame screenshots    ## Why It's Good For The Game Adds upon the station trait job system with a straight forward role that IS just a human (unlike the cargorilla), and is pretty basic with no custom assets or whatever other than hud icons Having the bridge assistant in some rounds seems like a neat way to protect it since it gets fucked up in like half the time, while also not having enough mechanical depth or gameplay as to warrant it as a permanent role ## Changelog 🆑 add: Bridge Assistant job accessible from a station trait. /🆑 --------- Co-authored-by: san7890 <the@san7890.com> |
||
|
|
659a343dbf |
Change how a station trait is declared abstract (#80268)
## About The Pull Request @Fikou requested this and it seemed like a good idea. This change the pattern for "how we declare that we don't want a station trait to actually exist" from "it's a bitfield" to the other commonly-used pattern of "it's a var which points at a typepath". The purpose of doing this is that most of the station traits which have an abstract parent want the default `trait_flags` value of their grandparent and have to redeclare it for no reason, which becomes more tedious the more children there are. This means that you don't need to do that because the `abstract_type` var will only evaluate to true when checked on the specified abstract type, without needing to change its value on any children. ## Why It's Good For The Game Makes extending traits marginally easier ## Changelog not player facing |
||
|
|
90b974071d |
Sign up for Cargorilla from the lobby (#79776)
## About The Pull Request If the station rolls the "Cargo Gorilla" trait, a button will now be visible on the lobby. Clicking on this button before the round has started will add you to a list of participants, one of whom will be selected to become a gorilla when the round begins. If nobody signs up (because they're really boring I guess) the job will instead appear on the latejoin menu. Once someone has become the gorilla the button will disappear.  While implementing this I noticed that an inverted check means we were never populating the "GLOB.cargo_sloth" field which means the station trait wasn't even working. BEHIND THE SCENES This also adds a generic "job station trait" which can be expanded in the future. Future developers can extend this to add other "rare jobs" with relative ease. By default I have made it so all subtypes of this trait are mutually exclusive, only one can roll at a time. This also means that I have converted "cargo gorilla" into a job, which applies most of the code previously located in the mob's typepath or in the station trait. The fact that it is a job means that **admins** can enable any number of gorillas to be present on the latejoin menu (but not the roundstart one, as it is not possible to add Cargo Gorilla to your occupation preferences) if they so desire. The random beurocratic station trait, event, and traitor item (and the job console) are not able to add gorilla slots. Because I changed "Cargo Gorilla" to a job it now no longer exists on the map until a player gains the role, and there wasn't a non-hacky way to copy the name of this round's cargo sloth. Instead I just added a small cargo gorilla name list. ## Why It's Good For The Game Makes the presence of a fun trait more visible to players. Means that people who aren't observing get a chance to be a monkey. This is a framework several other people have wanted to exist for their own features. ## Changelog 🆑 Jacquerel and Fikou qol: If the station rolls the "Cargo Gorilla" station trait. you will be able to sign up for the role from the game lobby. qol: If nobody signs up to be the Cargo Gorilla then you can select it from the Late Join menu and arrive on the arrival shuttle. fix: The Cargo Gorilla will actually spawn. /🆑 |
||
|
|
39a9c77672 |
[NO GBP]Gives the singularity more processing time (#80004)
## About The Pull Request Sets rhe singulo SS processing weight to 350, from 50. ## Why It's Good For The Game The round is going to end, and the singularity is the center of attention. No one cares about the simplemobs in lavaland or whatever. Lets the singularity have more opportunity to say fuck. ## Changelog 🆑 code: The singularity processing is a bit more important than the other subsystems. /🆑 |
||
|
|
9696dd1a1d |
Targeting Datums Renamed (and global) (#79513)
## About The Pull Request [Implements the backend required to make targeting datums global](https://github.com/tgstation/tgstation/commit/6901ead12e419530b7f646ea21094d4432d7385e) It's inconsistent with the rest of basic ai for these to have a high degree of state, plus like, such a waste yaknow? [Implements GET_TARGETING_STRATEGY](https://github.com/tgstation/tgstation/commit/d79c29134d03424a9f8bacd64c08cb41775fe8c0) Regexes used: new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1) Renamed all instances of targetting to targeting (also targetting datum -> targeting strategy) I've used GET_TARGETING_STRATEGY at the source where the keys are actually used, rather then in the listing. This works out just fine. ## Why It's Good For The Game Not a misspelled name through the whole codebase, very slightly less memory load for basically no downside (slight cpu cost maybe but not a significant one. --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> |
||
|
|
c8ed3f8e89 |
Makes paraplegic no longer exclusive with spacer/settler (#79515)
## About The Pull Request Pretty self explanatory, gets rid of the restriction on using paraplegic with these quirks. I'm going to very tentatively call this a qol, since I can't fathom this really being much of a mechanical help for anyone. But I wouldn't complain if people disagree ## Why It's Good For The Game Space-born people would likely be able to function fine without legs in little to no gravity, and both of them, lore wise, could have been paralyzed later in life. It doesn't really make sense for them to be exclusive. In terms of balance, I don't believe either combination meaningfully negates any of the downsides of the quirks. I can't really think of any potentially abusable mechanics that this restriction is preventing. ## Changelog 🆑 balance: paraplegic is no longer exclusive with spacer or settler or spacer. Broken legs don't discriminate! /🆑 |
||
|
|
7626c3bd6c |
Tram v6/Transport Subsystem (#78230)
Co-authored-by: Unit0016 <50649185+unit0016@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com> Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> |
||
|
|
da42afcbae |
Reworks the fishing minigame into a game screen object from a TGUI interface (#78052)
Refactors fishing minigame from tgui window to dm screen objects |