Files
MrMelbert 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"
/🆑
2025-10-18 19:06:29 +02:00

62 lines
2.9 KiB
Plaintext

// Config values, don't change these randomly
/// Configuring "roundstart" type rulesets
#define ROUNDSTART "roundstart"
/// Configuring "light midround" type rulesets
#define LIGHT_MIDROUND "light_midround"
/// Configuring "heavy midround" type rulesets
#define HEAVY_MIDROUND "heavy_midround"
/// Configuring "latejoin" type rulesets
#define LATEJOIN "latejoin"
/// Lower end for how many of a ruleset type can be selected
#define LOW_END "low"
/// Upper end for how many of a ruleset type can be selected
#define HIGH_END "high"
/// Population threshold for ruleset types - below this, only a quarter of the low to high end is used
#define HALF_RANGE_POP_THRESHOLD "half_range_pop_threshold"
/// Population threshold for ruleset types - below this, only a half of the low to high end is used
#define FULL_RANGE_POP_THRESHOLD "full_range_pop_threshold"
/// Round time threshold for which a ruleset type will be selected
#define TIME_THRESHOLD "time_threshold"
/// Lower end for cooldown duration for a ruleset type
#define EXECUTION_COOLDOWN_LOW "execution_cooldown_low"
/// Upper end for cooldown duration for a ruleset type
#define EXECUTION_COOLDOWN_HIGH "execution_cooldown_high"
// Tiers, don't change these randomly
/// Tier 0, no antags at all
#define DYNAMIC_TIER_GREEN 0
/// Tier 1, low amount of antags
#define DYNAMIC_TIER_LOW 1
/// Tier 2, medium amount of antags
#define DYNAMIC_TIER_LOWMEDIUM 2
/// Tier 3, high amount of antags
#define DYNAMIC_TIER_MEDIUMHIGH 3
/// Tier 4, maximum amount of antags
#define DYNAMIC_TIER_HIGH 4
// Ruleset flags
/// Ruleset denotes that it involves an outside force spawning in to attack the station
#define RULESET_INVADER (1<<0)
/// Multiple high impact rulesets cannot be selected unless we're at the highest tier
#define RULESET_HIGH_IMPACT (1<<1)
/// Ruleset can be configured by admins (implements /proc/configure_ruleset)
/// Only implemented for midrounds currently
#define RULESET_ADMIN_CONFIGURABLE (1<<2)
/// Applied to rulesets which intentionally share a pref_flag with another rulesets
/// Denotes multiple rulesets which abide by the same preference, but are each a variation of some base ruleset
#define RULESET_VARIATION (1<<3)
/// Href for cancelling midround rulesets before execution
#define MIDROUND_CANCEL_HREF(...) "(<a href='byond://?src=[REF(src)];admin_cancel_midround=[REF(picked_ruleset)]'>CANCEL</a>)"
/// Href for rerolling midround rulesets before execution
#define MIDROUND_REROLL_HREF(rulesets) "[length(rulesets) \
? "(<a href='byond://?src=[REF(src)];admin_reroll=[REF(picked_ruleset)]'>SOMETHING ELSE</a>)" \
: "([span_tooltip("There are no more rulesets to pick from!", "NOTHING ELSE")])"\
]"
#define RULESET_CONFIG_CANCEL "Cancel"
/// Used to easily get a config entry for a dynamic ruleset or tier
#define GET_DYNAMIC_CONFIG(some_typepath, var_name) SSdynamic.get_config_value(some_typepath, NAMEOF(some_typepath, ##var_name), some_typepath::##var_name)