mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-15 10:04:30 +01:00
mayfools
7 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
8b8bcfd674 |
Adds two heavy midround rulesets, mass traitors and mass changelings (#93447)
## About The Pull Request - [ ] I tested this pr Adds "Midround Mass Traitors" and "Midround Mass Changelings" heavy rulesets Midround Mass Traitors will turn a number of the crew into sleeper agents Midround Mass Lings will spawn a number of changeling meteors BY DEFAULT: - Traitors will spawn 2-4 sleeper agents - Lings will spawn 2-3 changeling meteors - They won't run without >=2 candidates - They have no config blacklist (so the HoP can roll mass midround traitor, despite not being able to roll normal midround traitor. However default blacklisted roles like security officers are still blocked) - They're weighted impossible on tier 0, same weight as most midrounds on tier 1, and fairly high on tiers 2 and 3 - They're repeatable but very unlikely to repeat - Significantly higher min pop brackets than their solo counter part ## Why It's Good For The Game Adds more options for lategame antags than big midrounds ## Changelog 🆑 Melbert add: Two new heavy dynamic rulesets: "Midround Mass Traitors" and "Midround Mass Changelings" /🆑 |
||
|
|
4c277dc572 |
Dynamic Rework (#91290)
## About The Pull Request Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic from the ground-up - Dynamic configuration is now vastly streamlined, making it far far far easier to understand and edit - Threat is gone entirely; round chaos is now determined by dynamic tiers - There's 5 dynamic tiers, 0 to 4. - 0 is a pure greenshift. - Tiers are just picked via weight - "16% chance of getting a high chaos round". - Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be selected". - Tier determines how much of every ruleset is picked. "Tier 4 (High Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3 latejoins". - The number of rulesets picked depends on how many people are in the server - this is also configurable[2]. As an example, a tier that demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and will not spawn 2 rulesets if population <= 25. - Tiers also determine time before light, heavy, and latejoin rulesets are picked, as well as the cooldown range between spawns. More chaotic tiers may send midrounds sooner or wait less time between sending them. - On the ruleset side of things, "requirements", "scaling", and "enemies" is gone. - You can configure a ruleset's min pop and weight flat, or per tier. - For example a ruleset like Obsession is weighted higher for tiers 1-2 and lower for tiers 3-4. - Rather than scaling up, roundstart rulesets can just be selected multiple times. - Rulesets also have `min_antag_cap` and `max_antag_cap`. `min_antag_cap` determines how many candidates are needed for it to run, and `max_antag_cap` determines how many candidates are selected. - Rulesets attempt to run every 2.5 minutes. [3] - Light rulesets will ALWAYS be picked before heavy rulesets. [4] - Light injection chance is no longer 100%, heavy injection chance formula has been simplified. - Chance simply scales based on number of dead players / total number off players, with a flag 50% chance if no antags exist. [5] [1] This does not guarantee you will actually GET 3-4 roundstart rulesets. If a roundstart ruleset is picked, and it ends up being unable to execute (such as "not enough candidates", that slot is effectively a wash.) This might be revisited. [2] Currently, this is a hard limit - below X pop, you WILL get a quarter or a half of the rulesets. This might be revisited to just be weighted - you are just MORE LIKELY to get a quarter or a half. [3] Little worried about accidentally frontloading everything so we'll see about this [4] This may be revisited but in most contexts it seems sensible. [5] This may also be revisited, I'm not 100% sure what the best / most simple way to tackle midround chances is. Other implementation details - The process of making rulesets has been streamlined as well. Many rulesets only amount to a definition and `assign_role`. - Dynamic.json -> Dynamic.toml - Dynamic event hijacked was ripped out entirely. - Most midround antag random events are now dynamic rulesets. Fugitives, Morphs, Slaughter Demons, etc. - The 1 weight slaughter demon event is gone. RIP in peace. - There is now a hidden midround event that simply adds +1 latejoin, +1 light, or +1 heavy ruleset. - `mind.special_role` is dead. Minds have a lazylist of special roles now but it's essentially only used for traitor panel. - Revs refactored almost entirely. Revs can now exist without a dynamic ruleset. - Cult refactored a tiny bit. - Antag datums cleaned up. - Pre round setup is less centralized on Dynamic. - Admins have a whole panel for interfacing with dynamic. It's pretty slapdash I'm sure someone could make a nicer looking one.   - Maybe some other things. ## Why It's Good For The Game See readme for more info. Will you see a massive change in how rounds play out? My hunch says rounds will spawn less rulesets on average, but it's ultimately to how it's configured ## Changelog 🆑 Melbert refactor: Dynamic rewritten entirely, report any strange rounds config: Dynamic config reworked, it's now a TOML file refactor: Refactored antag roles somewhat, report any oddities refactor: Refactored Revolution entirely, report any oddities del: Deleted most midround events that spawn antags - they use dynamic rulesets now add: Dynamic rulesets can now be false alarms add: Adds a random event that gives dynamic the ability to run another ruleset later admin: Adds a panel for messing around with dynamic admin: Adds a panel for chance for every dynamic ruleset to be selected admin: You can spawn revs without using dynamic now fix: Nuke team leaders get their fun title back /🆑 |
||
|
|
8c1366933d | Fixes a fair few execute() errors in dynamic midround rulesets (#69130) | ||
|
|
09a6cdb4e0 |
Dynamic 2022, Part 1 - Redesigning midround rolls (Midrounds happen far more frequently now, and scale their power over time) (#65997)
Implements the new midround roll changes. 1. Split midround rulesets into heavy/light impact First, midround rulesets will be split into light/heavy impact categories. For example, sleeper agent and midround thief would be classified as light impact, while blob/ninja would be classified as heavy impact. This split will then be used to spawn lighter impact antagonists earlier into the round, and higher impact antagonists later into the round. Midrounds before 25 minutes = 100% light impact / 0% heavy impact Midrounds from 25-60 minutes = Varying chances, increasing in favor of heavy impact after enough time Midrounds from 60+ minutes = 0% light impact / 100% heavy impact Low impact threat rulesets are guaranteed to roll if there is enough threat. High impact threat rulesets will carry the same % chance as they do now. If a heavy impact threat ruleset cannot be rolled, but there is enough threat, a light impact threat ruleset will roll in its place. In the future, this can potentially be changed into not spawning any ruleset if the station is deemed extremely hostile, or even be tweaked into spawning protagonists like ERTs. Alongside this, rulesets should be able to determine their minimum time required. For example, nuclear assault has terrible numbers--it's very high cost, and very low weight, which are basically the only variables it can configure. In Dynamic 2022, it should be able to have low cost, still low weight (though maybe nto as much), while only being rollable after 70 minutes or so. 2. Midround antagonists now roll as intervals, determined by midround threat In order to make sure 50 midround threat spawns more antagonists than 10 midround threat, the intervals at which midround threats are spawned will change from 15-45 minutes to increments determined by midround threat. Larger midround threat = more, close intervals, smaller midround threat = less, farther intervals. Any threat not spent on midrounds will still be carried into latejoins, which as before will still consume midround threat, and are unchanged by this document. |
||
|
|
bca463316b |
Makes integration test results be in color and have annotations (#66649)
About The Pull Request
Separated compiling the integration tests and running them as separate steps for organization purposes.
Added a TEST_ASSERT_NULL(value, reason) and TEST_ASSERT_NOTNULL(value, reason) because those are conceptually simple tests.
Makes the PASS and FAIL prefixes in the integration test log be green and red for better readability.
Failure reasons now display the file and line number.
In order to achieve this, direct calls to Fail() are now wrapped in a macro, TEST_FAIL(), as Fail() itself needs preprocessor stuff passed to it.
In the midst of updating it, I noticed multiple cases of tests directly calling Fail() and returning when they should have used a better macro, so those were updated. There was at least one case where it appeared that the code assumed that the test ended at Fail(), but made no attempt to do so, such as with the RCD test.
Feel free to double check all of the changed unit tests in case I made a functional behavior change, but they currently pass.
To take advantage of the previous change, failures are now marked as annotations. Note that outside of github, this creates an ugly-looking line but the primary environment is as a github action.
Examples with intentionally botched unit test:
image
image
image
Why It's Good For The Game
Makes inspecting failed unit tests significantly easier.
Changelog
N/A
|
||
|
|
5a4c87a9fc |
tgui Preferences Menu + total rewrite of the preferences backend (#61313)
About The Pull Request Rewrites the entire preferences menu in tgui. Rewrites the entire backend to be built upon datumized preferences, rather than constant additions to the preferences base datum. Splits game preferences into its own window. Antagonists are now split into their individual rulesets. You can now be a roundstart heretic without signing up for latejoin heretic, as an example. This iteration matches parity, and provides very little new functionality, but adding anything new will be much easier. Fixes #60823 Fixes #28907 Fixes #44887 Fixes #59912 Fixes #58458 Fixes #59181 Major TODOs Quirk icons, from @Fikou (with some slight adjustments from me) Lore text, from @EOBGames (4/6, need moths and then ethereal lore from @AMonkeyThatCodes) Heavy documentation on how one would add new preferences, species, jobs, etc A lot of specialized testing so that people's real data don't get corrupted Changelog cl Mothblocks, Floyd on lots of the design refactor: The preferences menu has been completely rewritten in tgui. refactor: The "Stop Sounds" verb has been moved to OOC. /cl |
||
|
|
de442458ba |
Dynamic 2021 (#56221)
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. |