-
-
Notifications
You must be signed in to change notification settings - Fork 682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dynamic lategame & Midround simulations #9858
Conversation
Looking more at the json data, it might honestly be best to lower the endgame time point a little bit, since at 75 minute it will disable long running antags from spawning just before the shuttle arrives and it often takes a long amount of time to actually activate its rulesets after that point passes. |
I could also make the high impact ruleset flag get disabled in the lategame, since if you survive 1 high impact ruleset than another one can probably be reasonably fired but I'll only trial without that for now. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lategame executions should have special displays on the roundend report showing that they ignore threat and were executed past the lategame time.
@@ -40,20 +40,55 @@ | |||
initialize_gamemode(config.forced_threat_level, config.roundstart_players) | |||
create_candidates(config.roundstart_players) | |||
gamemode.pre_setup() | |||
gamemode.simulated = TRUE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rather than doing this just make it a constructor argument to the gamemode
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Gamemodes are instantiated elsewhere so I don't want to do that since otherwise it would only make sense to add the argument to all gamemodes. Technically it would work because this is DM and DM doesn't care about typing things correctly but it would get a bit ugly
only_ruleset_executed = TRUE | ||
executed_rules += rule | ||
if (rule.persistent) | ||
current_rules += rule |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is this all about?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we are simulating the gamemode, then we want to set everything associated to spawning a gamemode without actually executing it. This will make the rule as being executed and do everything that normal spawning does but won't trigger pre execute or eecute
This seems kind of horrible for lowpop since it will just spawn threats that no one has the security to deal with? Does this ignore sec requirements? Even then we lowered them a lot with the expectation that the threat curve will reduce lowpop spam and avoid high impact stuff from happening - the threat requirement of rules at lowpop are a LOT higher than at medium-high pop, so disabling threat requirements means they can just spawn regardless. |
It only ignores threat requirements and the antags selected should still be fine at lowpop as this is after 100 mins and intends to promote a shuttle call. On low-pops it will pick some of the less impactful events due to pop requirements, but it should still cause things to start happening to promote shuttle calls. I did run a 30 pop simulation and the things that were spawned seemed to be okay. |
Co-authored-by: itsmeow <[email protected]>
As an alternative to pumping out antags at the rate of the (threat level / 7) / 100, I could also make it instantly spawn an end-game threat on the mark and then continue to spawn end-game threats when the last one dies, so you won't get loads at once but if the station handles them then the next will come which kind of forces the station to eventually reach a state of shuttle call. Low pop rounds will probably always end up calling after the first threat. |
Lowpop should not use this system at all as pop requirements are not flat but based on threat. At 0-24pop most high impact antags do not trigger only due to threat requirements being high, as threat requirement scales with pop. Lowpop also just doesn't flow the same. It isn't supposed to force end at the 1hr mark. People use the shuttle vote, which is quite effective at gathering sentiment of if the round is too long. There is much to be said about improving lowpop antag variety but this isn't supposed to do that. I'm also not a huge fan of this concept overall but I'd like to see it tested for medium to high pop |
As much as i'd personaly prefer if round go on 2 hours ish or even a bit longer, its true that thats not realy feasible with things are. My only concern would be if its set to only run these "late game" midrounds, it might get a bit repetitive/predictable. also, this is masively out of scope, but it'd be realy cool if dynameme and random events were the same system or atleast interlinked or something (if they arent already, but i assume they're not). Rounds can be affected by non-antag random events just as well as antags, and the station doesnt need a blob to spawn when theres already meteors on the way, and the other way around. (Atleast most of the time, its always neat to have a smal but nonzero chanche) |
Yea, the flag is only for the point after dynamic runs out of threat for midround. These are specifically for threats which do not need preperation and are generally chaotic enough to at least push a shuttle call to happen.
The pop requirements are based on threat but are still respected. The threat will remain 30 or whatever once we hit the end-game and it will still respect the pop requirements that are setup with 30 threat. The only checks it skips is the check to see if the threat remaining is less than the cost. In addition to this, all of these rulesets work at lowpop except for blob and xenomorph infestation which do use non-dynamic minimum_player limits. This does actually raise an issue that it will spawn a wizard every single time and can't spawn anything else. I'll probably have to add an additional variable that gives a minimum pop to late game spawns so that we can have the other ones spawn on low-pop too since they are capable of working at lowpop and we still want to drive longer rounds to a close. The lowpop closure end will be at 1 hour and 40 minutes which is acceptable, as even at low-pops we don't really want to extend past 2 hour rounds since they are just exhausting and end up draining pop even further. Another problem this could raise in low-pops is that these won't be able to run anyway due to the requiring enemy crewmembers however if there is no sec I think its fair to not run them. I'll have to think about this and look at some data to see what's the best thing to do about lowpop. Dynamic in general doesn't allow a lot to happen at lower pops looking at it now and almost everything has a pretty high minimum pop presumably since we don't want these happening early in the round. Perhaps rather than a population limit per threat, it would be better to have a minimum time of occuring depending on pop so that bigger threats that can still work at lower pops will be able to occur, just at a later time. |
Has not been followed up on in over a month
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Requested changes have been fulfilled except for those with no follow up. I'm not letting a stale review hold this in place.
Seems like a good PR to prevent rounds from grinding to a complete halt, and ensures quiet rounds still end at a reasonable time.
About The Pull Request
The rulesets that are considered late-game are ones that do not require a significant amount of prep time (we need to work with the assumption that the shuttle will come any minute) and that will generally cause enough chaos to result in the shuttle call coming closer. These rulesets are:
Note that once we reach the game end point, the time between threats will still remain the same as before so lower threat rounds will have longer gaps between lategame threats spawning, however will still ignore the cost of the ruleset.
In the future I will trial lowering this value to 75 minutes and making threat more consistent if we continue to have issues with exhausting rounds.
Why It's Good For The Game
Dynamic has an upper-bound on when it will consume all of its threat and after 100 minutes should stop spawning antags. This behaviour works for rounds that never exceed 90 minutes, however we are more commonly having rounds that go on for a really long amount of time which often end up in really large player drops. This will disengage threat once we reach the end game (100 minute mark) so that more chaotic threats will begin spawning even after all of the threat has been consumed. For most rounds we should either see:
I have toyed around with the idea of decreasing the lategame dynamic time to 70 minutes as there will always be a delay and that will bring a wrap to the usual round in around 90-120 minutes, although I haven't changed it in this PR.
Of course not all long rounds are boring, however players still get exhausted from them and an overly long round (2.5 hours or more) can be deterimental especially at high-pop hours, as a large chunk of players leaving often results in less players joining.
Testing Photographs and Procedure
Note that after 60000 seconds, only certain rulesets can run
Json
Changelog
🆑
tweak: Tweaks dynamic's endgame, making only specific threats capable of spawning after the midround spawn time limit has passed (100 minute mark) and making dynamic ignore the cost of threats after that point has passed.
/:cl: