* Makes turfs persist signals
* Splits connect_loc up into two elements, one for stuff that wishes to connect on behalf of something, and one for stuff that just wants to connect normally. Connecting on behalf of someone has a significant amount of overhead, so let's do this to keep things clear
* Converts all uses of connect_loc over to the new patterns
* Adds some comments, actually makes turfs persist signals
* There's no need to detach connect loc anymore, since all it does is unregister signals. Unregisters a signal from formorly decal'd turfs, and makes the changeturf signal persistance stuff actually work
* bro fuck documentation
* Changes from a var to a proc, prevents admemems and idiots
* Extra detail on why we do the copy post qdel
Fixes a bug where egg glands (eggs with a random reagent) would runtime if they combined with invisible powder.
Invisible powder was setting their color to null, which broke everything. This doesn't change any behavior as invisible powder hardly works anyway.
* Fixes some more holes in the ref tracker
The reference tracker was failing to check null keyed assoc list entries, along with being unable to check both
lists in a list(list() = list()) pair
This resolves that, and adds some new logic to the unit test to check for this sort of thing
* Seperates the ref tracking unit test into 6 subtasks as requested
* Fixes footprint stacking, replace_decal needed to return parent, and just, didn't. I'm not sure where the fuck
this came from, or even how to test for it, but here you are
* Adds a unit test to prevent regressions on this error in future
* Uses TEST_ASSERT_EQUAL instead of TEST_ASSERT
Thank you moth man
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Updates a comment to more accurately describe my pain
* maybe fixes it?
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Ref Tracking: Revengance
Fixes reference tracking ignoring self references due to a poorly thought out tick checking system.
Fixes reference tracking ignoring the contents of assoc lists
Makes the reference tracking printouts actually describe what list the ref is in, rather then just saying "list"
Adds REFERENCE_TRACKING_DEBUG, a define which toggles tracking info for the ref tracking procs, which allows for
oversight on how the proc is working
Allows for direct calls of qdel_and_find_ref_if_fail(), makes it use ref rather then REF(), fixing it breaking
for mobs. (Ditto for the qdel hint which does the same thing)
Moves REAGENTS_TESTING out of the reftracking define block
Makes unit tests define REFERENCE_TRACKING, REFERENCE_TRACKING_DEBUG, and FIND_REF_NO_CHECK_TICK
Adds a unit test that sanity checks the reference finder proc
* heat pump rework
* f
* efficiency
* powe
* powermess
* better math
* math and enviroment equation
* freezers connected to waste pipenet and co2 recircled in waste
* smol
* rotate danger
* upgrades
* minor tweaks
* requested changes
Security officers will now be paired up together in the same department, across departments. This means that, instead of 4 officers being split across 4 departments, there'll now be 2 groups of 2.
Late-join officers will be put into any department with only 1 officer. If none exist, the least populous department will be chosen, with their preference having priority.
Updates the maps to have more spawns for departmental officers. Delta previously had none, and now has some. Fixed a bug where MetaStation's security departmental officer was a supply one instead.
Removes the "random" departmental preference. All security officers are now given a department. The "none" preference still exists, but just to show that you don't care which department you're put into.
Updates the config to comment out SEC_START_BRIG. This is what the configuration was already on live servers.
This is something that should likely be test merged, but it mucks with savefiles. Luckily, the only damage it does is changing random departments to none, so if a TM is reverted, only that will have to be changed.
* Raises the quantize threshold from 1E-7 to 1E-4.
This makes gas dissipate as expected, and should help with the amount of useless gas floating around the station
at highpop
Adds a garbage_collect() call to the portion of pipeline code where all gasmixes are in one place, this should
clean things up properly.
Changes BREATH_VOLUME from 2 to 1.99. This is imperative
Documents a FUCKING HELLBUG in quantize/breathcode that can lead to breaths just not working sometimes. I'm not
sure how to fix this totally, so I'll document it and pray.
See <https://www.desmos.com/calculator/5icdlnktus>
Adds a unit test to check for this sort of failure.
Addendum for people tweaking this value in the future.
Because o2 tank release values/human o2 requirements are very strictly set to the same pressure, small errors
can cause breakage
This comes from QUANTIZE being used in /datum/gas_mixture.remove(), forming a slight sawtooth pattern of the
added/removed gas, centered on the actual pressure
Changing BREATH_VOLUME can set us on the lower half of this sawtooth, making humans unable to breath at standard
pressure.
There's no good way I can come up with to hardcode a fix for this. So if you're going to change this variable
graph the functions that describe how it is used/how it interacts with breath code, and pick something on the
upper half of the sawtooth
NOTE: I've made this change with a focus on o2 requirements. Changing this will effect other settings, but most
all of them can be ignored, as none will notice.
* Thank you moth man
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Docs the purpose of the breath unit test, and better explains partial pressure
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
I tracked down every source of damage, and just ran the test 100 times until it failed.
It was shrapnel.
I made the victim pierce immune, meaning they'll never take embeds.
* Adds unit test for spawned food having reagents
- Adds stack trace for biting food failing due to a lack of reagents
- Adds checks for seed var being set under food/grown's initialize() in grown.dm
- Fixes issue with gondola meat code duplicated for penguin meat slabs resulting in a runtime and being unable to slice penguin meat
- Adds seeds for bombananas
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Adds a new GUI that can be opened from the chem dispenser that will let you look up all reactions and reagents presently in the game (except secret recipes).
For the colours:
purple - clicking this will give you a recipe
blue - clicking this will give you a reagent
green - clicking this will turn it off (or it's also green if the reagent is present in the associated beaker the UI is linked to)
red - clicking this will turn it on
Co-authored-by: Rohesie <rohesie@gmail.com>
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
- Makes `/mob/living/proc/Life` and most related procs use `delta_time`
- Procs that had snowflaked timing systems, such as breathing, addiction, and advanced diseases were left unchanged.
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm
We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.
There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.
Hi codeowners!
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
About The Pull Request
Dynamic 2021, among much other things, splits the threat level into two separate budgets, one for round start and one for midround/latejoin. You can read the design doc, plus methodology and charts here: https://hackmd.io/@tgstation/S1C4dYJkO.
To server owners: this is incompatible with current dynamic.json configurations. This is not just because some fields have different values now, but because the older values are not balanced towards this system.
Inidividual list of changes (as I remember them):
Threat level is now split into two separate budgets, one for round start and one for midround/latejoin.
In TESTING, you can now run dynamic simulations to see the roundstart picks.
antag_cap is now based on an equation rather than a fixed list of antags per indice--the old system is not scalable. You can now pass it either a number for a fixed constant, or a list with "denominator" and an optional "offset" to fit the equation ceil(x / denominator) + offset, with x being population.
Midround/latejoin timers are now vars on /datum/game_mode/dynamic itself, and thus can be configured by head admins per server.
Removes some older, as far as I can tell completely unused admin tools relating to dynamic.
autotraitor_cooldown is now properly respected from config, and is based on an exact time rather than on ticks (450 used to be 15 minutes, now it's just 15 MINUTES).
The rulesets dynamic chooses are now in a dynamic.json file in round logs. Relies on tgstation/tgstation13.org#64 to be public.
Adds more logging to the autotraitor ruleset for admins.
Midround/latejoin chance modifiers are now configurable.
Labelled "Do Not Merge", as the design doc outlines the specific playtesting schedule I would like to perform.
Note to self: Remove the custom MOTD before merge.
Why It's Good For The Game
(Copied from design doc)
Dynamic currently dumps as much threat as it can into round start threats. This means that rounds at ~50 threat can have an absurd amount of antagonists round start, while leaving very little threat for midround/latejoin antagonists. What inevitably happens is just one of those picked decides to murderbone, leading to the inevitable 20 minute shuttle call. Furthermore, once those antagonists are dead, Dynamic doesn’t have any threat left to spend on new antagonists that keep the round flowing, promoting the mentality of “antags dead, I’m bored, let’s leave”.
The proposed solution of Dynamic 2021 is to split threat level into two separate budgets, one for round start and one for midround/latejoin. This split, like threat level, will also be done on a lorentz curve–meaning that while most rounds will have them evenly split, there is still the possibility of chaotic high antagonist round start rounds, or the possibility of a midround onslaught.
About The Pull Request
This PR removes intents and replaces them with a combat mode. An explanation of what this means can be found below
Major changes:
Disarm and Grab intents have been removed.
Harm/Help is now combat mode, toggled by F or 4 by default
The context/verb/popup menu now only works when you do shift+right-click
Right click is now disarm, both in and out of combat mode.
Grabbing is now on ctrl-click.
If you're in combat mode, and are currently grabbing/pulling someone, and ctrl-click somewhere else, it will not release the grab (To prevent misclicks)
Minor interaction changes:
Right click to dissasemble tables, racks, filing cabinets (When holding the right tool to do so)
Left click to stunbaton, right click to harmbaton
Right click to tip cows
Right click to malpractice surgery
Right click to hold people at gunpoint (if youre holding a gun)
Why It's Good For The Game
Intents heavily cripple both the code and the UI design of interactions. While I understand that a lot of people will dislike this PR as they are used to intents, they are one of our weakest links in terms of explaining to players how to do specific things, and require a lot more keypresses to do compared to this.
As an example, martial arts can now be done without having to juggle 1 2 3 and 4 to switch intents quickly.
As some of you who saw the first combat mode PR, the context menu used to be disabled in combat mode. In this version it is instead on shift-right click ensuring that you can always use it in the same way.
In this version, combat mode also no longer prevents you from attacking with items when you would so before, as this was something that was commonly complained about.
The full intention of this shift in control scheme is that right click will become "secondary interaction" for items, which prevents some of the awkward juggling we have now with item modes etcetera.
Changelog
cl Qustinnus
add: Intents have been replaced with a combat mode. For more info find the PR here: #56601
/cl
* Reverts #56205
* Allow things without density to bypass checks
* The rest of the owl
* The rest of the owl
* Doc and tweak
* More feex
* RCD machine frame unit test
* I suck
* AAAAA
* Bad at unit tests
* Revert unit tests (for including in another PR)
* Fix windoor_assembly return logic
* Comment /mob/living/proc/PushAM logic
* Windoor assembley logic tweak
* Fix frame stacking
* Unit test
* Better wording from macros?
Link to the test explorer: https://marketplace.visualstudio.com/items?itemName=Donkie.vscode-tgstation-test-adapter
The test explorer adapter lets you compile and run the code in one click of a button, with no messing about with defines necessary
The extension supports reading test results from the unit test logs, but its shitty having to parse logs for that, so this PR also adds support for a somewhat standardized method of logging unit test results to a json file instead.