Killing Floor

Killing Floor

26 betyg
SDK KFO for Dummies
Av GunsForBucks
This guide is designed to help people already a little familiar with the SDK making normal maps. It is geared to be as simple as possible. I will lay out the elements of KFO map design in small modular groups, each of the modular sections can then be used, and even swapped around easily, in the map storyline. The most important thing to keep in mind when starting, is that most things in a regular KF map that are done automatically have to be set up manually in a KFO.

There are more efficient and smarter ways to do these objectives by combining these elements into single objectives. The design of this guide is to introduce you to the basic elements as separate entities that are easier to understand and manage. It is basically how I figured out to do the things I wanted as simply as I could, so I could understand what was going on with the objective design parts. Trying to figure out the complex objectives on the existing maps was too integrated to follow or understand the logic for me, so I broke it down for "dummies" such as myself... and by putting this guide here as my own quick reference for settings, I hope to encourage others to make KFO maps as well.

To use as a Quick reference for settings, scroll down a little to the GUIDE INDEX on Right side and click on the Section of interest.
   
Utmärkelse
Favorit
Favoritmarkerad
Avfavoritmarkerad
Finding Pieces - Parts
Actor Classes

KFLevelRules_Story
Info - ReplicationInfo - KFLevelRules - KFLevelRules_Story

Squad Designer
Info - *KF_StorySquadDesigner

Wave Designer
Info - *KF_StoryWaveDesigner

Trader Controller
Info - *KF_StoryTraderController

Scripted Trigger
*Keypoint - AIScript - ScriptedSequence - ScriptedTrigger

Story Objective
StoryObjectiveBase - *KF_StoryObjective


Volumes

KF_StoryCheckPointVolume

KFTeamProgressVolume


Level Properties - Objective Names

At top of SDK - View - Level Properties - Rules_Objectives

The first named Objective is labeled "Start" and will be seen when selected along with its Objective name. This is the listing of all the different Objectives and, in general, is in the order of how you want the objectives to be completed. Makes it easier in the Objective settings to "go to next Objective" and that would be the next one on this list.. you can just name them but in most cases following the order is easier than putting in each name again.
Player Start / Set-up
This section lays out the basic elements you need for most maps to start and work properly.

Tip - Whenever setting things up with Event names and Tags always make a note the exact Events and Tags so they can be used to tie things together... easier to check a notepad than seach the map to find the exact Tag or Event you need to type in. Think of the Events as outgoing signals and Tags as incoming signals, these connect to trigger things to happen. In the examples below Ive given generic names like CashBonus but it could be anything or CB1 and CB2 etc if you want different bonuses. Or AllowPerkSwap as APS or whatever... I try to keep the tags and events at least relevant to their intended purpose... easier to troubleshoot mistakes later. One other important note about Events and Tags if you have not run into this issue yet, pay attention to the way the game names things for its own use. You can NOT make events, tags or any names involved with the logical flow of the map, with spaces or - dashes, they won't work. If you follow the basic naming conventions that are used here in the guide everything should work smoothly.

Cash Bonus
After killing off the last zeds you can use this as a wave bonus before the trader.

Scripted Trigger - AIScript - add three lines. Use dropdown to select:

[0] - Action_WaitForEvent - new
Event Name - CashBonus
[1] - Action_GivePlayerCash - new
amount - 250 <250 is normal base amount, but whatever is best for your needs>
[2] - Action_GoToAction - new
by default the number is 0 and that is fine as it will go back to "WaitForEvent" and will be ready to trigger again when needed.

Allowing Players to swap Perks
You normally can change your perk once per Trader. To duplicate this you need to set up an allow perk swap routine you can run when the map starts and each time a trader closes.

Scripted Trigger - AIScript - add three lines. Use dropdown to select:

[0] - Action_WaitForEvent - new
Event Name - AllowPerkSwap
[1] - Action_ResetPlayerPerkSelection
[2] - Action_GoTo Action - new
again 0 is fine so it is ready to be triggered again.


Trader Controllers
You need two trader controllers to start with.

One Trader Controller is set to a generic Open Shop command and the other is used to select the first trader.. normally in a KFO you want to trigger a specific trader for the area you are in. <One other point here is that even for the Final Pat wave you need to select a new trader... It is the selection of the next trader that closes the door on the last trader.. without that the trader would stay open during the Final wave.>

