Files
Bubberstation/code/__DEFINES/~~bubber_defines/storyteller_defines.dm
Waterpig edaf2c36dc [Merge-Ready] Storyteller 2.0 (#2064)
## About The Pull Request

### New stuff

Introduces lone infiltrator back.

Introduces midround malf

### Removals

Predictable chaos has been removed as its system of trying for antags
more often in smaller numbers is now part of every storyteller. Hooray
midrounds!

### Event adjustments

Meteors can no longer repeat-run. For some reason the default tg value
for them was 3 max occurences.

### Track changes

Tracks are now simpler to manage as they fill by a consistent value of
1, instead being of variable lengths dependent on the storyteller. These
still need adjustments depending on how the testing rounds go

The Roleset track has been changed to the Crewset track and its rollable
events split between it and ghostsed
The unused Objectives track has been killed and changed for the Ghostset
track, containing ghost rolls

This means that ghost rolls should be a guarantee, even if just 1 rolls
during a round. This will probably need more adjustment and tweaking.
Also had lone infiltrator reintroduced for this reason.

### Votes

Votes no longer prevent the last storyteller voted, but the last type of
teller voted. This means that going Fragile>Chill>Fragile is no longer
possible, and rounds should alternate between the low intensity and high
intensity tellers.

Default Andy is always available
Bomb, Clown, Gamer are of the high intensity category
Fragile, Chill, Extended are of the low intensity category

### Fixes

Fixes track points sometimes going into the negatives, makes roundstart
point distribution more random. Some other minor stuff is also fixed.
The flaky error may have been fixed by this but I haven't tested

Fixes voidwalker spawning wrongly on planetary maps

## Why It's Good For The Game

Should make antag rolling less round start ready dependent, also takes
what predictable chaos does and applies it to every teller because the
concept of trying to roll antags super often is actually pretty fucken
good.

It also makes the system less convoluted and fixes some bugs

## Proof Of Testing

Needs TM to iron out track points once I'm done making them.

## Changelog

🆑
add: Added Lone infiltrator ghost midround
add: Added Malf AI midround
del: Removes predictable chaos as all tellers now use its main gimmick
as a baseline
qol: Storyteller votes now prevent a constant voting streak of the same
type of tellers
balance: All storytellers now roll antags more often, but in smaller
numbers per roll
balance: Clown storyteller no longer cares about event weights and just
does whatever rng decides
balance: Meteors can no longer run repeatedly in a single round
balance: Makes ghost roles actually roll somewhat frequently
fix: Fixed a few bugs with storytellers, namely the tracks sometimes
going into negatives, and voidwalker running on planet maps
refactor: Refactored how storytellers handle tracks to be easier to code
with
/🆑

---------

Co-authored-by: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com>
2024-09-10 23:39:21 +00:00

99 lines
3.8 KiB
Plaintext

//Could be bitflags, but that would require a good amount of translations, which eh, either way works for me
/// When the event is combat oriented (spawning monsters, inherently hostile antags)
#define TAG_COMBAT "combat"
/// When the event is spooky (broken lights, some antags)
#define TAG_SPOOKY "spooky"
/// When the event is destructive in a decent capacity (meteors, blob)
#define TAG_DESTRUCTIVE "destructive"
/// When the event impacts most of the crewmembers in some capacity (comms blackout)
#define TAG_COMMUNAL "communal"
/// When the event targets a person for something (appendix, heart attack)
#define TAG_TARGETED "targeted"
/// When the event is positive and helps the crew, in some capacity (Shuttle Loan, Supply Pod)
#define TAG_POSITIVE "positive"
/// When one of the crewmembers becomes an antagonist
#define TAG_CREW_ANTAG "crew_antag"
/// When the antagonist event is focused around team cooperation.
#define TAG_TEAM_ANTAG "team_antag"
/// When one of the non-crewmember players becomes an antagonist
#define TAG_OUTSIDER_ANTAG "away_antag"
/// When the event is considered chaotic by a completely non-biased coder.
#define TAG_CHAOTIC "chaotic"
/// When the event impacts the overmap
#define TAG_OVERMAP "overmap"
/// When the event requires the station to be in space (meteors, carp)
#define TAG_SPACE "space"
/// When the event requires the station to be on planetary.
#define TAG_PLANETARY "planetary"
#define EVENT_TRACK_MUNDANE "Mundane"
#define EVENT_TRACK_MODERATE "Moderate"
#define EVENT_TRACK_MAJOR "Major"
#define EVENT_TRACK_CREWSET "Crewset"
#define EVENT_TRACK_GHOSTSET "Ghostset"
#define ALL_EVENTS "All"
#define UNCATEGORIZED_EVENTS "Uncategorized"
#define STORYTELLER_WAIT_TIME 20 SECONDS
#define EVENT_POINT_GAINED_PER_SECOND 0.05
#define TRACK_FAIL_POINT_PENALTY_MULTIPLIER 0.5
#define GAMEMODE_PANEL_MAIN "Main"
#define GAMEMODE_PANEL_VARIABLES "Variables"
/// Reused for multipliers of the thresholds
#define MUNDANE_POINT_THRESHOLD 1
#define MODERATE_POINT_THRESHOLD 1
#define MAJOR_POINT_THRESHOLD 1
#define CREWSET_POINT_THRESHOLD 1
#define GHOSTSET_POINT_THRESHOLD 1
#define MUNDANE_MIN_POP 0
#define MODERATE_MIN_POP 0
#define MAJOR_MIN_POP 20
#define CREWSET_MIN_POP 0
#define GHOSTSET_MIN_POP 0
/// Defines for how much pop do we need to stop applying a pop scalling penalty to event frequency.
#define MUNDANE_POP_SCALE_THRESHOLD 25
#define MODERATE_POP_SCALE_THRESHOLD 32
#define MAJOR_POP_SCALE_THRESHOLD 45
#define CREWSET_POP_SCALE_THRESHOLD 45
#define GHOSTSET_POP_SCALE_THRESHOLD 45
/// The maximum penalty coming from pop scalling, when we're at the most minimum point, easing into 0 as we reach the SCALE_THRESHOLD. This is treated as a percentage.
#define MUNDANE_POP_SCALE_PENALTY 35
#define MODERATE_POP_SCALE_PENALTY 35
#define MAJOR_POP_SCALE_PENALTY 35
#define CREWSET_POP_SCALE_PENALTY 35
#define GHOSTSET_POP_SCALE_PENALTY 35
#define STORYTELLER_VOTE "storyteller"
#define EVENT_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_CREWSET, EVENT_TRACK_GHOSTSET)
#define EVENT_PANEL_TRACKS list(EVENT_TRACK_MUNDANE, EVENT_TRACK_MODERATE, EVENT_TRACK_MAJOR, EVENT_TRACK_CREWSET, EVENT_TRACK_GHOSTSET, UNCATEGORIZED_EVENTS, ALL_EVENTS)
/// Defines for the antag cap to prevent midround injections.
#define ANTAG_CAP_FLAT 1
#define ANTAG_CAP_DENOMINATOR 9
///Below are defines for the percentage fill that the tracks should start on. +- 50% of the value will be added
#define ROUNDSTART_MUNDANE_BASE 20
#define ROUNDSTART_MODERATE_BASE 35
#define ROUNDSTART_MAJOR_BASE 40
#define ROUNDSTART_CREWSET_BASE 60
#define ROUNDSTART_GHOSTSET_BASE 40
/// Storyteller types below, basically prevents several intense teller rounds in a row
#define STORYTELLER_TYPE_ALWAYS_AVAILABLE 0
#define STORYTELLER_TYPE_CALM 1
#define STORYTELLER_TYPE_INTENSE 2