UnrealScript library and basis for all Acedia Framework mods
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
4.5 KiB

/**
* This object is meant purely as a dummy class to load config values about
* side effects in AcediaCore. Class name is chosen to make config more
* readable.
* Copyright 2022 Anton Tarasenko
*------------------------------------------------------------------------------
* This file is part of Acedia.
*
* Acedia is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3 of the License, or
* (at your option) any later version.
*
* Acedia is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY * without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Acedia. If not, see <https://www.gnu.org/licenses/>.
*/
class SideEffects extends AcediaObject
dependson(BroadcastAPI)
abstract
config(AcediaSystem);
/**
* Acedia requires adding its own `GameRules` to listen to many different
* game events.
* It's normal for a mod to add its own game rules: game rules are
* implemented in such a way that they form a linked list and, after
* first (root) rules object receives a message it tells about said message to
* the next rules object, which does the same, propagating messages through
* the whole list.
* This is the least offensive side effect of AcediaCore and there should
* be no reason to prevents its `GameRules` from being added.
*/
var public const config bool allowAddingGameRules;
/**
* Unfortunately, thanks to the TWI's code, there's no way to catch events
* of when certain kinds of damage are dealt: from welder, bloat's bile and
* siren's scream. At least not without something drastic, like replacing game
* type class.
* As a workaround, Acedia can optionally replace bloat and siren damage
* type to at least catch damage dealt by zeds (as being dealt welder damage is
* pretty rare and insignificant). This change has several unfortunate
* side-effects:
* 1. Potentially breaking mods that are looking for `DamTypeVomit` and
* `SirenScreamDamage` damage types specifically. Fixing this issue
* would require these mods to either also try and catch Acedia's
* replacements `AcediaCore.Dummy_DamTypeVomit` and
* `AcediaCore.Dummy_SirenScreamDamage` or to catch any child classes
* of `DamTypeVomit` and `SirenScreamDamage` (as Acedia's replacements
* are also their child classes).
* 2. Breaking some achievements that rely on
* `KFSteamStatsAndAchievements`'s `KilledEnemyWithBloatAcid()` method
* being called. This is mostly dealt with by Acedia calling it
* manually. However it relies on killed pawn to have
* `lastDamagedByType` set to `DamTypeVomit`, which sometimes might not
* be the case. Achievements should still be obtainable.
* 3. A lot of siren's visual damage effects code does direct checks for
* `SirenScreamDamage` class. These can also break, stopping working as
* intended.
*/
var public const config bool allowReplacingDamageTypes;
/**
* Acedia requires injecting its own `BroadcastHandler` to listen to
* the broadcasted messages.
* It's normal for a mod to add its own broadcast handler: broadcast
* handlers are implemented in such a way that they form a linked list and,
* after first (root) handler receives a message it tells about said message to
* the next handler, which does the same, propagating messages through
* the whole list.
* If you do not wish Acedia to add its own handler, you should specify
* `BHIJ_None` as `broadcastHandlerInjectionLevel`'s value. If you want to
* allow it to simply add its broadcast handler to the end of the handler's
* linked list, as described above, set it to `BHIJ_Registered`.
* However, more information can be obtained if Acedia's broadcast handler
* is inserted at the root of the whole chain. This is the preferred way for
* Acedia and if you do not have a reason to forbid that (for example, for mod
* compatibility reasons), you should set this value at `BHIJ_Root`.
*/
var public const config BroadcastAPI.InjectionLevel broadcastHandlerInjectionLevel;
defaultproperties
{
allowAddingGameRules = true
allowReplacingDamageTypes = true
broadcastHandlerInjectionLevel = BHIJ_Root
}