Trader Controller
Event - Tag - Select1stTrader
KF_StoryTraderController - ShopAction - SelectNewShop
- Shops - "ShopVolumeX"
Has to be the exact shop volume name in the shop volume properties - object - name

Trader Controller
Event - Tag - OpenShop
KF_StoryTraderController - ShopAction - Action_OpenCurrentShop

This controller will open whatever the shop is that has been selected, only one needed per map. The other controller to select the trader just needs one per Trader and it can be reused for the same trader.


Four Trader Controllers - one for each Trader ... and a separate Trader Controller to Open Shop

KFLevelRules_Story

Just needs to be placed on map. It has some settings like starting money but by default it works fine. It needs to be there, think of it like the owner of the theater you are putting on a play in... it has some basic rules but does not really interact with the play or the actors. Can be placed and forgotten.


Player Starts
Six Player Starts need to be placed inside a KF_StoryCheckPointVolume
Player starts set for bEnabled - False
Volume - StoryCheckPoint-bStartEnabled - True
Go To an Area Objective and First Objective w/Game and World HUD
KF_TeamProgressVolume

KF_StoryObjective

Level Properties


Place KF_TeamProgressVolume where you want players to go to.

Properties - Object - Name { example: "KF_TeamProgressVolume0" }

Name can not be changed MUST be typed in exactly as is.



Place KF_StoryObjective.

If you want a HUD indication in the world to tell you where to go, place the Objective in the middle of the Team Progress Volume.

KF_StoryObjective - ObjectiveConditions - SuccessCondition - ObjCondition_Area - AreaVolume - Name { KF_TeamProgressVolumeX }

- SuccessCondition - HUD - world - text hint shown on map in location
- SuccessCondition - HUD - world - show wisp trail <nice to change the colour too>
Options for check box etc.

The KF_StoryObjective - HUD is where you type in the name of the Objective as you want it seen on the Game status board and above kill counter on screen.

StoryObjective - ObjectiveSettings - ObjectiveName - GoToWhatever


Level Properties - Rules_Objectives - add
GoToWhatever <same as used above> If this is the first added you will see a red Start when the Story Objective is selected to indicate this is the first objective of the map. <Pictured Above>

First Objective

Most people seem to prefer a short delay before the killing starts. In normal KF there is a countdown timer, in Frightyard you have to enter the yard then get some info in a timed objective. Steamland is just a timed objective for information introduction.

Either way your first objective, regardless of what it is, needs some basic elements tied into it from the Player Start / Set up module. To do this:

KF_StoryObjective - Objective Events - ActivationEvents - add

AllowPerkSwap
Select1stTrader
Timed Objective
This is the basic wait for the timer to run out. Handy to smooth transitions like at the beginning or end of a game, or to give information / plot line for the map etc..

Place KF_StoryObjective

KF_StoryObjective - ObjectiveConditions - Success Condition - ObjectiveCondition_Timed - ObjectiveCondition_Timed - Duration - seconds

- Objective_Settings - ObjectiveName - WelcomeInfo

Level Properties - Rules_Objectives - add
WelcomeInfo


Already with these three modules and the map renamed to KFO- instead of KF- you would be able to start the map, enter as a player and be told to go to a location and wait for timer. Map is also set to open first trader and you can change perks once before/during the trader.
Wave and Squad Designers / Kill X Number of enemies
This is your typical first attack wave before players have had a chance at the Trader. This is also your typical set up to simulate a normal KF wave.

Level Properties - Rules_Objectives - add
FirstKillTime

Story Objective
KF_StoryObjective - Objective_Settings - ObjectiveName - FirstKillTime

KF_StoryObjective - ObjectiveConditions - SuccessCondition - ObjCondition_WaveCounter
- ObjConditon_WaveCounter - Events - Tag = "FirstDead" ZombieDeathEvent in Wave Designer
<Tag is used to make the player HUD count down>

- ObjConditon_WaveCounter - Designer Tag - "1stWave" to match Event - Tag in Wave Designer
<links Wave Designer to Story Objective>

Story_Objective - ObjectiveEvents - ActivationEvent - add
Wave1 <acts as the trigger to start the zeds spawning>


