Download ServerPerksX v1.33
Older Versions
ServerPerksX v1.3 Changelog
New Features
ServerPerksX v1.1 Changelog
New Features
Marco has given his permission for this mutator.
As the StoryGame mode is obviously new and heavily logged, so too is this mutator. I'll try to keep it updated as much as possible until StoryMode is relatively stable. Let me know if you encounter any bugs, and please send me your KillingFloor.log file if you do! This is especially helpful while StoryMode is still so heavily logged.
Thanks.
ServerPerksX
New Features
Old Features
See this thread. This mutator merely enhances the functionality of Marco's original mutator.
Installation and Use
Installation
New Features Guide
New Variables in ServerPerksX.ini
Explaining the ZedList replacement system
Essentially, this sub-system allows server-admins to specify what zeds they want to spawn on which maps without compiling any code, and merely modifying values in the ServerPerksX.ini file. The StoryMode squad system is quite sophisticated compared to older KF code (That Alex Quick guy is pretty good!), so messing with any of it directly could potentially be a nightmare for modders. And because the new spawning system is offloaded to the level designers almost entirely, it compounds the issue of trying to fiddle with the code in order to get the results you want. My hope is that this mutator will stop the almost certain problem of incompatibility between mods which all try to stick their fingers into that pie. This sub-system is modular, and allows modders to make their own replacement systems subclassing ServerPerksXMut.SRZombieList (which is the default, included module)
As of the v1.3 release of ServerPerksX, the ZedList system has been widely expanded for Invasion mode, allowing dynamic, map/difficulty/gamelength based modifications of waves without the need to mess with wavemasks, which the ZedList now generates on the fly every time a map loads.
SRZombieList
A moderately simple module for modifying spawn waves in both game modes. This is the default mode, and intends to be as capable as possible for the majority of people's needs.
Custom Monster Collection
ServerPerksX can now dynamically create and load in a Monster Collection at runtime, which allows you, the modder, to specify new or replacement monsters by simply changing a line in the ServerPerksX.ini file. Monster Collections are the basic list of zombies used by both game modes to spawn waves of zeds in the game, and any modifications to this will be global. The ServerPerksX Monster Collection replacement module lets you selectively specify replacements, or completely override the default MonsterCollectionClass. Default values in ServerPerksX.ini represent the vanilla KFMod version of the Monster Collection, with all the classic zeds.
In order to customize your server's loadout of zombies, you have a great deal of options available. First, if you've already created your own Monster Collection, you can load it as the default collection by specifying it in the MonsterCollectionClass variable of the .ini file. Or, if you'd prefer, you can leave this variable definition empty and let Killing Floor load its own Monster Collection (handy if you want events, such as the sideshow/halloween zeds to affect the later portions).
Next, you can modify this default Monster Collection, whether defined by you or left up to Killing Floor, by setting the bCustomMonsterCollection under [ServerPerksX.SRZombieList] header to true. By doing this, you will activate the following variables:
By removing the values for any of these, you will allow the default Monster Collection to take precedence. You can also freely add new Monster definitions without affecting the defaults loaded in by the default Monster Collection. If, however, you define a Monster with any of the letters A-I, it will override the default monster held there.
For instance, let us assume that the Summer Sideshow event is taking place and while you like most of the new Zeds you think the Sirens are too ugly, and want to change them to the default. This is what your .ini file should look like:
Simple, no? If you have any questions, feel free to ask.
Invasion Squads
The Invasion spawning mechanic in ServerPerksX is capable of handling almost any kind of customized spawning patters for Invasion Mode. You may define squads, squad sets, waves, and wave information for both global use and map-specific use. Waves may be targeted at specific game lengths, difficulty modes, or maps, and may define the total number of zeds that wave, the set of monsters which spawn at the beginning of the wave, and even the zeds who accompany the patriarch.
First thing's first if you want to use the ZedList system to modify your zombie spawns. You must define some squads. By default, the .ini file provides all of the default KF monster squads. You may edit them freely.
Once you've defined your squads, you may choose to simply have your squads be injected into the existing WaveMasks (which control which squads spawn and when) by changing the bOverrideInvasionSquads variable to true. Once this is done, your squads will be eligible for spawning.
Next, provided you're still feeling adventurous, you can start defining custom squads, squad sets, waves, and wave informations. This part of the ZedList, enabled by the bOverrideInvasionWaves variable, allows you to set up waves for various game conditions.
First, I'll discuss SquadSets. SquadSets are not absolutely necessary in order to modify waves. They are simply a grouping mechanism allowing you to organize similar squads together in order to maximize your versatility in defining squads for specific conditions. Some parts of the waves do require SquadSets, however, such as the OpeningSet (the zeds which spawn at the start of the wave).
SquadSet
Once you have a couple of SquadSets planned out, you can move on to defining some Waves. Waves are definitions for a single dynamic Wave which is called by the GlobalWaves and MapWaves under specific conditions. Think of the generic wave, then, as the spawning mechanics for any given wave of Killing Floor.
Wave
Now that you've defined a few waves, you can go on to plugging them into the GlobalWaves and MapWaves as you see fit. GlobalWaves and MapWaves are essentially a list of conditions under which to spawn the previously defined Waves. GlobalWaves, obviously, apply to every map. MapWaves are Map-Specific, and will override any Globals if their conditions are met. The order of precedence for definitions goes as follows:
So if you leave any conditions empty here, Killing Floor's defaults will be allowed to take over. Handy if you only want to change one or two things.
GlobalWaves
MapWaves are identical to GlobalWaves with the exception of being able to define maps for them.
MapWaves
Story Mode Squads
So as I mentioned, this spawning system is much more sophisticated. Thus, I won't go into terrible details on it in this thread. As the system is still very new and capable of being altered by Tripwire, it wouldn't make much sense to do so now anyway. Let's just get right into it, then.
In order to modify the Story Mode Squads, you must change bOverrideStorySquads to true in the ServerPerksX.ini file. This will enable the ZombieList replacement system for Story Mode. There are some default, do-nothing values defined which you will need to replace (but you can leave them there if you want a handy reference since they don't actually do anything).
StorySquadReplacements
This method of changing zed spawns is quite simple and straightforward. Like the other methods, it can be map-specific or global. This method will simply replace a percentage of existing Zeds in every squad with the ones you want.
Variables:
StorySquadAdditions
This method of changing zed spawns is intended to tack extra Zeds onto existing squads, or as an adjunct to StorySquadReplacements, as it is applied sequentially after the previous method. So we can use this method to further edit previously modified squads.
Variables:
StoryNewSquads
The most complicated way to add new Zeds to story maps. This is for those who can't be satisfied by simply manipulating existing squads, and want more control over how Zombies spawn. This array's definitions will create wholly new squads for placement on the defined maps.
Variables:
Well, if you want to add your own squads to the game code-side, there you go. It's not nearly as complicated as it seems, however. I'll go through a couple of examples. First, let's consider the practical case that I would like to add a squad of 3-5 Stalkers, 1 Siren, and either 0 or 2 Crawlers to the KFO-Steamland map, and I would like them to only spawn during the Breaker wave (the one where you have to weld up the breaker boxes) and Escort wave (When that bastard says "Gooh, Bloody Knee!" a thousand times).
To do this, I'll start with a basic definition of the item that will go into the end of the ServerPerksX.ini file:
Next, let's consider that I want to add a squad of 5 Shivers to every Story Mode map, and I want them to always show up in every wave. This is quite simple!
Again, start with the simplest definition:
SRSimpleList
An extremely simple replacement system designed to outright replace all occurences of one zombie type with another. Still under development.
Feedback, comments, suggestions, ideas, remarks, etcetera are all very welcome!
Older Versions
Spoiler!
ServerPerksX v1.3 Changelog
New Features
- Major revamp of the ZedList replacement system. Now includes global Squad definitions, a custom Monster Collection creation system that can load from the .ini file, a VASTLY improved functionality for Invasion game mode which includes just about everything you could want. This new system automatically generates wave masks on the fly during map changes, and can support different wave sets by difficulty, game length, map, and more.
- New Features Guide is updated with new information on the ZedList system and its use.
- Moved logging functions for debugging the ZedList system to SRZedList_Debug, so they won't clutter your logs unless you enable them.
- Fixed a few bugs and optimized a couple of functions for speed in execution.
- Delegate assignment now occurs client-side, fixing a bug with "no perks" and "can't hold weapons"
- Fixed an error with the Monster Collection generator which would occur with more than 9 new Zeds (New maximum is unlimited)
- Fixed the issue with text messages showing player's names twice in the HUD
- Please change your ZombieListClass variable in ServerPerksX.ini to "ServerPerksXMut.SRZombieList_Debug" if you encounter any bugs, and send me the log files afterwards. I'll fix things as soon as possible.
- While I try to make these releases as bug-free as possible, I can only test so much on my own. Thanks in advance for any log files or bug reports!
ServerPerksX v1.1 Changelog
Spoiler!
New Features
- KFPCServ and SRHumanPawn now utilize delegate function assignments to dynamically call correct superclass functions for the current game mode. What this means to you is that you can now extend ServerPerksX's playercontroller (KFPCServ) and pawn (SRHumanPawn) directly, with any code which was previously compliant with ServerPerks, and achieve full functionality and Story Mode support, with no new code.
- This new system does not affect the HUD, which will be coming in the next version. Reworking the HUD will take more time, however, since memory management issues with assets being loaded are significant here. The current in-development version, though working, is not reasonably efficient yet (and eats up too much memory to be considered worthwhile). If you do not use a custom HUD, this will not affect you. If you DO use a custom HUD, you'll have to get by with using SRKillingFloorHUD_Story for now.
- Optimization to the ZedList replacement system making it load faster.
- Fixed a bug in the ZedList causing replacement problems in Invasion mode.
- The default Field Medic perk uses medic nades now.
Marco has given his permission for this mutator.
As the StoryGame mode is obviously new and heavily logged, so too is this mutator. I'll try to keep it updated as much as possible until StoryMode is relatively stable. Let me know if you encounter any bugs, and please send me your KillingFloor.log file if you do! This is especially helpful while StoryMode is still so heavily logged.
Thanks.
ServerPerksX
New Features
- StoryGame (Objective) Mode Support
- Dynamic Server-Side MonsterCollection selection AND creation
- Support for custom game modes through dynamic PlayerController/HUD specification
- Dynamic Server-Side Zed Replacement System for even more customized Story Maps
- Dynamic Map/Global zed wave generator for specifying which zeds spawn on which wave on which map
Old Features
See this thread. This mutator merely enhances the functionality of Marco's original mutator.
Installation and Use
Installation
- Simply extract the files into your KillingFloor/System directory
- This mutator does not overwrite any of the original ServerPerks files, and may be installed simultaneously
- This mutator may be considered a replacement for ServerPerks, and retains all of the original functionality of ServerPerks while adding new features.
- ServerPerksX is a completely self-contained mutator and does not extend the original ServerPerks files. If you wish to extend ServerPerksX in your own mod, simply subclass ServerPerksX instead of ServerPerks and recompile. Handily, all of the class definitions are the same. For instance, let us assume that you had previously subclassed KFPCServ in your own mod. With ServerPerksX, all you'll need to do for a successful compile is change EditPackages=ServerPerks to EditPackages=ServerPerksX in your KillingFloor.ini file, and recompile your mod.
- ServerPerksX cannot be loaded as an active mod at the same time as ServerPerks, this will cause conflicts because ServerPerksX uses the same class definitions. However, you may have both mutators installed at the same time if you'd like to test their differences.
- If it worked with ServerPerks, it will work with ServerPerksX.
- If it didn't work with ServerPerks, it probably won't work with ServerPerksX, but I'm willing to fix any bugs from the original ServerPerks anyone brings to my attention.
New Features Guide
New Variables in ServerPerksX.ini
- MonstersCollection - Somewhat self-explanatory. Leave this blank to let Killing Floor select its own MonsterCollection, otherwise define the classname thusly:
MonstersCollectionType="KFMod.KFMonstersCollection"
This definition will become the Default monstercollection, which can be overridden and modified dynamically with the ZedList system, explained further below. - ZombieListClass - This defines the subclass of SRZombieList which will be used to load customized spawn waves/replacements. You can freely subclass SRZombieList to any server-side package, whether sent to clients or not, if you wish to offload its functionality. If you define a ZombieList in your own mod, your package will be imported dynamically at runtime with no need of a mutator. ServerPerksXMut.SRZombieList is defined by default.
- GameTypeAssociates - It's unlikely you'll want to dick with these unless you're making a new game mode, have your own mod which uses GameType-specific HUDs or PlayerControllers, or just want to swap out what HUD/PlayerController is used without compiling ****. In any case, feel free to modify these. In a defined Associate, GameType specifies the associated GameType for the replacement, ClassType specifies the type of class to be replaced (only "HUD" and "PlayerController" are currently supported), ClassName specifies the path to the class used to replace these default classes. Again, any classes defined here will have their packages automatically loaded at runtime without the need of a mutator.
Explaining the ZedList replacement system
Essentially, this sub-system allows server-admins to specify what zeds they want to spawn on which maps without compiling any code, and merely modifying values in the ServerPerksX.ini file. The StoryMode squad system is quite sophisticated compared to older KF code (That Alex Quick guy is pretty good!), so messing with any of it directly could potentially be a nightmare for modders. And because the new spawning system is offloaded to the level designers almost entirely, it compounds the issue of trying to fiddle with the code in order to get the results you want. My hope is that this mutator will stop the almost certain problem of incompatibility between mods which all try to stick their fingers into that pie. This sub-system is modular, and allows modders to make their own replacement systems subclassing ServerPerksXMut.SRZombieList (which is the default, included module)
As of the v1.3 release of ServerPerksX, the ZedList system has been widely expanded for Invasion mode, allowing dynamic, map/difficulty/gamelength based modifications of waves without the need to mess with wavemasks, which the ZedList now generates on the fly every time a map loads.
SRZombieList
A moderately simple module for modifying spawn waves in both game modes. This is the default mode, and intends to be as capable as possible for the majority of people's needs.
Custom Monster Collection
ServerPerksX can now dynamically create and load in a Monster Collection at runtime, which allows you, the modder, to specify new or replacement monsters by simply changing a line in the ServerPerksX.ini file. Monster Collections are the basic list of zombies used by both game modes to spawn waves of zeds in the game, and any modifications to this will be global. The ServerPerksX Monster Collection replacement module lets you selectively specify replacements, or completely override the default MonsterCollectionClass. Default values in ServerPerksX.ini represent the vanilla KFMod version of the Monster Collection, with all the classic zeds.
Spoiler!
In order to customize your server's loadout of zombies, you have a great deal of options available. First, if you've already created your own Monster Collection, you can load it as the default collection by specifying it in the MonsterCollectionClass variable of the .ini file. Or, if you'd prefer, you can leave this variable definition empty and let Killing Floor load its own Monster Collection (handy if you want events, such as the sideshow/halloween zeds to affect the later portions).
Next, you can modify this default Monster Collection, whether defined by you or left up to Killing Floor, by setting the bCustomMonsterCollection under [ServerPerksX.SRZombieList] header to true. By doing this, you will activate the following variables:
- Monster - An array of Monsters which can all be defined
- Letter - The ID of the Zed, cap sensitive! Must be a single character, but can be any valid unicode character. Best stick with letters, unless you have over 26 Zeds on your server. A, B, C, D, E, F, G, H, and I are associated with internally-recognized Zeds, represented correctly by their default properties in the .ini file.
- MClass - The location of the class associated with this Zed. The default .ini file configuration uses the classic Killing Floor Zeds.
- BossMonster - The class of the patriarch (or patriarch replacement). The default value represents the classic Patriarch.
- FallbackMonster - The class of the zed that will be spawned when no others can be, due to size restrictions in a small spawn area most likely. Stalkers are a good choice for this.
By removing the values for any of these, you will allow the default Monster Collection to take precedence. You can also freely add new Monster definitions without affecting the defaults loaded in by the default Monster Collection. If, however, you define a Monster with any of the letters A-I, it will override the default monster held there.
For instance, let us assume that the Summer Sideshow event is taking place and while you like most of the new Zeds you think the Sirens are too ugly, and want to change them to the default. This is what your .ini file should look like:
Code:
[ServerPerksXMut.ServerPerksMut]
...
MonsterCollectionClass=
...
[ServerPerksXMut.SRZombieList]
bCustomMonsterCollection=false
Monster=(Letter="H",MClass="KFChar.ZombieSiren")
...
Simple, no? If you have any questions, feel free to ask.
Invasion Squads
The Invasion spawning mechanic in ServerPerksX is capable of handling almost any kind of customized spawning patters for Invasion Mode. You may define squads, squad sets, waves, and wave information for both global use and map-specific use. Waves may be targeted at specific game lengths, difficulty modes, or maps, and may define the total number of zeds that wave, the set of monsters which spawn at the beginning of the wave, and even the zeds who accompany the patriarch.
Spoiler!
First thing's first if you want to use the ZedList system to modify your zombie spawns. You must define some squads. By default, the .ini file provides all of the default KF monster squads. You may edit them freely.
- required string SquadName - The user-friendly name of the squad. Make it whatever you want, but it cannot be blank and it must be unique (although there will be no errors if they aren't unique, but the ZedList will only use the first one defined).
- required string Zeds - A string defining the Zeds in this squad. Each character alternatively represents a Number To Spawn and Zed ID. You may thus define up to 9 Zeds of any kind at a time. If you want a squad with 10 clots, the proper definition is "9A1A", not "10A". Using the latter definition will cause you to load 1 Zed of type 0, and int(A) Zeds of type none - which may be what you want, who the hell knows? But for sanity's sake, just stick to the prescribed definitions. The Letter ID corresponds to the Letter used in the previously discussed Monster Collection.
Once you've defined your squads, you may choose to simply have your squads be injected into the existing WaveMasks (which control which squads spawn and when) by changing the bOverrideInvasionSquads variable to true. Once this is done, your squads will be eligible for spawning.
Next, provided you're still feeling adventurous, you can start defining custom squads, squad sets, waves, and wave informations. This part of the ZedList, enabled by the bOverrideInvasionWaves variable, allows you to set up waves for various game conditions.
First, I'll discuss SquadSets. SquadSets are not absolutely necessary in order to modify waves. They are simply a grouping mechanism allowing you to organize similar squads together in order to maximize your versatility in defining squads for specific conditions. Some parts of the waves do require SquadSets, however, such as the OpeningSet (the zeds which spawn at the start of the wave).
SquadSet
- required string SetName - Just a handy name for the set. Must be unique and cannot be blank.
- required string array Squads - A list of squad names to use in this set. ("Squad1","Squad2","Squad3") etcetera. You can load as many of these into a set as you wish.
Once you have a couple of SquadSets planned out, you can move on to defining some Waves. Waves are definitions for a single dynamic Wave which is called by the GlobalWaves and MapWaves under specific conditions. Think of the generic wave, then, as the spawning mechanics for any given wave of Killing Floor.
Wave
- required string WaveName - The name of the wave, must be unique.
- optional string array Sets - A list of set names to use in this wave.
- optional string array Squads - If you'd prefer to add single squads, you may specify their names in this list. This can be used as an adjunct to Sets, so you can load squads from both Sets and individual Squads in the same wave.
- optional string OpeningSet - The name of the set that is spawned at the start of the wave (and again if the entire rotation is depleted).
Now that you've defined a few waves, you can go on to plugging them into the GlobalWaves and MapWaves as you see fit. GlobalWaves and MapWaves are essentially a list of conditions under which to spawn the previously defined Waves. GlobalWaves, obviously, apply to every map. MapWaves are Map-Specific, and will override any Globals if their conditions are met. The order of precedence for definitions goes as follows:
- MapWaves
- GlobalWaves
- Game Defaults
So if you leave any conditions empty here, Killing Floor's defaults will be allowed to take over. Handy if you only want to change one or two things.
GlobalWaves
- required int WaveNum - Which wave number to spawn on. Values from 0-10 are valid. 0 represents the Patriarch wave, and if 0 is selected then only the OpeningSet of the associated Game Length will be used to spawn the monsters which accompany the boss. Waves 1-4 are used for Short games, 1-7 for Normal, and 1-10 for Long.
- optional string Short - The name of the wave applicable for Short games. If left undefined, this definition will be skipped for Short games of that Wave Number.
- optional string Normal - The name of the wave applicable for Normal games
- optional string Long - The name of the wave applicable for Long games.
- optional int MinDifficulty - The difficulty level that is required for these waves to take effect. 1=Beginner, 2=Normal,4=Hard,5=Suicidal,7=HoE (don't blame me, I didn't define them). If left undefined, it will always meet this requirement.
- optional int NumZeds - How many Zeds to spawn this wave. This value is modified by game-code later depending on number of players and difficulty scaling. If left undefined, it will use the game's defaults for that WaveNum.
MapWaves are identical to GlobalWaves with the exception of being able to define maps for them.
MapWaves
- required string MapName - The name of the map to apply this definition to, e.g. "KF-WestLondon". This is not cap sensitive.
- required int WaveNum - Which wave number to spawn on. Values from 0-10 are valid. 0 represents the Patriarch wave, and if 0 is selected then only the OpeningSet of the associated Game Length will be used to spawn the monsters which accompany the boss. Waves 1-4 are used for Short games, 1-7 for Normal, and 1-10 for Long.
- optional string Short - The name of the wave applicable for Short games. If left undefined, this definition will be skipped for Short games of that Wave Number.
- optional string Normal - The name of the wave applicable for Normal games
- optional string Long - The name of the wave applicable for Long games.
- optional int MinDifficulty - The difficulty level that is required for these waves to take effect. 1=Beginner, 2=Normal,4=Hard,5=Suicidal,7=HoE (don't blame me, I didn't define them). If left undefined, it will always meet this requirement.
- optional int NumZeds - How many Zeds to spawn this wave. This value is modified by game-code later depending on number of players and difficulty scaling. If left undefined, it will use the game's defaults for that WaveNum.
Story Mode Squads
So as I mentioned, this spawning system is much more sophisticated. Thus, I won't go into terrible details on it in this thread. As the system is still very new and capable of being altered by Tripwire, it wouldn't make much sense to do so now anyway. Let's just get right into it, then.
Spoiler!
In order to modify the Story Mode Squads, you must change bOverrideStorySquads to true in the ServerPerksX.ini file. This will enable the ZombieList replacement system for Story Mode. There are some default, do-nothing values defined which you will need to replace (but you can leave them there if you want a handy reference since they don't actually do anything).
StorySquadReplacements
This method of changing zed spawns is quite simple and straightforward. Like the other methods, it can be map-specific or global. This method will simply replace a percentage of existing Zeds in every squad with the ones you want.
Variables:
- Optional string MapName - If left undefined, this replacement's definition will apply to all Story Mode maps. If defined, this replacement will only occur on the defined map.
- Optional string ZedTypeToReplace - "Custom" by default. Defines the type of basic Zed to replace with your defined class. This variable is valid for all standard Zeds, "Gorefast", Bloat, "Fleshpound", "Scrake", "Patriarch" etc. You can also set this value to "Custom" to replace any dumb custom Zeds level designers decide to shove in their piece of **** maps, but this will have no effect on KFO-Steamland (or most maps, for that matter). So just stick to defining a normal Zed type in most cases.
- Required string ReplaceClass - The class definition of the Zed to replace the specified ZedType with.
- Optional float PercentReplaced - Valid range from 0.0 to 1.0, 1.0 if left undefined. The percentage of these Zeds to be replaced with the replacement class
Code:
Start with the simplest definition, where we define that we want to replace things
on the map KFO-Steamland
StorySquadReplacements=(MapName="KFO-Steamland")
[list]
[*]Add that we want to replace crawlers
StorySquadReplacements=(MapName="KFO-Steamland",ZedType=ZED_Crawler)
[*]Add that we want to replace crawlers those crawlers with clots
StorySquadReplacements=(MapName="KFO-Steamland",ZedType=ZED_Crawler,ReplaceClass="KFChar.ZombieClot")
[*]Add that we want half of those crawlers to be replaced
StorySquadReplacements=(MapName="KFO-Steamland",ZedType=ZED_Crawler,ReplaceClass="KFChar.ZombieClot",PercentReplaced=0.5)
[/list]
That's it, copy it to the ServerPerksX.ini file
StorySquadAdditions
This method of changing zed spawns is intended to tack extra Zeds onto existing squads, or as an adjunct to StorySquadReplacements, as it is applied sequentially after the previous method. So we can use this method to further edit previously modified squads.
Variables:
- Optional string MapName - If left undefined, this addition's definition will apply to all Story Mode maps. If defined, this addition will only occur on the defined map.
- Required string SpawnsWithClass - The class of Zed we want our new Zed to come in with. Since this is applied AFTER StorySquadReplacements, we can even add some Zeds to squads which previously had replacements.
- Required string SpawnClass - The class of Zed we want to accompany our SpawnsWithClass
- Optional float PercentChance - Valid range from 0.0 to 1.0, 1.0 if left undefined. The chance that this addition will occur when it has the chance to happen.
Code:
Start with the simplest definition, where we define that we want to replace things
on the map KFO-Steamland
StorySquadAdditions=(MapName="KFO-Steamland")
[list]
[*]Add that we want to accompany crawlers
StorySquadAdditions=(MapName="KFO-Steamland",SpawnsWithClass="KFChar.ZombieCrawler")
[*]Add that we want Bloats to be the accompaniment
StorySquadAdditions=(MapName="KFO-Steamland",SpawnsWithClass="KFChar.ZombieCrawler",SpawnClass="KFChar.ZombieBloat")
[*]Add that we want this to occur 50% of the time that crawlers show up
StorySquadAdditions=(MapName="KFO-Steamland",SpawnsWithClass="KFChar.ZombieCrawler",SpawnClass="KFChar.ZombieBloat",PercentChance=0.5)
[/list]
That's it, copy it to the ServerPerksX.ini file
StoryNewSquads
The most complicated way to add new Zeds to story maps. This is for those who can't be satisfied by simply manipulating existing squads, and want more control over how Zombies spawn. This array's definitions will create wholly new squads for placement on the defined maps.
Variables:
- Optional string MapName - If left undefined, this squad's definition will apply to all Story Mode maps. If defined, this squad will only show up on the defined map.
- Optional string SquadName - Most often you should leave this blank, as the ZombieList system will assign a unique SquadName on generation. If you choose to define the squad's name for any reason, it must be unique! This includes any squads currently on any maps it is applied to.
- Optional string WaveTags array - Level designers define WaveTags for each new wave they create, and you'll have to look these up in the Editor to find out what they are (or log them with code). In any case, you probably want to find these out so you can tell your new squad which waves to spawn in. Define it here. You can optionally leave this blank and give this squad's PercentChanceAddToAll variable a value above 0, giving it a chance to spawn in every wave (explained below).
- Optional string SpawnTags array - Like WaveTags, designers can specify tags for multiple spawn conditions within a wave. In KFO-Steamland this is only done for the Boss (who is associated with the Wave1Spawn WaveTag). Most of the time this appears to be left blank. If you do not define a SpawnTag for your new squad, it will be added to all wavecontrollers within any Wave it gets into (at the time of writing this, that's generally a good thing. To be clear, at this time, you probably want to leave this blank).
- Optional SpawnPriority - Normal if left blank. Other valid values are VeryLow, Low, High, and VeryHigh (do not use quotation marks). This ostensibly controls the desirability of a wavecontroller to spawn this squad when given the chance. Doesn't make a huge difference at the time of writing this.
- Optional bool bIgnoreMaxZeds - If left blank, defaults to false. If true, this squad will spawn even if its wavecontroller is at capacity.
- Optional float PercentChance - Any value between -1.0 and 1.0, representing the percentage chance that this squad will show up AT ALL when the map loads. This is to give you a lot more control over the variety of monsters that'll show up each match, increasing replayability. A value of 0.0 (default) is interpreted as a value of 1.0. So you can leave this value empty if you want the squad to always load for processing.
- Optional float PercentChanceAddToAll - Valid from 0.0 to 1.0, this variable defines the liklihood of this squad being added to EACH wave individually. So if you don't define a WaveTag for it, it'll have this much of a chance to be added to every wave. By default this is 0.
- Optional float MinTimeBetweenSpawns - The minimum time, in seconds, that must pass for this squad to be respawned in a given wave.
- Required struct SquadInfo array -
- Required string SpawnClass - Definition of the type of monster to spawn.
- Required int NumToSpawn - The amount of these Zeds to spawn
- Optional float PerZedChance - Valid range from 0.0 to 1.0, 1.0 if left undefined. Modifies the NumToSpawn value, giving each individual Zed 100*PerZedChance% chance of showing up in its squad. By default, all of the Zeds will show up.
- Optional float PercentChance - Valid range from 0.0 to 1.0, 1.0 if left undefined. Chance that this squad will show up AT ALL in each wave it can spawn in.
Well, if you want to add your own squads to the game code-side, there you go. It's not nearly as complicated as it seems, however. I'll go through a couple of examples. First, let's consider the practical case that I would like to add a squad of 3-5 Stalkers, 1 Siren, and either 0 or 2 Crawlers to the KFO-Steamland map, and I would like them to only spawn during the Breaker wave (the one where you have to weld up the breaker boxes) and Escort wave (When that bastard says "Gooh, Bloody Knee!" a thousand times).
To do this, I'll start with a basic definition of the item that will go into the end of the ServerPerksX.ini file:
Code:
StoryNewSquads=( SquadInfo=( () , () ) )
[LIST]
[*]First, add the MapName. Since I'll be defining a specific wave for it to spawn in, it won't be relevant for any other maps:
StoryNewSquads=( Mapname="KFO-Steamland", SquadInfo=( () , () ) )
[*]Add the WaveTag to specify the Breaker wave, as defined in the KFO-Steamland map.
StoryNewSquads=( Mapname="KFO-Steamland", WaveTags=("BreakerSpawns","EscortSpawns") SquadInfo=( () , () ) )
[*]Add my Stalker definition, with 5 Stalkers, each having a 0.8 chance to spawn (80%).
StoryNewSquads=( Mapname="KFO-Steamland", WaveTags=("BreakerSpawns","EscortSpawns") SquadInfo=( (SpawnClass="KFChar.ZombieStalker",NumToSpawn=2,PerZedChance=0.8) , () ) )
[*]Add my Siren
StoryNewSquads=( Mapname="KFO-Steamland", WaveTags=("BreakerSpawns","EscortSpawns") SquadInfo=( (SpawnClass="KFChar.ZombieStalker",NumToSpawn=2,PerZedChance=0.8) , (SpawnClass="KFChar.ZombieSiren",NumToSpawn=1) ) )
[*]Add my Crawlers, giving them a number of 2, and a chance of 0.5 to show up. So we have a 50% chance to get 2 of them, or they aren't there at all.
StoryNewSquads=( Mapname="KFO-Steamland", WaveTags=("BreakerSpawns","EscortSpawns") SquadInfo=( (SpawnClass="KFChar.ZombieStalker",NumToSpawn=2,PerZedChance=0.8) , (SpawnClass="KFChar.ZombieSiren",NumToSpawn=1) , (SpawnClass="KFChar.ZombieCrawler",NumToSpawn=2,PercentChance=0.5) ) )
[/LIST]
Now copy that **** to the .ini
Next, let's consider that I want to add a squad of 5 Shivers to every Story Mode map, and I want them to always show up in every wave. This is quite simple!
Again, start with the simplest definition:
Code:
StoryNewSquads=( SquadInfo=( () ) )
[LIST]
[*]Since we want this to be on every map, all the time, in every wave, the
only thing we need to define here is the PercentChanceAddToAll variable, and
the SquadInfo. Start with the simple variable:
StoryNewSquads=( PercentChanceAddToAll=1.0, SquadInfo=( () ) )
[*]Now just tack on the Squad definition
StoryNewSquads=( PercentChanceAddToAll=1.0, SquadInfo=( (SpawnClass="MyPackage.ZombieShiver",NumToSpawn=5) ) )
[/LIST]
And that's it.
SRSimpleList
An extremely simple replacement system designed to outright replace all occurences of one zombie type with another. Still under development.
Feedback, comments, suggestions, ideas, remarks, etcetera are all very welcome!
Last edited: