## About The Pull Request
If an event is not found in the list, it will be null, so the stack
trace when there is an invalid one in there will always return "Invalid
event attempting to be configured." AKA nothing useful to indicate which
event in the config is actually causing the failure.
Also stops stack trace from declaring 'invalid' config when they are
simply not loaded due to the current map.
It should be printing out [variable] instead.
Also removes a bunch of non existent events from the events.json and
fixes a few inconsistencies with the default weights.
## Why It's Good For The Game
Stack traces with useful information are good.
## Changelog
Nothing player-facing
As said in https://forums.tgstation13.org/viewtopic.php?t=38517 - Admins
don't want to touch the event multiplier configs because,
``for example changing the mult to 1.5 would make heart attack only roll
on 60+ pop``
and ends with;
``it would be better to make a pull request to the codebase and alter
the min_player var on the events that are issues``
So why not let ALL events be editable by admins?
This PR makes every single event possible to be edited, though the json
only comes with the non-wizard non-holiday ones (though they are totally
addable if admins want to put it in, I just didnt think we should make
it obvious it's possible so they DONT)
The config is off by default (no effect regardless since I have it the
same as code-side).
The multiplier config is rendered irrelevant by instead being able to
tweak the individual events to your liking, especially when one touch of
that causes certain events to be rendered never runnable.
This is (sorta) an admin request, and it also makes event rarities and
such an admin issue, therefore not our problem anymore (mostly), wahoo.
Get FUCKED, Grid Check!

🆑
config: Removed event time/weight multipliers, now all events vars are
editable in config.
/🆑
---------
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
## About The Pull Request
I heard you liked commas.
## Why It's Good For The Game
Trailing commas make everyone happy!
## Changelog
Nothing anyone will notice besides downstreams adding to these lists
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
/datum/controller/subsystem/atoms,
/datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
/datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.
## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.
## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
## About The Pull Request
This won't actually do anything on live, since those are all set to
UTC±0 currently
Pins logging and IC uses of time2text to UTC±0 instead of using the
system timezone (byond default)
Timezones not being set to utc0 caused issues before (and is again)
All timezones are now passed explicitly to make it more likely it's
cargo culted properly at least
Deletes worldtime2text cus it was gameTimestamp default args
## Why It's Good For The Game
Server timezone changes probably shouldn't affect logging, round times,
file hashes, IC time, when you caught fish, etc
## Changelog
🆑
refactor: Logging and IC timestamps will now always use UTC±0 and not be
affected by server system timezone changes
fix: Station and round times will not longer be incorrect if the system
timezone is not UTC±0
/🆑
---------
Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
## About The Pull Request
As said in https://forums.tgstation13.org/viewtopic.php?t=38517 - Admins
don't want to touch the event multiplier configs because,
``for example changing the mult to 1.5 would make heart attack only roll
on 60+ pop``
and ends with;
``it would be better to make a pull request to the codebase and alter
the min_player var on the events that are issues``
So why not let ALL events be editable by admins?
This PR makes every single event possible to be edited, though the json
only comes with the non-wizard non-holiday ones (though they are totally
addable if admins want to put it in, I just didnt think we should make
it obvious it's possible so they DONT)
The config is off by default (no effect regardless since I have it the
same as code-side).
## Why It's Good For The Game
The multiplier config is rendered irrelevant by instead being able to
tweak the individual events to your liking, especially when one touch of
that causes certain events to be rendered never runnable.
This is (sorta) an admin request, and it also makes event rarities and
such an admin issue, therefore not our problem anymore (mostly), wahoo.
Get FUCKED, Grid Check!

## Changelog
🆑
config: Removed event time/weight multipliers, now all events vars are
editable in config.
/🆑
---------
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
## About The Pull Request
I heard you liked commas.
## Why It's Good For The Game
Trailing commas make everyone happy!
## Changelog
Nothing anyone will notice besides downstreams adding to these lists
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
/datum/controller/subsystem/atoms,
/datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
/datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.
## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.
## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
## About The Pull Request
This won't actually do anything on live, since those are all set to
UTC±0 currently
Pins logging and IC uses of time2text to UTC±0 instead of using the
system timezone (byond default)
Timezones not being set to utc0 caused issues before (and is again)
All timezones are now passed explicitly to make it more likely it's
cargo culted properly at least
Deletes worldtime2text cus it was gameTimestamp default args
## Why It's Good For The Game
Server timezone changes probably shouldn't affect logging, round times,
file hashes, IC time, when you caught fish, etc
## Changelog
🆑
refactor: Logging and IC timestamps will now always use UTC±0 and not be
affected by server system timezone changes
fix: Station and round times will not longer be incorrect if the system
timezone is not UTC±0
/🆑
---------
Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
## About The Pull Request
Fixes several errors to spelling, grammar, and punctuation.
## Why It's Good For The Game
## Changelog
🆑
spellcheck: fixed a few typos
/🆑
## About The Pull Request
it's - conjunction of "it" and "is"
its - possessive form of "it"
grammar is hard, and there were a lot of places where "it's" was used
where it shouldn't have been. i went and painstakingly searched the
entire repository for these instances, spending a few hours on it. i
completely ignored the changelog archive, and i may have missed some
outliers. most player-facing ones should be corrected, though
## Why It's Good For The Game
proper grammar is good
## Changelog
🆑
spellcheck: Numerous instances of "it's" have been properly replaced
with "its"
/🆑
## About The Pull Request
it's - conjunction of "it" and "is"
its - possessive form of "it"
grammar is hard, and there were a lot of places where "it's" was used
where it shouldn't have been. i went and painstakingly searched the
entire repository for these instances, spending a few hours on it. i
completely ignored the changelog archive, and i may have missed some
outliers. most player-facing ones should be corrected, though
## Why It's Good For The Game
proper grammar is good
## Changelog
🆑
spellcheck: Numerous instances of "it's" have been properly replaced
with "its"
/🆑
## About The Pull Request
Random events can now be rerolled by admins, much like how they can
reroll dynamic rulesets. During the ten-second warning window, you can
choose "Something Else" to have a (randomly selected) different event
run in its stead. You still get the 10-second delay when this new one is
picked, meaning you can keep rerolling until you get something
interesting.
The option to just cancel a random event remains.
## Why It's Good For The Game
Cancelling a random event sets back the random event clock, meaning you
have to wait a few minutes for another one to roll. Now you can just
reroll dangerous events into something calmer (or y'know, calm events
into something more dangerous).
## Changelog
🆑 Rhials
admin: Admins can now reroll random events into something else.
/🆑
## About The Pull Request
Make events frequency configurable.
Fix runtime when no events were drafted to be picked from.
## Why It's Good For The Game
No runtimes good.
No need to change frequency in code.
🆑
fix: fix runtime when no events were drafted to be picked from
config: make events frequency configurable
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
## About The Pull Request
Make events frequency configurable.
Fix runtime when no events were drafted to be picked from.
## Why It's Good For The Game
No runtimes good.
No need to change frequency in code.
🆑
fix: fix runtime when no events were drafted to be picked from
config: make events frequency configurable
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
* Add compile option for compiling in `MAP_TEST` mode, which disables common annoyances when testing new maps (#81697)
## About The Pull Request
Adds `MAP_TEST` compile flag.
This compile flag blocks common things which make it difficult to test a
map.
Things this applies to:
- Rats no longer spawn.
- Rat spawning will (obviously) break up the powernet, which is
INCREDIBLY annoying when trying to test if all the rooms of the station
are wired correctly (or testing which rooms lose power first, etc)
- Light tubes no longer break on initialize.
- Random light breakages can easily cause mappers to accidentally over
light a room.
- Roundstart command report is not printed.
- Might be a personal preference, but it's kinda annoying to hear the
alert over and over again.
- Random events do not trigger.
- Some events such as gravity generator outage can trigger with 0
population.
- Random camera breakage event can cause over-placement of cameras.
- Other stuff tends to just get in the way.
- Station traits do not trigger.
- Probably the biggest annoyance. Many traits modify the map in some way
which disrupts testing.
- Roundstart landmarks don't self deletes.
- Allows mappers to use sdql to find them.
- Mapping verbs start enabled.
Obviously more things can be added if they come up.
* Add compile option for compiling in `MAP_TEST` mode, which disables common annoyances when testing new maps
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Adds `MAP_TEST` compile flag.
This compile flag blocks common things which make it difficult to test a
map.
Things this applies to:
- Rats no longer spawn.
- Rat spawning will (obviously) break up the powernet, which is
INCREDIBLY annoying when trying to test if all the rooms of the station
are wired correctly (or testing which rooms lose power first, etc)
- Light tubes no longer break on initialize.
- Random light breakages can easily cause mappers to accidentally over
light a room.
- Roundstart command report is not printed.
- Might be a personal preference, but it's kinda annoying to hear the
alert over and over again.
- Random events do not trigger.
- Some events such as gravity generator outage can trigger with 0
population.
- Random camera breakage event can cause over-placement of cameras.
- Other stuff tends to just get in the way.
- Station traits do not trigger.
- Probably the biggest annoyance. Many traits modify the map in some way
which disrupts testing.
- Roundstart landmarks don't self deletes.
- Allows mappers to use sdql to find them.
- Mapping verbs start enabled.
Obviously more things can be added if they come up.
## About The Pull Request
Alright first thing's first --
`frequency_lower = 3 minutes -> 2.5 minutes`
`frequency_upper = 10 minutes -> 7 minutes`
There's also some autodocing/unsinglenamevaring of the events subsystem,
and the event selection code has been moved to a pick_weight().
This should have no effect on summon events, since that sets the
frequencies manually when triggered.
## Why It's Good For The Game
The benign, fluffy events now heavily outweigh the truly destructive
events in the pool. Even situationally destructive ones like the
Supermatter Surge or Brand Intelligence provide players with a
meaningful diversion to keep themselves occupied with.
Having more things going on, and more for players to do, is a good
thing. Reducing the potentially lengthy delay between random events
should accomplish this without increasing the amount of chaos between
rounds.
Also, these values were changed 8 years ago, under the reasoning that
"there are more random events now". We can safely say that there are
even MORE random events now. I know changing something because it was
changed in the past isn't a valid reason, but it's what set me down this
road in the first place.
As a reminder, ghost antag events are handled through dynamic (unless
dynamic is out of threat), meaning this won't seriously affect how
frequently you see antags.
These values are, of course, subject to change in response to feedback,
discussion, and maintainers yelling at me.
## Changelog
🆑 Rhials
balance: Random event frequency has been adjusted to fire events more
often.
code: The event subsystem has been prettied up with comments and longer
variable names.
/🆑
## About The Pull Request
Most calls of runEvent() now provide a cause that is read out to
deadchat. announce_deadchat() has been slightly adjusted to accommodate
this.
Previously, everything that wasn't a truly random event would broadcast
with the same generic "XYZ has just been triggered!" message. Now, you
get a little bit more detail as to why/what triggered the event.
Some helpers in the __HELPERS/events.dm file have been made, for forcing
events normally/async/after a delay (using an addtimer). This also moves
a lot (but not all) instances of events being forced to these helpers.
Some samples:

Traitors using uplink viruses to turn off the power/comms.

Beer nuke!

For when a traitor takes an Space Dragon final objective, which summons
a carp migration event.

Wizard ritual events!

Even this one!
This also changes runEvent() to run_event(), because I figured I'd be
touching every single instance of the proc anyways.
## Why It's Good For The Game
Better feedback, less confusion amongst deadchat's constituents.
Some of them may be a bit self-explanatory, but in some cases
(especially the apocalypse rune) it's beneficial to know that an admin
isn't the one behind it.
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
🆑 Rhials
qol: Deadchat now gets more juicy details on what has triggered a
non-randomly occurring random event.
code: There are now helpers for forcing events in a variety of ways.
More events! More events!!!!!!!
/🆑
## About The Pull Request
While I was trying to improve changeling meteor spawning on Icebox I
noticed that several other meteor-like events don't seem to be blocked
on Icebox either even though they don't do anything.
I added a new capability to events which can prevent them being loaded
under certain map conditions (specifically: whether the map is in space
or not). Currently there's no events which _only_ run on a planet but,
now someone could add one I guess?
Now all of the events which spawn meteors are filtered out on icebox and
you can't absent-mindedly try to trigger them.

Also a couple of dynamic options had this applied too, chiefly ones
which expect you to be able to fly a space ship to the space station.
## Why It's Good For The Game
These events shouldn't run on Icebox (or soon, Chilled) because they
don't do anything there.
AFAICT Meteors were getting as far as trying to spawn, then would retry
trying to find space tiles which didn't exist until they failed 10
times, then give up. Once per every meteor it tried to spawn. Gross.
## Changelog
🆑
fix: Meteors can't be triggered automatically or manually on Icebox,
where they do nothing.
fix: Hacking a comms console as a traitor won't try to summon meteors or
pirates to Icebox, where they do nothing.
/🆑
* Fixes halloween races.
- Fixes a race condition involve checking for holidays befores SSevents is instantiated. Now, holiday checking is done through a helper, which will ensure the holidays list is created and filled before checked.
About The Pull Request
kép
This PR does the following:
Force event menu uses tgUI.
Arranged events into categories, and added a little description to each. The descriptions appear as tooltips when you hover over the Trigger button.
Rewrote how "Announce to crew?" works. It no longer pops up a panel after the event has been already announced. Instead, the admins select it via a checkbox, and the result is passed through an optional argument.
announceChance's comment is tweaked a bit to reflect how it actually works at the moment.
Moved rpgtitles to wizard events, where it belongs.
Fake Virus and Electric Storms show up to observers, as I believe they are not as common as Space Dust or Camera Failure, and should be cancelable.
Potential issues:
This only solves half of #68408, I don't think admin triggering having a timer and a cancel button is a big issue, as it allows other admins to overrule you if needed, but if i is, I will try to fix it within this PR.
Fixes#68408. Events now spawn immediately, and the the announceChance is overwritten before it begins.
My choices for categories and descriptions might not be the best, feedback would be appreciated.
Why It's Good For The Game
The old spawn menu was completely unorganized, and you could only search using the browser search tool. I believe a built in search bar helps with this issue a bit. I also believe that organizing the events into categories, and adding descriptions will help with newer admins who might not be familiar with all events.
Changelog
cl
refactor: The Force Event UI has been refactored
refactor: Events now have categories and descriptions
refactor: Admin triggered events happen immediately
balance: Fake Virus and Electric Storms are shown to admins, making them cancelable
/cl
* Beep beep gamemode removal coming through
* More cleaning
* More cleaning
* Clean up station_was_nuked
* Station nuke source
* Remove name
* More unused functions
* Remove antag rep, which was unused in dynamic
* Remove more antag rep stuff, which was UNUSED IN DYNAMIC
* Station goals outside of mode
* Remove setup_done
* Remove player lists
* Move some older procs
* Fix simulations
* Attempt to fix this stupid case sensitive bullshit
* Revert "Attempt to fix this stupid case sensitive bullshit"
This reverts commit 8693c02d67602543d7d4b92130a7a32cd973e5bf.
* ???
* Delete icons/Testing directory
* Move station_goals global definition
* Adds timezone support for regional holidays
Also adds timezones to Waitangi Day, ANZAC Day, US Independence Day and Bastille Day
* Makes holidays span all timezones by default
Changes April Fools, Halloween and Christmas to be the correct dates instead of a range, using three timezones to cover the correct range instead
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
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>
* Fix Hanukkah (again) and refactor Moth Week and Beer Day (#55532)
* Fix Hanukkah (again) and refactor Moth Week and Beer Day
* Remove unnecessary changes
* Fix Hanukkah (again) and refactor Moth Week and Beer Day
Co-authored-by: Jack LeCroy <3073035+jacklecroy@users.noreply.github.com>