Wave Designer

KF_StoryWaveDesigner - Event - Tag - "1stWave"

KF_StoryWaveDesigner - Waves - add

-[0] - Wave_ActivationTag - Wave1 <same as Story_Objective - ObjectiveEvents - ActivationEvent>

Wave_Spawns - add
-[0]-
- MaxZeds # is scaled for player count and difficulty by default.< good place to start is 20 and go up from there if needed >

- bRandomWithoutRepeats - True


- SquadList - add Squads from Squad Designer <short names like FP1 SC1 easier to put in>


- ZombieDeathEvent - "FirstDead"


- WaveVolumeTags - same as Zombie Volume - Event - Tag
By default all zed spawn volumes have the tag ZombieVolume.. but in order to localize your spawns you need to modify this on the spawn volume and match it to the local wave designer.

Tip- When building a map put in one ZombieVolume and set its Event - Tag.
Then run the map and make sure the zeds are spawning when and where they are supposed to, once everything is working correctly just duplicate the Volume to fill the area needed.



Squad Designer

This one is pretty simple you add squads, and add zeds and numbers.
Name the squads with simple names to put in Wave Designer.

Tips - I mostly use FP, SC and RR for Riff-Raff... the design of the wave really lies here in how the squads are made up.. too few squads and they repeat too often... not too bad in a first wave if all you get is small stuff but you don't want 5 or 6 FPs showing up from cycling through the squad list too fast either. Too many squads and you can get a wave with no FPs or SCs at all... normally solo in a game you get one... maybe two FPs per wave on Normal - Hard sometimes three on wave 10 solo sometimes none on wave 7 or 8 it comes down to the random use of the squads without repeating and spawn interval. If you make your waves with enough squads to act like a normal game wave then it should scale up properly for multiplayer / difficulty also.
Trader Time
Level Properties - Rules_Objectives - add
TraderOne

Place Story Objective

KF_StoryObjective - Objective_Settings - ObjectiveName - TraderOne

KF_StoryObjective - ObjectiveConditions - SuccessConditions - ObjCondition_TraderTime

Tips - Defaults are pretty good here 60 seconds ect, in HUD you can set wisp trail colours.

KF_StoryObjective - ObjectiveEvents - ActivationEvents - add
- CashBonus
- OpenShop

KF_StoryObjective - ObjectiveEvents - CompletionEvents - add
-AllowPerkSwap
-Select2ndTrader


Place Trader Controller

KF_StoryTraderController - Event - Tag - Select2ndTrader
<to match event above, this closes last trader and sets new trader to open>

KF_StoryTraderController - ShopAction - SelectNewShop
Shops - ShopVolumeY < from ShopVolume - Object - name >

The Trader Objectives, once one is set up, can be dupilcated easily and the Name changed to plug into the Level Properties.. after that you just need to check the Completion Events to select the next Trader you want.



Here is a ten wave stack of Trader Objectives along with a ten wave stack of Wave Designers with one Squad Designer
Defend Area
Playing the map at this point, you would enter and go to a location and wait for a timer for information. Fight a first wave of enemies, bonus and go to the first trader. The trader closes and you can change perks again.

So now lets defend an area, this is much like going to an area but you don't want words in the air or a wisp trail while fighting enemies. The main difference is the setting in the Story Objective to set a duration time. There are options for single player or whole team in order to trigger volume, most cases you would not require the whole team, same way crane is set up on Frightyard. That way the team can spread out and defend better, but it depends on how you want the map to be played and the layout.


Place KF_TeamProgressVolume where you want players to defend at.

Properties - Object - Name { example: "KF_TeamProgressVolumeY" }

Name can not be changed MUST be typed in exactly as is.


Level Properties - Rules_Objectives - add
Defend1


Place Story Objective

KF_StoryObjective - Objective_Settings - ObjectiveName - Defend1

KF_StoryObjective - ObjectiveEvents - ActivationEvent - add
StartDWave <wave activation signal for Wave Designer to start Zeds spawning>


KF_StoryObjective - ObjectiveConditions -

SuccessCondition - ObjCondition_Area - AreaVolume - Name
{example KF_TeamProgressVolumeY }

