This change was mostly done in an attempt to create Acedia's server API
faster and, consecuently, load required `Feature`s faster as well. As a
byproduct - Acedia launcer's core settings (inside
`[AcediaLauncher.Packages]` serction) were moved to a separate `Object`,
accessible from all Acedia classes. This is also the cleaner way to do
it.
Before simply not filling-in game length setting resulted in it being
treated as a custom game length (custom game setting). Not it defaults
to a most common used game length - long game with 10 waves. Every other
unrecognized value is still being treated as a custom game.
Previously game dissivulty was switching through a crutch, when we
could've just used key-value option inside the server URL. That crutch
was repurposed to switch game length that is actually requires it.
This variable didn't serve any really useful purpose, but has led to
game crashes. While adding proper cleanup could also solve these
crashes, there is no real point to keeping it at all.
NOTE: It's only purpose was to make sure only one instance of
corresponding mutator exists, but duplicates shouldn't happen in the
first place.
Add ability to auto-launch and obtain instance of
a `Service` with a single command.
Add `Service`-specific events `Launch()` / `ShutDown()`
Add ability to auto-register required listeners on launch.
Events might rely on a particular `Service` to generate them,
this patch allows them to auto-launch/shutdown a service, depending on
whether anybody is listening to it's events.