mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-08 07:18:17 +00:00
bcb5c475717ddfa2b30cf4585ea0e31282e4cf78
739 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
b67a0901f2 |
Fix issues discovered via TypeMaker (#87596)
## About The Pull Request Fixes issues with var typing and proc arguments, discovered using OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd upstream yet). ## Why It's Good For The Game Codebase maintenance. |
||
|
|
d2c8e10e26 |
Repairbots (#86084)
## About The Pull Request adds repairbots to the game!  this pr serves as a massive rework and buff to floorbots. i was a bit sad that they dont get built much anymore so ive given them tons of more utilities and uses. Repairbots still inherit to place tiles and repair breaches. but they can now rebuild walls, rebuild windows and repair structure and machinery. Also Ive given them voicelines to add more character to them. In short, they are very depressed with their job (however they express their happy go lucky attitude when u emag them where they will start deconstructing the station) to demonstrate capabilities, here's a slightly sped up clip of some repairbots patching up an area that was maxcapped 4 times: https://github.com/user-attachments/assets/bddac3b0-1984-4571-85d3-c5283dd7c0de When repairbots feel threatened, they will retract into their little toolbox which u can pick up and hold in ur hand, either to conveniently carry and plop them down at breached sites, or to bash skull with it U can build them using a toolbox, proximity sensor, cyborg arm and a conveyor belt ## Why It's Good For The Game refactors floorbots and makes them alot more useful tools for engineers to use ## Changelog 🆑 refactor: floorbots have been refactored, please report any bugs add: adds repairbots to the game! /🆑 |
||
|
|
251c0accb7 |
vampires are a human subtype & have stomachs/lungs (#87622)
## About The Pull Request Vampires have stomachs and lungs. They still don't have hunger. Vampires are a human subtype. Vamp bloodtype from "U"nknown to "V"ampire ## Why It's Good For The Game For some stupid reason vampires lacked stomachs. Vampires drinking wine is a classic trope that currently results in vomit magically appearing below you. Evidence of wine:  Vampires are a human subtype too like felinids because this resulted in dumb bugs like no screaming sound. Vamp bloodtype from "U"nknown to "V"ampire I mean if we haev these guys on halloween. We probably know their blood right. ## Changelog 🆑 fix: vampires are a human subtype & have stomachs/lungs /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
239797a4ee |
Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)
## About The Pull Request 1. Deletes `INFINTIE`, it is misleading and not at all a big number and causes bugs 2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it clearer what infinite status effects are |
||
|
|
c915a922cd |
Datumizes heretic paths (#87432)
## About The Pull Request Replaces the previous system of manually linking each and every heretic knowledge with eachother with an elegant solution to the problem, additionally places further restrictions on heretic tree, ensuring that noone can singlehandledly make it really hard to understand. There were 2 holes in the heretic knowledge tree, which I removed with temporary dummy linkings (till someone adds something there, or I may yet add something there in this PR, so if someone wants to add something there better do it quickly). The dummy linkings are necessary as the new system is rigid in this regard in that it does not allow for these connections to *not* exist, the heretic tree is a directional graph and while it handles one or mroe connections, it cannot handle having no connections by design. |
||
|
|
9b40e13f8b |
Makes dust animation look less 2006 (#87435)
## About The Pull Request This was inspired by an effect I saw on Paradise but I sprited my own https://github.com/user-attachments/assets/2130053c-a6ea-48e6-8b62-4c08563fd154 (Todo, make the skeleton appearing less jank) ## Why It's Good For The Game 1. Looks less 2006. 2. The dust sprite will reflect the mob being dusted, since it's literally just Your Sprite. Your clothes, species, etc. 3. All species and all mob types now animate being dusted - from corgi to xenos, from borgs to lizards -, and we can even reuse this effect for items being dusted if we so desire ## Changelog 🆑 Melbert image: The animation for being dusted now takes into account your sprite, rather than being a normal nude spaceman /🆑 |
||
|
|
d5daa9c9b8 |
[NO GBP] Renames mob/camera to mob/eye and makes everything follow suit (#87684)
## Why It's Good For The Game Clarity and consistency regarding DM's systems. Internally, `eye` is used for anything that controls the client's view.  How `eye` is used in DM is consistent with how we use the term, so I figured this would add clarity. Being named mob/camera also makes it unclear exactly what it's doing. The name implies that it would function similar to how mob/camera/ai_eye does, but most of the time it's only used as... an eye. My ulterior reason for this PR is that I want to clean up mob/camera/ai_eye and it's subtypes after this. ## Changelog 🆑 server: mob/camera has been renamed to mob/eye, which may break downstreams /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
c6d794180c |
Update README.md of unit tests folder for VS code support (#87758)
## About The Pull Request Turns out using dream daemon isn't the only way to run unit tests. You can do it from VS code itself & can see the output of each test in the fancy chat window.  With the added advantage of using your debugger to step through each line of code this should be the preferred way so I've updated the read me file of the unit tests folder to specify that You can also check the runtimes log in your game to see the output of each unit test ## Changelog 🆑 N/A /🆑 |
||
|
|
a8e15af29f |
Remove cyborg_tool & improves omnitool tests (#87709)
## About The Pull Request
- Removes `cyborg_tool` test, which partially helps with the below
issues as it is superseded by `datum/unit_test/omnitool`
- #87708
- #87713
- Removes borg transform animation from omnitool test which causes
random runtimes. Also restructures it for future omnitool tests which
will come in future PR's
## Changelog
🆑
N/A
/🆑
|
||
|
|
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. /🆑 |
||
|
|
20f17fb1ca |
Fixes some broken borg omnitools (#87643)
## About The Pull Request - Fixes #87641 TODO - [x] Write unit tests for bog omnitool wrench - [x] Write unit tests for bog omnitool screwdriver - [x] Write unit tests for bog omnitool wirecutter - [x] Write unit tests for borg omnitool crowbar - [x] Write unit tests for borg omnitool multiool Tests for engiborg omnitool for now ## Changelog 🆑 fix: some broken borg omni tools should work again /🆑 |
||
|
|
0f684bd7db |
fixes issues with the separate modsuit part activation (#87482)
## About The Pull Request generally cleans up the code a bit. fixes the issue where if you had clothing on yourself already and you tried extending when active it still went through the sealing process even though it didnt extend the part, causing weird desyncs. fixes the issues with part enabled modules that would not activate, makes stealth and radproof modules require the whole suit to be out cause thinking about it they wouldnt really work without that i think reverts quick activation to try put parts on you instead of removing them as priority, i think that plays nicer with separate part activation fixes #87413 |
||
|
|
f5099185c8 |
Adds a new INHALE reagent transfer method and applies it to smoking and smoke inhalation. Nitrous oxide (the reagent version) inhalation causes brain damage. (#87306)
## About The Pull Request Adds the ``INHALE`` transfer method. Smoking and smoke exposure now uses this method. Makes a few sensible inhalation effects for current behaviours. Adds a unit test amongst the rest of the exposure method tests. Nitrous oxide does brain damage on inhalation based on volume inhaled. ## Why It's Good For The Game Smoke and smoking being based on ingestion rather than inhaling was always weird to me. It'd be nice to have a specific method for smoking instead of a method shared by drinking. Many of our smokables make sense as indigestibles, obviously, but maybe we'd like a chem you can ONLY smoke. ~~Also, I walked out of a job interview and up the street to see a guy throwing his empty nitrous canisters around and yelling at passerbys, so shout out to that fucking guy with this PR.~~ ## Changelog 🆑 code: Introduces a INHALE method for reagent transfer. Cigarettes and smoke reactions use this new method. balance: Nitrous oxide now brain damage if you inhale it. So don't do that. /🆑 --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
778ed9f1ab |
The death or internal/external organ pathing (ft. fixed fox ears and recoloring bodypart overlays with dye sprays) (#87434)
## About The Pull Request This PR kills the abstract internal and external typepaths for organs, now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds. This PR also fixes fox ears (from #87162, no tail is added) and mushpeople's caps (they should be red, the screenshot is a tad outdated). And yes, you can now use a hair dye spray to recolor body parts like most tails, podpeople hair, mushpeople caps and cat ears. The process can be reversed by using the spray again. ## Why It's Good For The Game Time-Green put some effort during the last few months to untie functions and mechanics from external/internal organ pathing. Now, all that this pathing is good for are a few typechecks, easily replaceable with bitflags. Also podpeople and mushpeople need a way to recolor their "hair". This kind of applies to fish tails from the fish infusion, which colors can't be selected right now. The rest is just there if you ever want to recolor your lizard tail for some reason. Proof of testing btw (screenshot taken before mushpeople cap fix, right side has dyed body parts, moth can't be dyed, they're already fabolous):  ## Changelog 🆑 code: Removed internal/external pathing from organs in favor of a bit flag. Hopefully this shouldn't break anything about organs. fix: Fixed invisible fox ears. fix: Fixed mushpeople caps not being colored red by default. add: You can now dye most tails, podpeople hair, mushpeople caps etc. with a hair dye spray. /🆑 |
||
|
|
d170a410d4 |
Recovered Crew | Medical+Cargo Respawns (#87072)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
fd7c75b590 |
Refactor for drone holder loving component (#87239)
## About The Pull Request Refactors `/datum/component/holderloving` as a whole. It was registering a lot of unnecessary signals and was doing too much in general(vars like `can_transfer` simply isn't required) Fixes https://github.com/tgstation/tgstation/pull/87131#issuecomment-2403284265 properly by adding an extra `newloc` argument to `temporarilyRemoveItemFromInventory()` which simply hints where we want to move the object without actually removing it from the player. Using this argument we can fix camera assembly construction code because we now hint we want to move the gas analyzer into the camera and the signal handler code for drones can correctly check for locs ## Changelog 🆑 refactor: cleaned up how drone holds their tools from the toolbox. report bugs on github /🆑 |
||
|
|
9f7d6dea62 |
Outfits that put items in your hand now respect if the outfit is visual only (#87355)
## About The Pull Request On a downstream, we have an antagonist, that is a less competent wizards. This antagonist's preview outfit has a beer bottle in their hand, which has caused runtimes, as the bottle did not have any reagents instantiated, and it tried check its length for sloshing. After putting in a check for the `initial` argument of `on_equip`, I have noticed that the problem goes deeper: the various procs that handle putting something in your hand do not pass along if the items is put in your hand as a preview or not. This PR adds a new optional var to these procs, ensuring that unwanted behaviour during previews won't trigger. I also swapped `visualsOnly` to snake case, as it looked inconsistent with the rest of the code style. ## Why It's Good For The Game Making the argument that ensures avoiding side effects during previews work with all kinds of items is good. ## Changelog 🆑 fix: if an outfit puts a reagent container in the preview dummy's hand, it will not try to slosh code: outfits putting items in your hand will respect the visual_only argument /🆑 |
||
|
|
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> |
||
|
|
4a0097c7f9 |
Fix digi legs sprites getting stuck (#87254)
## About The Pull Request Fixes #86756 Fixes #67174 (isn't this already fixed? Oh well now it's really fixed because I tested it) Basically changed the random calls to `update_body_parts` with a bespoke proc which better explains what they are there to do Adds one missing call to head items (for `HIDESNOUT`) ## Changelog 🆑 Melbert fix: Fixed digitigrade pants sprite not updating in accordance to some leg updates /🆑 |
||
|
|
115711ee37 | Fixing several fish-related issues. (#87199) | ||
|
|
3b444ffd72 | DNA Infusers now check for a datum trait instead of whether non-living objects are edible and have the GORE food type. (#87154) | ||
|
|
c26ea16c4f |
Fix dead bees not being their proper bee self (#87150)
## About The Pull Request Fixes #87147 Whomever refactored bees null'd the beegent before spawning the corpse, and we pass the bee by ref into corpse init to grab beegent ## Changelog 🆑 Melbert fix: Dead bees maintain their color and reagents /🆑 |
||
|
|
d266ee9b88 |
Reverts a check added in [NO GBP] Fixes drone toolbox issues, fixes clothing unequipping, unit test (#87131)
## About The Pull Request Fixes #87129 [This change](https://github.com/tgstation/tgstation/pull/87073/files#diff-c8ab5fbc20de60e202b839834b039649cbb69a1c4b99b27a5e467f3889442ccd) added in #87073, passing `invdrop = FALSE` to `doUnEquip`, breaks the behavior of unequipping dropping your items. Because that's what `invdrop` does. If you pass it as `FALSE` it prevents other items from dropping off the mob, intended for like, outfit use / "quick swapping" an item out So I reverted it. Drone tools still seem to work I guess. @SyncIt21 ## Changelog 🆑 Melbert fix: Fixes stuff staying on your body after removing your clothes /🆑 |
||
|
|
96c0c0b12c |
Fish infusion (#87030)
## About The Pull Request I'm adding a new infusion ~~(actually four, but two of them are just holders for specific organs tied to a couple fish traits)~~ to the game. As the title says, it's about fish. The infusion is composed of three primary organs, plus another few that can be gotten from fish with specific traits. The primary organs are: - Gills (lungs): Instead of breathing oxygen, you now need to stay wet or breathe water vapor. - fish-DNA infused stomach: Can safely eat raw fish. - fish tail: On its own, it only speeds you up on water turfs, but it has another effect once past the organ set threshold. It also makes you waddle and flop like a fish while crawling (I still gotta finish sprites on this one) Other organs are: - semi-aquatic lungs: A subtype of gills from fish with the 'amphibious' trait, falls back on oxygen if there's no water. Can also be gotten from frogs, axolotl and crabs. - fish-DNA infused liver: From fish with the 'toxic' trait. Uses tetrodotoxin as a healing chem instead of a toxin. Also better tolerance to alcohol if you want to drink like a fish (ba dum tsh). - inky tongue: From fish with the 'ink production' trait. Gives mobs the ability to spit ink on a cooldown, blinding and confusion foes temporarily. The main gimmick of this infusion revolves around being drenched in water to benefit from it, In the case you get the gills organ, this also becomes a necessity, to not suffocate to death (alternatively, you can breathe water vapor, without any benefit). To enable the bonus of the organs set, three organs need to be infused. They can be gills, stomach, tail and/or liver, while the inky tongue doesn't count towards it. Once the threshold is reached, the following bonus are enabled: - Wetness decays a lot slower and resists fire a bit more. - Ink spit becomes stronger, allowing it to very briefly knock down foes. - Fishing bonuses and experience - Resistance to high pressures - Slightly expanded FOV - drinking water and showers mildly heal you over time. - for felinids: You won't hate getting sprayed by water or taking a shower. - While wet: - - If the fish tail is implanted, crawling speed is boosted. - - You no longer slip on wet tiles. - - You also become slippery when lying on the floor. - - You get a very mild damage resistance and passive stamina regeneration, and cool down faster. - - You resist grabs better. - - get a very weak positive moodlet. - However, being dry will make you quite squisher, especially against fire damage, slower and give you a modest negative moodlet. While working on it, I've also noticed a few things that explained why tetrodotoxin (TTX) did jackshit at low doses, because livers have a set toxin tolerance value, below which, any amount of toxin does nothing. Also I've felt like reagents like multiver & co were a bit too strong against a reagent that's supposed to work at very low doses, with slow metabolization, so I've added a couple variables to buff TTX a bit, making it harder to purge and resistant to liver toxin tolerance (also added a bit of lungs damage). ## Why It's Good For The Game I wanted to take a shot at coding a DNA infusion and see how chock-full I could make it. DNA infusions are like a middle point between "aha, small visual trinket" and organs with generally ok effects. I seek to make something a bit more complex ~~(also tied to fishing ofc because that's more or less the recurrent gag of my recent features)~~ primaly focused around the unique theme of being strong when wet and weaker when dry. EDIT: The PR is now ready, have a set of screenshots of the (fairly mid) fish tails (and gills, barely visible) on randomly generated spessman and one consistent joe:  ## Changelog 🆑 add: Added a new infusion to the game: Fish. Its main gimmick revolves around being stronger and slippery when wet while weaker when dry. balance: Buffed tetrodotoxin a little against liver tolerance and purging reagents. /🆑 |
||
|
|
998e1e0af8 | Fixing some typos on the names of string_x procs in dcs check list arguments (#87074) | ||
|
|
cef009e7c6 |
Refactor special_step_sounds out of existence, Human steps now depend on leg type, Digitigrade legs use claw footstep sfx (#87006)
## About The Pull Request 1. Deletes `special_step_sounds`. Unused anyways. 2. Human footstep type is now determined by its legs. - This means a human with two different legs, with two different footstep types, now alternate between footstep type every other step. 3. Digitigrade legs now use claw footstep sfx ## Why It's Good For The Game Less random species vars, more dynamic human code, and a little bit more immersion ## Changelog 🆑 Melbert refactor: Refactored footsteps for humans. Human footstep sound effects are now determined by your leg type. Report any oddities. qol: Digitigrade legs now play claw footstep SFX. "plat plat" is dead, long live "tap tap". /🆑 |
||
|
|
0ef5c3d049 |
Persistent Map Vote Tallies (#86788)
## About The Pull Request Changes map votes to be based on a persistent tally count. Tallies for maps are cached between rounds and are added to by map votes. When a map is chosen, and it wasn't the only valid one, the tallies for said chosen map will be reset. Refactors map vote handling and moves it from SSmapping to SSmap_vote. Rock the Vote has been removed as a result of this refactor. ## Why It's Good For The Game Makes it more likely that all maps will be played over the course of a server instead of always being truly random. Removes some clutter off of SSmapping. 🆑 refactor: Map Votes are now carried over between rounds. When a map vote is actually a contest, the winning map will have its votes reset. /🆑 |
||
|
|
3f0b4abb8d |
Replaces world.icon_size (and some magic numbers) with defines (#86819)
## About The Pull Request All usages of world.icon_size in code have been replaced with new `ICONSIZE_X`, `ICONSIZE_Y` and `ICONSIZE_ALL` defines depending on context Replaces some "32" magic numbers with the defines A few bits of code have been modified to split up x/y math as well ## Why It's Good For The Game Magic number bad, code more readable, code more flexible and I'm told there's an access cost to doing world.icon_size so minor performance gains ## Changelog 🆑 tonty code: made some code relating to the world's icon size more readable /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
ad111f4950 |
Spacemove refactor - Newtonian physics (#84869)
## About The Pull Request This PR significantly enhances how zero-g movement works. Its no longer locked to one of 8 directions, everything now has inertia and is affected by weight. This means that throwing a piece of wire will no longer completely reverse your movement direction, and that being thrown out of mass driver no longer will slow you down to a halt at some point. This leads to following gameplay changes: * Guns now accelerate you. Ballistics have higher acceleration than lasers, and higher calibers have higher acceleration than smaller ones. This means that firing full-auto weapons in zero-g will make you drift and accelerate significantly. While this can be a hilarious way to travel in space, it makes using them trickier. * Impacting a wall or an object while moving at high speeds will cause you to violently crash into it as if you were thrown. Careful when exploring! * Jetpacks now have inertia. Changes introduced in #84712 have been mostly reverted, although speed buff has been reduced to 0.3 instead of 0.5 (although this is compensated by new movement mechanics, so overall speed should be roughly equal). All MODsuit jetpacks now possess the speed boost. Advanced MODsuit jets (which has also been added back) and captain's jetpack instead have higher acceleration and stabilization power, providing much more precise control over your movement. * Firing guns while moving on a jetpack will partially negate your pack's acceleration, slowing you down. Non-advanced jetpacks' stabilization is not enough to compensate for heavy caliber weaponry as sniper rifles, shotguns or rocket launchers. * You no longer instantly decelerate upon sliding along a wall. Instead, it may take a few tiles if you are moving at extreme speeds. Passing over lattices still allows you to grab onto them! As space movement is angle-based instead of dir-based now, its much more smooth than before due to using new movement logic. Example of jetpack stabilization in action: https://github.com/tgstation/tgstation/assets/44720187/6761a4fd-b7de-4523-97ea-38144b8aab41 And, of course, you can do this now.  **This pull request requires extensive gameplay testing before merging**, as a large amount of numbers have been picked arbitrarily in an attempt to keep consistency with previous behavior (guns and normal-sized items applying 1 drift force, which is equal to what everything applied before this PR). Jetpacks and impacts may also require adjustments as to not be frustrating to use. Closes #85165 ## Why It's Good For The Game Zero-G refactor - currently our zero-g movement is rather ugly and can be uncomfortable to work with. A piece of cable being able to accelerate you the same as a duffelbag full of items when thrown makes no sense, and so does instantly changing directions. Inertia-based version is smoother and more intuitive. This also makes being thrown into space more of a hazard (possibly opening the door for explosive decompressions?) Jetpack inertia and gun changes - this is mostly a consequence of inertia-based movement. However, zero-g combat being preferred during modes like warops was an issue due to it negatively affecting everyone without jetpacks which are in limited supply onboard. This reverts the mobility changes which severely impacted space exploration, while making zero-g combat more dangerous and having it require more skill to be a viable option. ## What's left - [x] Refactor moth wings to use jetpack code - [x] Refactor functional wings to use jetpack code - [x] Locate and fix a recursion runtime that sometimes occurs upon splattering against a wall - [x] Add craftable tethers and modify engineering MOD tethers to use the same system ## Changelog 🆑 add: You can now craft tether anchors, which can be secured with a wrench and attached to with right click. They won't let you drift into space and you can adjust tether length/cut it via lmb/rmb/ctrl click on the wire. add: MOD tethers now remotely place and connect to tether anchors instead of throwing you at where they landed. balance: MOD tethers can now be used in gravity balance: Jetpacks are now inertia-based. balance: Guns can accelerate you significantly in zero-g. balance: All jetpacks now give you equal speed buff, however advanced MOD ion jets and captain's jetpack have higher acceleration/deceleration values. refactor: Refactored zero-g movement to be inertia-based and utilize angles instead of directions. /🆑 |
||
|
|
df3fc8c626 |
Fixes cat ear layering, makes getFlatIcon account for RESET_COLOR on under/overlays (#86757)
## About The Pull Request After the external organ removal pr, cat ears stopped being as weirdly specialcased, and instead just used a `/datum/bodypart_overlay/mutant` subtype. However, this was set up in a way where the inner ears were put on a different layer from the outer ears, leading to wonky layering. In this pr, we revert their layers and instead apply the inner ears as an overlay onto the base ears, fixing this. Thank you Melbert for the idea. o7 ### Addendum: Additionally, as this pr tripped the screenshot tests, makes the `getFlatIcon(...)` proc account for `RESET_COLOR` on under/overlays. We do this by making it stop applying the colour after merging all the under/overlays, and instead apply it and the parent color _before_ merging any under/overlays, while proxying the parent color as a new parameter `parentcolor` to any new `getFlatIcon(...)` calls. This coincidentally also fixes usage of `getFlatIcon(...)` on husked bodies, as those also used `RESET_COLOR` for their blood overlay. The screenshot tests had to be updated for this. ## Why It's Good For The Game Fixes #86453. ## Changelog 🆑 fix: Fixed cat ears not layering properly. fix: Husked bodies show their blood with the right colours in photographs. /🆑 |
||
|
|
ff2760e908 |
Adds new tasty fish to deep fryers. (#86690)
## About The Pull Request This PR introduces three new fish that can be caught from deep fryers. That's right, deep fryers are also fishing spots now. Is it silly? Yeah, but this is more or less the reason I made a whole PR to make fish edible. They've two gimmicks: one is that they're already fried, and neither raw nor gorey and can be cut into nuggets. The other is that they can evolve into the next type just by growing, no need of pairing them with each other, starting from the 'fryish', then the 'fritterish' (and its two variants: 'bernard-fish' and 'matthew-fish', big pun on the english food company) and finally the 'nessie-fish' which is very rare and big and you'd probably get 20 nuggets by cutting it alone. Other than that, this PR adds a simple growth mechanic to fish, where they get a bit larger each time they're fed. The gained size and weight depends on several factors like hunger, their current size and weight and how much until they hit the maximum cap of twice the initial size and weight. This means bigger fish grow slowier, and it's better to feed them once in a while but not every other second. Obviously size and weight influence a lot of fish mechanics, so it's good to have a way to increase these values outside of breeding RNG (which is very shallow). TL;DR: Feed the fish once their hunger reaches 50% circa for maximum growth. Included in the PR are a few tidbits, like fixing a little mistake around the 'picky eater' fish trait, more readable code around the fish_growth component (unrelated to the aforementioned growth mechanic) and hunger or adding the fish evolution datum for armored pikes (normal pikes plus stinger trait, which I basically forgot to), and adjusting how weight and size of offsprings is calculated. ## Why It's Good For The Game First and foremost, a brand new on-station fishing spot that is not the fishing portal, toilets (or the rare moisture traps in maint). Second, a fish growth mechanic through which weight and size can be increased. Third, a few code things. Four, little bugs, now fixed. Fifth, have a screenshot of me fucking around to find out how many bites it takes to eat all of the deepfried gargantuan nessie (53, and I had to spawn another 10 humans to finish it):  ## Changelog 🆑 add: You can now fish new, tasty treats by the station deep fryers. add: You can now grow fish inside an aquarium by feeding them regularly (at 50% hunger for maximum growth). add: Added the evolution for pikes to armored pikes. /🆑 |
||
|
|
1aad3e118c |
You can now link fishing portal generators to other fishing spots. (#86291)
## About The Pull Request You can now interact with the fishing portal generator with a multitool to load it in the buffer and subsequently link fishing spots to it by tapping them with the same multitool. The maximum number of fishing spots that can be linked at once depends on the tier of the matter bins of the machinery. Normally, while you can link fishing spots from other z-levels, they can only be activated if they're on the same z-level as the machinery (or if both are on station for multi-z stations). This limitation can be bypassed by upgrading the machinery with a tier 3 or higher capacitator. While it's possible, I'm not spriting new fishing portal overlays and icons for the radial menu for every fish source out there (yet). The code is enough work for now. This also comes with a unit test, because there is no such thing as too many unit tests for fishing. ## Why It's Good For The Game Fish portal generators are designed to let players fish a different bunch of things while being able to be moved wherever you like, unlike a lake or an ocean, with all the comfort of being able to able to catch fish from distant locations. Allowing players to link other fishing spots to it fits its design. It also means that you can go out and explore, find more fishing spots and then return to the station without having to detach yourself from the ongoing round for several more minutes. ## Changelog 🆑 add: You can now link fishing portal generators to other fishing spots with a multitool. The number of fishing spots that can be linked at once and whether the link can be activated from different z levels depends on the tier of the stock parts it's built with. /🆑 --------- Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com> |
||
|
|
ab222330ef |
Squashs four fish boolean vars into a bitfield (plus VV support) (#86623)
## About The Pull Request this is a very marginal code improvement to fish. One bitfield is better than a bunch of booleans, and it lets me add more TRUE/FALSE settings in the future without having to make new vars for it. Also VV support for several vars (fish_traits will have to wait), if me or someone else wants to var-edit fish for testing purposes or whatsnot. ## Why It's Good For The Game Slight code improvement and var-edititing support. ## Changelog N/A |
||
|
|
00e2f6cd7b |
Fish sources are more thoroughfully stressed during unit tests. (#86637)
## About The Pull Request The profound fisher component (for both mobs and gloves) as well as the proc responsible for rolling rewards are now being tested too. This is something I've meant to do in a while, #86633 just happened to kick it off now. ## Why It's Good For The Game More tests, fewer mistakes flying under the radar. ## Changelog N/A |
||
|
|
5409570e01 |
Upgrades GODMODE from a flag to a trait. (#86596)
## About The Pull Request GODMODE has a lot of sources that toggle it. From admin-stuff to status effects, components, actions and mobs which are supposed to be invincible. It's better off as a trait than a flag, so we can manage these sources. ## Why It's Good For The Game See above. ## Changelog 🆑 admin: godmode is now a datum trait instead of a bitflag. This means the process for toggling it is a little different now. /🆑 |
||
|
|
8d0e6734fe |
Fish (ya know, from fishing) is now edible (#86110)
## About The Pull Request Fish (the item that you catch with a fishing rod) now has an edible component attached to it, making it possible to eat them if you really have to, at the cost of eventually killing and deleting the fish, however, you normally shouldn't. Along with the seafood and meat foodtypes flags, it possess the gore and raw foodtypes too, making them pretty awful to eat unless you're a (non-vegan) lizard, felinid, or wearing the strange bandana*, which can only be found in the cqc kit case. Furthermore, it carry diseases like the ones from food left on the floors for too long, so a strong stomach is required to safely eat it even if you actually like it, dummy... UNLESS you fry or grill it, thus killing the diseases (as well as the fish) and removing both the gore and raw food types, then it becomes an actually ok meal... UNLESS you're dumb enough to eat a pufferfish, a donkfish or a slimefish. That is more or less the general rule. A few fish stray for it. For example, lavaloops are never raw (still gorey). The skeleton fish are never edibles, and holodeck fish is, well, holographic and thus disappears if you try to eat it. *the strange bandana is a reference to MSG, and this is a reference to the MGS3 fish eating animation. This is WIP btw, I'll have to test it and add some then polish it. ## Why It's Good For The Game Whole unprocessed fish should be technically edible, even if not safe to eat nine times out of ten. Also I kinda need this if I want to add a tasty fishing spot to the kitchen deepfriers. ## Changelog 🆑 add: Whole, unprocessed fish is now edible. However it's pretty much reccomended to grill or fry it for over 30 spess seconds before attempting to eat it. fix: germ-covered, dirty food no longer tries to infect you through contact. /🆑 |
||
|
|
6808a082eb |
Assorted changes to job assignment code and logging. Runtime free, guaranteed or your money back. Price: $£0. (#85947)
## About The Previous Pull Request
#85308 reverted by #85929

~~Causes the round to not start when a player isn't eligible for any
jobs at a specific priority level due to runtimes trying to `pick()`
from an empty list aborting the entire job assignment stack.~~
(Fixed???? by
|
||
|
|
8486f2f7e2 |
Storage / table interactions at the bottom of the interaction chain (#85512)
Because the wings were in fact made of wax ## About The Pull Request Storage goes to the very bottom of the interaction chain, hardcoded in on `/atom`. This is not preferred, obviously, but it ends up being a lot less snowflaking overall. Tables also go at the very bottom by extending `base_item_interaction`. Fixes #83742 Fixes #84434 Fixes #83982 Fixes #85516 Fixes #84990 Fixes #84890 Closes #85036 Closes #84025 (RMB places it on the table.) Closes #86616 Other changes: Refactored pod storage to be less jank. Patches some exploits around it. ## Why It's Good For The Game Should make a lot more interactions a lot more reliable... hopefully ## Changelog 🆑 Melbert refactor: Storage and Tables are now a lower priority action, meaning some uses of items on storage should work... better, now. Here's hoping at least, report any oddities. refactor: Note: For an overwhelming majority of items, **combat mode** will attempt to attack/insert into the target, while **non-combat-mode** will attempt to use on a target. This means screwdrivering or emagging a MODsuit must be done on non-combat-mode, as combat mode will simply put the screwdriver or emag into its storage. Same applies to tables, though when in doubt, RMB may help (for things which are also weapons, like mops). refactor: Refactored escape pod storage, now they actually properly show as unlocked on red alert and above. /🆑 |
||
|
|
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 |
||
|
|
69176298ed |
Spelling Fixes (#86056)
## About The Pull Request Fixes several errors to spelling, grammar, and punctuation. ## Why It's Good For The Game Improves readability and user experience. ## Changelog 🆑 spellcheck: fixed a few typos /🆑 |
||
|
|
543dd8e58d |
fixes can_see not working (#86517)
## About The Pull Request can_see wasnt working after the new inbuilt byond procs were introduced to it. ## Why It's Good For The Game closes #86515 ## Changelog 🆑 fix: basic mobs will now act hostile again /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
3a2d4258b2 |
Aquarium fish visuals cleanup and unit test. (#86090)
## About The Pull Request Right now, there are two ways to set the aquarium visual for fish. The first is to make a small little blob of pixels representing the fish inside the aquarium, and then set the fish' sprite_width/sprite_height vars for that little blob of pixels. The second is to set the fish' source_width/source_height representing the boundaries of the fish original icon state and then sprite_width/sprite_height to get how much the icon state will be resized when used as an aquarium visual. So far so good, except we're only humans, and this sort of stuff can and will confuse us and overall make the process of adding new fish more complex. There are quite a few fish that don't have these vars set up in the right way, so I've decided to butcher out the second method in favor of the first one. Given the size of the aquarium icon states, this is a pretty trivial task. Furthermore it works better for fish whose sprites are coiled or snakey-looking (jumpercables and emulsijack) or on a diagonal axis. I've also added an unit test to ensure future contributions don't ever forget to set the right vars and make an aquarium icon state. ## Why It's Good For The Game Less confusion, and two less fish variables (they've over 40!). ## Changelog 🆑 fix: fixed a few minor nits with aquarium fish visuals. /🆑 |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
095f7e3b70 |
Death of mutant bodyparts AND external organs (#85137)
## About The Pull Request Removes mutant bodyparts and external organs from the game completely Digitgrade behaviour was mutant bodypart for no reason Cat ears now work with the bodyparts overlay system, same as all the other external organs (since all their behaviour is now just on /organ It doesn't remove all the /external types, but moves all behaviour to /organ. I'll follow up with a PR wiping all the /external organ types, but it's just conflict heaven so not this PR I've also streamlined a lot of duplicate/weird species regeneration code Melbert did the same PR as well but due to a lack of time (?) I have absorbed his PR to double nuke mutant bodyparts ## Why It's Good For The Game Frees us from the chain of unmodular code, and kills my greatest nemesis (after the shuttle meteor murder bug) ## Changelog 🆑 Time-Green and MrMelbert Refactor: External organ behaviour has been moved to /organ, ears now use the same system as the other organs Refactor: Mutant bodyparts are dead! This likely does not mean much to the average person but it's very dear to me code: Improves digitgrade handling in preference code /🆑 I have absorbed #85126, using Melberts code to improve and add some missing changes. Mainly improving the functioning of preferences and digitgrade legs. I didn't take over the hairstyle improvements. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
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. /🆑 |
||
|
|
2f69fe6190 |
Adds three new deathmatch maps - Ragnarok, Lattice Battles, Species Showdown (#85319)
## About The Pull Request Adds three new deathmatch maps. ### Important nonDM Balance Changes Cult daggers fit on belts. Heretic blades fit on belts. Veil shifters fit on belts. I really don't know why these didn't, it makes inventory management rather annoying at times. It also screwed my loadouts over. Cursed Blades fit on cult robes. They're cult equipment after all. Bronze suits fit toy watches!! ### Ragnarok  A vicious battle in the jungle, between the three major religious sects: Prove your deity's might! And try not to upset any primates. Or fall into the chasm. Going clockwise: **Cultist Invoker**: Wielding a mirror shield, shielded robes, a sword, and some bolas, this cultist has a 'well-balanced' set of equipment to annihilate their opponents. **Cultist Artificer**: This set harnesses the blood magicks - with spells of stunning, blood rites, and ranged hallucinations, with a wicked Cursed Blade and Veil Shifter as implement, and Berserker Robes to finish the look. **Holy Crusader**: Nullifying most, but certainly not all, of the fearsome arsenal of the opponents with the null rod at their belt, the Crusader packs a dangerous claymore and armor to protect them from the demons. **Rat'var Apostate**: Hey, what's that guy doing there in the dark? They don't have any magic because their god is Fucking Dead, but they're still going to show up for a token effort. Good luck! **Heretic Scribe**: This mad soul wields an antique rifle and an assortment of other dangerous relics, with a set of magic geared towards staying far apart, picking enemies off from range and evading their attacks for the final blow. **Heretic Warrior**: With the deadliest of Mansus Magic at their disposal, this warrior is only limited by their ability to juggle all their spells at once - don't get overwhelmed sorting your spells while an Invoker runs at you with a sword and shield and makes you cry yourself to death. ### Lattice Battles  A fresh change of pace: In this pacifist map, the only way to kill your opponents is to snip the lattices and catwalks from under them. Watch your step. ### Species Warfare  Prove the might of your static by duking it out with every other kind of crewmember out there. Features a messy dorms, a ticking-timebomb atmos, a rather sterile robotics, a slippery closet, a fluffy medbay, and an energetic bridge. Mirror Shields now shatter on throw (which stuns and hurts) ## Code changes Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC. Added these as an OR to respective IS_X checks. Added new GET_X checks for them, which do not check the trait. Tidied up the file those are in. Added belt_contents() to outfits, but it dosen't work.... Added a heretic rust sister-type to rust walls and floors. Fixed a typo in cult ascension. ## Why It's Good For The Game These maps all aim to do something interesting and unique with DM rather than the usual deathfest and hugging of random crates. Ragnarok allows players to practice unusual and rare magical mechanics, similar to Ragin' Mages. Lattice Battles adds SPLEEF to the game, which I think is awesome. Species Warfare is, I think, fun and funny. Each 'department' has incredibly chaotic and thematically-appropiate content for the species its meant to symbolize, and I look forward to the chaos that every round in it is inevitably going to have. > Mirror Shields now shatter on throw. I'm surprised they didn't! Since they aren't used anywhere I can do what I want with them. ## Code changes > Added two new traits, TRAIT_ACT_AS_CULTIST and TRAIT_ACT_AS_HERETIC. Added these as an OR to respective IS_X checks. Added new GET_X checks for them, which do not check the trait. I think this is a clever solution to the problem of 'what if I want someone who acts as the antag, but isn't?' Some procs do need the datum to modify it, so there's GET_X, but those aren't common and don't seem likely to be an issue. > Added belt_contents() to outfits, but it dosen't work.... Help would be very much appreciated, I don't know what I'm doing wrong here. It's only used for the heretic scribe's unfathomable curio. Some post-PR cleanup coming up. ## Changelog 🆑 add: Added three new DM maps - Ragnarok, Lattice Battles, Species Showdown. /🆑 |
||
|
|
00a0d0b890 |
Special radio channels now use bitflags instead of individual vars (#85150)
## About The Pull Request Radios/encryption keys now use a `RADIO_SPECIAL_XXXXX` bitflag for behaviors related to "special" radio channels (Binary, Centcom, Syndie). I decided to do this because I wanted to add a radio channel for pirates and hunters (hence the branch name), but it felt weird adding two more variables. The more I look at the changes I've made here the more I realize that the effort was probably not worth the utility but whatever. This also subtypes some varedited intercoms and makes them their own objects. ## Why It's Good For The Game Compresses a whopping three (3!) variables into a single one. Easier to scale (I guess?). I felt like adding a fourth/fifth variable and just moving on with the original project, but decided "lets do this the unnecessarily hard way instead". ## Changelog 🆑 Rhials code: Radios/encryption keys now use a single variable for "special" frequencies. Please report if you experience any strangeness with accessing/being unable to access the Centcom, Syndicate, or Cyborg radio. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
4d1639b04c |
Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308  |
||
|
|
1eef540054 |
Assorted changes to job assignment code and logging. (#85308)
## About The Pull Request
This PR does a couple of minor things:
Makes the job debug logging a bit easier to follow.
Minorly brings some SSjob code up to code standards, converting proc
names to snake_case and doing some otherm is cleanup.
Refactored some stuff into different procs, updated some comments.
And some major things:
Changes the job assignment logic.
Old behaviour
> Assign dynamic priority roles
> Force one Head of Staff (if possible)
> Assign all AIs
> Assign overflow roles (bugged in 2 ways)
> Shuffle the available jobs list once, at the start of the random job
assignment loop
> Pick and assign random jobs for random players from High prefs down,
with a priority on Head of Staff roles
> Handle everyone that couldn't be assigned a random job
New behaviour
> Assign dynamic priority roles
> Assign all Head of Staff roles to players with High prefs
> If no Head of Staff was made in the above way, force one Head of Staff
(if possible)
> Assign all AIs
> Assign overflow roles (fixed)
> Prioritise and fill unfilled head roles at each job priority pref
level, from High prefs down.
> Build a list of all jobs that each unassigned player could be eligible
for at the above pref level.
> Pick a job from that list at random and assign it to the player.
> Handle everyone that couldn't be assigned a random job.
In reality there should be little impact on overall job assignment, the
code changes read more as semantics. For example, the priority check for
filling Head slots will have the same candidate pool in both old and new
versions, but in the new version we're more clearly saying that Heads
are important and we want to prioritise filling them for the sake of
round progression even though the outcome in new and old is the same.
A key change will lead to an increase in assistants - Overflow fixes.
Currently the code block to do early assignments to the Overflow role
doesn't work - or works but not as you'd expect. The idea was is that
because enabling the Overflow role in the prefs menu is an On/Off toggle
that sets the job to High priority when enabled and prevents any other
High priority pref, players that have the Overflow role enabled will
**always** get it. It's their highest priority job with infinite slots.
So we do a pass right at the start to give everyone with the Overflow
role enabled that role and save us wasting time later on in random job
code giving them that same role but with more work.
The problem is the code for this only assigns the Overflow role to
people with it set to Low priority in their prefs, resulting in log
readouts like:
```
[2024-07-27 09:49:43.469] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:43.469] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Radioprague, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caluan, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caractaser, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Apsua, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: AC1, Candidates: 0
```
Where nobody gets pre-assigned the overflow role because their prefs are
all set to the High priority from being toggled... Except wait a second,
some people have it at Medium priority when it should just be a No
Role/High Priority Role toggle?
And herein we meet a problem. My hypothesis is that traits and stuff
that change the overflow have allowed players to set the "ordinary"
overflow role of Assistant to Medium and/or Low priority.
This still shows as enabled in the prefs menu, but leads to an outcome
where a player with assistant enabled is assigned Cook instead.
```
[2024-07-27 09:49:47.775] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:47.775] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
...
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
...
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
```
So players with the Overflow job pref set to Low (an unexpected state,
should be disabled or High) would be guaranteed to get that role if none
of the higher priority Head of Staff/AI/Dynamic roles took over via the
bugged "force overflow for people with the pref enabled" proc.
Players with the Overflow job pref set to High would be guaranteed to
get that role if none of the higher priority Head of Staff/AI/Dynamic
roles took over via the random job assignment code giving them their
Highest priority role thanks to the infinite job slots of the Overflow.
And players with the Overflow job pref set to Medium (an unexpected
state, should be disabled or High) would get Assistant if the shuffle
step of the available jobs list put Assisstant before any of the other
jobs they had prefs enabled for at Medium that weren't already filled,
otherwise they'd get another random job.
This code is now changed to ignore the priority the player has set when
looking for people to fill the overflow role. As long as it **is**
enabled, the player will get it unless they're forced into a dynamic
ruleset role (AI when malf rolls) or a Head of Staff role due to their
other prefs (they have RD set to med or low, and no other player has a
Head of Staff at high so they get randomly picked and miss the overflow
role).
This will increase the number of assistants in shifts where their pref
state has Assisstant in the bugged Medium priority, but doesn't change
it for bugged Low and not-bugged High/On priority.
On the other side of the coin, we have how the random jobs are picked.
They're kinda not random, and I noticed this reading the logs then
reading the code.
The list of available jobs to pick from is randomly shuffled - but only
**once**. All players pull from a list of jobs in the same order. So you
end up with a log block like this:
```
[2024-07-27 09:49:47.985] DEBUG-JOB: DO pass, Player: Pierow, Level:3, Job:Botanist
[2024-07-27 09:49:47.985] DEBUG-JOB: Running AR, Player: Pierow, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.985] DEBUG-JOB: Player: Pierow is now Rank: Botanist, JCP:0, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: DO pass, Player: Daddos, Level:3, Job:Botanist
[2024-07-27 09:49:47.986] DEBUG-JOB: Running AR, Player: Daddos, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.986] DEBUG-JOB: Player: Daddos is now Rank: Botanist, JCP:1, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: FOC job filled and not overflow, Player: Bebrus2, Job: /datum/job/botanist, Current: 2, Limit: 2
[2024-07-27 09:49:47.987] DEBUG-JOB: FOC player job not enabled, Player: Bebrus2
[2024-07-27 09:49:47.987] DEBUG-JOB: DO pass, Player: Bebrus2, Level:3, Job:Cook
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
[2024-07-27 09:49:47.988] DEBUG-JOB: Player: Bebrus2 is now Rank: Cook, JCP:0, JPL:1
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC player job not enabled, Player: Redwizz
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC job filled and not overflow, Player: Redwizz, Job: /datum/job/cook, Current: 1, Limit: 1
```
The list is shuffled into an order of something like `list("Scientist",
"Botanist", "Cook", "Sec Officer", ...)` then iterated over for each
player. So every random job selection goes:
> "Does Player1 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player2 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player3 have Scientist enabled and at the right priority? No?
Okay, Botanist has no slots left so we'll remove it from the list. Okay,
Cook? Yes? You get cook."
> "Does Player4 have Scientist enabled and at the right priority? No?
Okay, Cook has no slots left so we'll remove it from the list. Okay, Sec
Officer? ..."
This can lead to stacked individual departments if it gets randomly
rolled to the start of the list in the shuffle, and completely empty
departments if they end up at the end.
On high pop shifts this is probably less of an issue. Player prefs add
noise to this and as departments at the front fill up, those at the back
pick up some of the lower pref players.
But have you ever had a shift where there's just like... No fucking sec
even though there's tons of players? The logging (before I made changes
in this PR) was a bit ass, but my hypothesis there is that sec officer
was shuffled right at the end of the random job list, so every other
department was filled up before sec officers were picked.
To mitigate this, I made the list shuffle every single time the game
picks a random available job for the player. This should lead to a more
balanced selection of available jobs by avoiding situations where the
code is biased towards packing some departments by accident.
## Why It's Good For The Game
Overflow fixes mean people who go to their prefs and see the Overflow
Role is On will all have the same experience - They will be the Overflow
role.
More random random job selection should prevent individual departments
having a jobs be stacked when it would have otherwise been possible for
a more balanced selection but the code unintentially biased random
departments to be overstaffed and understaffed each shift.
## Changelog
🆑
fix: Having the Overflow Role set to On will properly ensure you get
that role at a High priority as intended by the game code.
fix: Job selection is now a little bit more random. Fixes an
unintentional bias in random job assignment that could lead to
feast-or-famine for roles where everyone is assigned one job and nobody
is assigned another job.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
|
||
|
|
310be26041 |
Adds attack_dir to multiple common damage sources, fixes mechs' directional armor (#85726)
## About The Pull Request Closes #81260 Closes #74022 Currently mechs are the only atoms utilizing attack_dir but I added it in multiple other places that were missing it to ensure that if something else uses it it won't break in those scenarios ## Changelog 🆑 fix: Mechs' directional armor now actually works /🆑 |