SuccessCondition - ObjCondition_Area - bKeepProgress - True <this will slowly lose progress if area is left... if left False all progress would be lost the instant you leave the zone>

SuccessCondition - ObjCondition_Area - Duration - <Time in seconds you want area occupied>

NB Tip: In screen HUD do NOT use checkbox option, the checkbox occupies part of the progress bar and makes it impossible to tell if you are in the right area until the progress bar is actually filled part way and past the check box overlap.

Place Wave Designer

Note: You can use the same Squad Designer as was used for the first wave. Just add more squads to make up the enemies you want to see during the defend part and use the names of the squads you want to use in the Wave Designer.

Tip - wave designer is set up much like the other one that was made, just with changed tags/events and infinite zeds. If used in the same area as the last one you wouldn't even need to change the WaveVolumeTags if you duplicated it.


KF_StoryWaveDesigner - Event - Tag - "DWave"

KF_StoryWaveDesigner - Waves - add

-[0] - Wave_ActivationTag - StartDWave
<same as Story_Objective - ObjectiveEvents - ActivationEvent>

Wave_Spawns - add
-[0]-
- MaxZeds - leave this at 0 and you will get infinate zeds until the Wave_ActivationTag is triggered again

- bRandomWithoutRepeats - True

- SpawnInterval - Leaving this at 0 would mean 32 zeds at one time in your face trying to defend an area.. as the wave starts... so try a number like 6 and adjust from there... remember you want to make it so it can be played on Hell On Earth too.. a lot of the balance of the wave difficulty comes in this setting.

- SquadList - add Squads from Squad Designer <short names like FP1 SC1 easier to put in>


- ZombieDeathEvent - "DDead"


- WaveVolumeTags - same as Zombie Volume - Event - Tag
By default all zed spawn volumes have the tag ZombieVolume.. but in order to localize your spawns you need to modify this on the spawn volume and match it to the local wave designer.
End of wave Kill Off
Level Properties - Rules_Objectives - add
KillOff1

Place Story Objective

KF_StoryObjective - Objective_Settings - ObjectiveName - KillOff1

KF_StoryObjective - ObjectiveEvents - ActivationEvent - add
- StartDWave <WaveActivation tag from Wave Designer to stop the zeds from spawning>


KF_StoryObjective - ObjectiveConditions - SuccessCondition - ObjCondition_WaveCounter
- ObjConditon_WaveCounter - Events - Tag = DDead
ZombieDeathEvent in relative Wave Designer
<Tag is used to make the player HUD count down>

- ObjConditon_WaveCounter - Designer Tag - DWave
To match Event - Tag in Wave Designer <links Wave Designer to Story Objective>
Combinations
So far we have covered all the basic Objective elements and broken them down into modular pieces. The Official map Objectives normally combine some of these elements into single Objectives. But I have made them simple single Objectives here that can be easily swapped around or added into.

Moving an Objective is as easy as changing the order of the list in Level Properties
Then check the corresponding Objective Activation Events and Completion Events to make sure things get trigger signals when you want them to. To Add to the list in the middle, click on an existing name and click Insert, this will Add a blank listing Above the one selected.

For example you could enter the map with a 20 second Timed Objective for a message then start a Go to Area Objective but add the Wave Designer wave activation tag when the Go To starts, then kill off, then trader or whatever combination. You start and stop the killing with the Wave Designer Activation Tag, it's up to your imagination what you have to do during the attack time.. as long as you finish with a Kill Off Objective to wrap it up nicely before a Trader Objective

In my KFO Planetary Battlegrounds Z I have 3 "worlds" where you start with a Go To Objective to trigger the Zeds to attack, requires whole team to prevent players from getting a jump on the next Go To area while under attack, then a Kill Off once there, then a Patriarch before each Trader. Basically with these modular peices it makes it simple to swap them around how you please in order to tell the story of the map.

One other way to combine Objectives is to add an OptionalConditon during a fight wave that is a Go To Area conditon that you can't reach.. I use this method to give the next Trader a HUD indication during the fight waves. Examples of this in my maps also.


Next Trader is shown with OptionalCondition, then when it opens it has its own icon.
Respawning
This subject was, and is, the hardest part for me. On Official maps they have so many zones and exclusion areas for stragglers etc it was far too complex for me to follow mixed in with all the other zones and settings. I got by with some stuff in KFO Planetary Battlegrounds Z... but I've settled on an easier method to respawn dead players or allow new players to join. This method I worked out on my KFO Fleshpound Challenge for Wyre Forest.. both maps are in workshop and please use for reference when needed. The Wyre one was built using this guide to check for accuracy so it most closely follows what I am putting in this Guide, and most specifically Respawning.

To simplify things I am Respawning players into the Open Trader... this removes a need to "get to the trader" from some distant spawn point. This method has been fool proof in testing so far... and I needed that... so I've settled on its simplicity and universal applicability.

Place a KF_StoryCheckPointVolume around each Trader area you will use on the map.. can be in walls as long as it covers the room but away from the door like the shop volume... not sure if it matters but try to prevent player entry into Volume if not IN the Trader.

KF_StoryCheckPointVolume - StoryCheckPoint - RespawnOnWipe - False
KF_StoryCheckPointVolume - StoryCheckPoint - bShowActivationMsg - False
KF_StoryCheckPointVolume - StoryCheckPoint - CheckPointTriggerType - CTT_Trigger
KF_StoryCheckPointVolume - StoryCheckPoint - bSingleActivationOnly -False

KF_StoryCheckPointVolume - Events - Tag - RespawnTraderX

Select ONE trader door for that trader and put into the
Door Mover Events - OpenedEvent - "RespawnTraderX"
<this way the people will be respawned into that trader when the door is fully open.>

Add six Player Starts inside Trader set to bEnabled - False
<5 should be enough but if the map gets played on a server with more than six players it might be looking for the extra one>
Patriarch
To be frank, this is one Objective I have always "cheated" on making. There are a lot of changes to the HUD and little tweaks I just never dug into... it was always easier to just copy the sequence off another map and adjust as needed.

I will lay out the basic elements here and show how they are linked so you can tweak them to your liking, but keep in mind that if you make them from scratch, at a minimum the HUD will be messed up. I tend to group the final boss elements together in a map and so does Tripwire on the official maps... the Objective has a "Boss" on it so it makes it easy to find in the SDK... once you know what parts you need, copy and paste should be simple enough... then just plug it in like any other Module.


This is the Triple Patriarch module I made from the Two Pat module I copied from KFO Transit. The key to having multiple Patriarchs at the same time is the CustomZED - ZEDBoss_NoZEDTime... any other Boss will freeze the others when it dies.. it drops an eyeball, but you can just ignore that... or find some way to use it, the answer should be on Transit as well.


Scripted Trigger

WaitForEvent - new
- BossSpawn

WaitForTimer - new
- 0.5

Action_ChangeViewtarget - new
- BossTag

WaitForTimer - new
- 5.0 <this is the time you are watching the Patriarch during his spawn... I often make it shorter>

ChangeViewtarget - new
<enter nothing, it will switch back to First Person view>

WaitForEvent - new
-BossDead

ChangeViewtarget -new
<enter nothing>

ACTION_KillZEDs - new <This will kill off any Zeds the Patriarch spawned to avoid random groups of frozen Zeds blocking pathing etc.>

GoToAction - new

This Trigger is set up to let you see the Patriarch when it spawns, then waits for the Patriarch to die... this automatically puts you in 3rd Person view... with the BossDead event it puts you back into First Person again and kills off any Zeds he spawned. This way you can continue on if you choose to make the map that way. You could just set the Objective Action to Win Game, but I will show another option in that section.

<For multiple Patriarchs at the same time this trigger can be modified to trigger the next Wave Designer spawn of the 2nd Pat, then switch to his tag for a couple of seconds then spawn the next Pat.. etc. just need to add Action_TriggerEvent - BossWaveB then switch camera then another Action_TriggerEvent - BossWaveC for however many Patriarchs you want.>

Story Objective - Boss

KF_StoryObjective - Objective_Events - ActivationEvents - add
- BossWave <triggers Pat spawn>


KF/_StoryObjective - SuccessCondition - add
- ObjConditon_ActorHealth - ObjCondition_ActorHealth - TargetPawnTag - BossTag
<Links Patriarch to this Objective goal>
<For Multi-Pat you need to add a new ObjCondition_ActorHealth with its own BossTagA, BossTagB etc>

StoryObjective - name - PatFight ........ Level Properties - Rules_Objectives - PatFight


Wave Designer

KF_StoryWaveDesigner - Waves - add

-WaveActivationTag - BossWave

- Wave_Spawns
- bNoDifficultyScaling - True <if false it will scale up number of Pats but they won't work right, seems to autoscale health anyway>
- MaxZEDs - 1
- SquadList - add
- FinalBoss <from Squad Designer>

- ZombieDeathEvent - BossDead <reset view to first person>
In multiple Pat situations it is better to leave this blank and use the Boss Objective - CompletionEvent to trigger this.

- ZombieSpawnEvent - BossSpawn <triggers change of view to boss and back>

- ZombieSpawnTag - BossTag <Identifies Pat for logic input, tracking etc.>

WaveVolumeTags - same as before, adjust as needed.

Squad Designer

KF_StorySquadDesigner - Squads - add
- SquadName - FinalBoss
SquadZEDs - add
NumToSpawn - 1
ZEDType - ZED_Patriarch


For Multi Patriarch you need a new Squad for each Patriarch, each with its own Squad name like FinalBossA FinalBossB etc then that must be used in Separate Wave Designers all the associated tags and events for each individual Patriarch.

This is the ONLY Patriarch that works for Multi-Pat situations

KF_StorySquadDesigner - Squads - add - SquadName - FinalBossA
SquadZEDs - add
CustomZEDClass - ZombieBoss_NoZEDTime
NumToSpawn - 1
ZEDType - ZED_Custom

If you copy the module from another map you shouldn't need to mess with much, I'm just showing the things you would normally want to look into for troubleshooting and tweaking.

One Important thing to Check

Something I have not gone into yet is Story Objective - Actions
By Default the Story Objectives that were made have an Action of "GoToNextObjective" and that is what triggered the next name on the list in Level Properties

When pasting in a Boss Objective check its Action - SuccessAction
Since this is the Patriarch Wave you could just set it to WinGame.

Personally I like to have a litte time after the Patriarch, even just 5 seconds to avoid a sudden stop to the map.

I normally set my Boss Story Objectives to a success Action of go to next objective
and this brings us to our next section of Win Game module.
Win Game / Lose Game / Alternate Routes
In an effort to "End it with a Bang" I avoid ending the game on the Boss Story Objective.

In KFO Soylent Zed you crash a Truck into a ship and have a large explosion that spawns the Patriarch. Also for a Failure Event in the timed Area you have to defend for 2 mins. but if you wait for too long it will fail and explode. If I had the fail Action as Lose Game I could not trigger explosions or anything... as soon as it gets the "Lose Game" signal everything is frozen, so I just add a Timed Objective Module that allows me to trigger explosions or text messages or whatever.
In the case of a Failure Condition you also need to know how to link in the Level Properties.

Make a Timed Objective module

KF_StoryObjective - Objective_Actions - SuccessAction - ObjAction_WinGame

KF_StoryObjective - Objective_Events - ActivationEvents - add
Trigger signals for explosions or movers if you want as celebration


You can do the same thing with a ObjAction_LoseGame and trigger signals also.



In order to have a Lose Game Objective you have to have an Objective with a Failure Condition.
With the Success Condition filled, the Objective Action is to go to next Objective.

A Failure Condition needs to be told where to go. So for the Failure Action select Go to Objective and put in the name of the Objective you want it to go to.

In Level Properties you will have your Objectives listed in order up to the final Win Objective, so Add another space and name the Fail Objective.. this will jump the logic flow of the map to that point in the list.

This is the key point here in that a "failure" does not mean it has to End Game. You can continue to another alternate way to win. By using the Go To Objective - Name you could have many ways to win a map with alternate routes. In the Gas pump example above I could have continued with another option rather than end the game there. The Level Properties is the program instruction list for the maps logic.

KF_StoryObjective - Objective_Actions - FailureAction - ObjAction_GoToObjective - new
- FailRoute1 <Create objective at end of Level Properties list and continue on new route>
Music
I have left music for last for a reason. Each Objective has its own Audio settings, in many cases you will only need to put in a music file name when you want the music to start and can set the Objective audio to NOT stop it playing when done so it just keeps playing for the next Objective too. So once you have the flow of the map set up, you can decide what music you want to play when and set the Objective audio settings to match.

KF_StoryObjective - Objective_Audio - ObjectiveInProgressMusic - KF_FileName

- bStopMusicOnCompletion - Default is True, just set to False to keep music playing through and no need to enter an ObjectiveInProgressMusic for the next Objective
Troubleshooting / Wrap-up
In terms of finding mistakes, as long as you follow the modular structure, the most common errors will be spelling mistakes in names or Events, Tags, Songs etc.

Remember, DO NOT use spaces or dashes in Event names or any names that are involved in the logic flow. Even if you use custom music and the filename has a - dash, the game can not handle it.. you would have to rename the custom music file without the dash <or a space> to use in the game.

Use informative names for things so you can track down problems easier.

If you spawn to the wrong Trader, make sure you remembered to put in Player Starts and All player Starts on map set bEnabled - False




That's about it for this guide. Hope you found it helpful. There is a lot more depth to KFO map Objectives and this guide only scratches the surface and just an introduction to the basic actors ..but it should serve as a good base to learn the basic structure of Objective map making and a solid foundation of basic knowledge to build upon.

Here are the links to some of my KFO if you want to download and check them out as reference.

KFO FPC Wyre
This is the most accurate map reference for this guide.
http://sp.zhabite.com/sharedfiles/filedetails/?id=359680054

DL link - https://www.dropbox.com/s/tfw2wc880iof1oz/KFO-FPC_Wyre_ws.rom?dl=0

KFO Planetary Battlegrounds Z
Has multi Patriarch sequence and alternate endings.
http://sp.zhabite.com/sharedfiles/filedetails/?id=354970200


KFO Soylent Zed
Has a mobile Area to stay in for Objective defend area and alternate fail routes.
http://sp.zhabite.com/sharedfiles/filedetails/?id=253942341
Game Balance
A lot of effort went into the game to achieve a good balance. If you keep in mind a few basic principles it should help to make the map enjoyable at all levels of play.

I have played a lot of solo and have noticed some basic things on how the waves run.

A good way to measure money for a first bonus.
On Hell on Earth level solo, if the next fighting part is against lower level enemies, ie no Scrakes or Fleshpounds few Husks or Sirens.. then the amount of money you have at the first Trader should be about 420 pounds after first wave bonus.. this is the same amount you have in KFO Frightyard when going into the crate area... another way to look at it is that it lets a Level 6 Berzerker sell the axe and buy a katana.

On Hell on Earth level solo, if the next fighting part is against Fleshpounds and Scrakes and everything, then the amount you should have at the first trader is about 700 pounds. This is the same amount you have at the KFO Steamland first trader. This lets a level 6 Berzerker sell the axe and buy a claymore.

Following those guidelines for a first wave then a trader should allow the game to scale the money proplerly and fairly for multiplayer and difficulty in the games early stages.

The other major factor is wave spawns.

There is only so much that can be expected... for example the crane area in KFO Frightyard.
It sits up off the ground level, that makes husks miss, just bad luck if they spawn up high and get a shot in before they jump down. There are only one or two sirens that show up solo on Hell on Earth and about that number of husks and scrakes.. they stream in fairly well with enough break to get in a heal or two as you have to stand still and deal with it for 2 min.

2 min is a pretty good time to hold a place, too much longer and ammo becomes an issue. On Hell on Earth a solo Berzerker can handle 2 Fleshpounds in that amount of time as long as they don't come together and the rest of the crowd isn't too heavy, 3 FPs having to stand still just won't happen except for maybe a few people... sometimes when doing the crane in Frightyard solo on Hell on Earth I get that third FP, if the timer hasn't run out and I can't fall back and kite it, it's over and I know it.

This is where the number of squads you have and the rate of spawning really controls how fairly the wave is designed.

I wasn't sure if I wanted to add this section but I figured not everyone would have the solo experience I have had if they played multiplayer all the time. This is basically a guideline you can follow in making up your attack waves and then playtesting them solo to see how they work.
This way you can keep it fun to play the map at all levels of difficulty and number of players.

1 kommentarer
Rexolance 21 mar, 2015 @ 4:25 
Amazing guide! Thank you so much for spending time to create this :)