Creating Objectives: Difference between revisions
(221 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== What is an Objective? == | == What is an Objective? == | ||
Objectives are the most important part of any Objective mode map. They determine how the gameplay should flow as well as setting winning / losing conditions for players. There is no limit on the number of objectives that can be placed in a map, but you should try to reduce it where possible to avoid clutter. It is important to note that '''there can only be one active objective at any given time'''. If you want to create complex 'multi-part' objectives you are often better off using multiple conditions inside a single objective than creating multiple different objective actors. Another thing to keep in mind is that objectives are | Objectives are the most important part of any Objective mode map. They determine how the gameplay should flow as well as setting winning / losing conditions for players. There is no limit on the number of objectives that can be placed in a map, but you should try to reduce it where possible to avoid clutter. It is important to note that '''there can only be one active objective at any given time'''. If you want to create complex 'multi-part' objectives you are often better off using multiple conditions inside a single objective than creating multiple different objective actors. Another thing to keep in mind is that objectives are always the same for all players connected to a server. You cannot assign one player an objective that is different from someone else's. Outside of these limitations, there are very few things you can't do with Objectives. They are highly configurable and capable of producing some very complex and interesting gameplay scenarios. | ||
== Placing your First Objective == | == Placing your First Objective == | ||
Line 12: | Line 12: | ||
{{Col-break}} | {{Col-break}} | ||
Select it and right click anywhere in your map with solid ground. You see the option to 'Add KF_StoryObjective'. Select this option and you should now see a green icon with a checkmark in the viewport. | Select it and right click anywhere in your map with solid ground. You should see the option to 'Add KF_StoryObjective'. Select this option and you should now see a green icon with a checkmark in the viewport. | ||
[[File:AddObjective.jpg |left|x400px|link=File:AddObjective.jpg |left|x600px|]] | [[File:AddObjective.jpg |left|x400px|link=File:AddObjective.jpg |left|x600px|]] | ||
Line 18: | Line 18: | ||
{{Col-break}} | {{Col-break}} | ||
== Objective | == Naming your Objective == | ||
Now that you have an objective in your map you need to give it a name. Select the objective and press F4 to open it's property menu. Click on 'Objective_Settings' from the list of collapsible categories so that it expands. Enter a name for your objective here. it can be whatever you want, but it helps to have it be relevant to what you want the players to do to complete it. i.e the Bloat bile objective in KFO- | Now that you have an objective in your map you need to give it a name. Select the objective and press F4 to open it's property menu. Click on 'Objective_Settings' from the list of collapsible categories so that it expands. Enter a name for your objective here. it can be whatever you want, but it helps to have it be relevant to what you want the players to do to complete it. i.e the Bloat bile objective in KFO-Frightyard is named 'CollectBloatBile'. <br> | ||
[[File:ObjectiveName.jpg |left|x400px|link=File:ObjectiveName | [[File:ObjectiveName.jpg |left|x400px|link=File:ObjectiveName | ||
Line 28: | Line 28: | ||
{{Col-break}} | {{Col-break}} | ||
== Objective | == Setting your Objective's order == | ||
Now that your objective has a name, the next step is to let your map how the order in which it should be given to players. To do this, we are going to add it to a list in the level properties. | Now that your objective has a name, the next step is to let your map how the order in which it should be given to players. To do this, we are going to add it to a list in the level properties. | ||
Press F6 to bring up the level properties window for your map. Expand the rollout titled 'Rules_Objectives' and select 'Add' next to the StoryObjectives array. This will produce a blank field where you should enter the name that you came up with for your first objective. The order in which you enter objective names in this array is very important. '''Index [0] of the array will always be the position of the first objective you want players to complete.''' Subsequent indices in the array denote future objectives in the order you wish them to be completed. | Press F6 to bring up the level properties window for your map. Expand the rollout titled 'Rules_Objectives' and select 'Add' next to the StoryObjectives array. This will produce a blank field where you should enter the name that you came up with for your first objective. The order in which you enter objective names in this array is very important. '''Index [0] of the array will always be the position of the first objective you want players to complete.''' Subsequent indices in the array denote future objectives in the order you wish them to be completed. <br><br> | ||
[[File:LevelRules.jpg |left|x800px|link=File:LevelRules | [[File:LevelRules.jpg |left|x800px|link=File:LevelRules | ||
Line 40: | Line 40: | ||
{{Col-break}} | {{Col-break}} | ||
If you have added your objective to the level info correctly, when you load the map up it should automatically start your objective when the match begins. You may not be able to see it however, because you have not configured any HUD information for your objective yet. So let's do that now ... | |||
== | == Configuring your objective's HUD properties == | ||
Now that you have added an objective to your map, it's time to add some conditions to it. | It is easy to create an objective, but slightly harder to make it look really awesome on the player's HUD and convey exactly the right information to him about what he must do to complete it. There are a large number of properties in the objective actor's 'Objective_HUD' collapsible category which will help you fine tune the appearance of your objective and determine where on the HUD it should be rendered. At the very least you will probably want to include some kind of header text for your objective. <br> <br> | ||
[[File:ObjectiveHUDTab.jpg |left|x400px|link=File:ObjectiveHUDTab | |||
.jpg |left|x400px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
==='''Background Properties'''=== | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| Background_AspectRatio || Enum || Determines how the background texture for your objective should be scaled. In most cases you will probably want this set to 'Scaled'. | |||
|- | |||
| Background_Offset || Struct || This allows you to 'nudge' the objective header up or down if you want it aligned differently against its background texture. | |||
|- | |||
| Background_Padding || Float || This allows you to set some padding around the objective text so that it doesn't go right to the edge of the background texture. | |||
|- | |||
| Background_Texture || Material || A material to render behind the objective. You don't have to have one, but for some objectives it looks nice. | |||
|- | |||
| Background_Texture_Collapsed || Material || This property is deprecated. Don't use it. | |||
|- | |||
|} | |||
==='''Header Properties'''=== | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| Header_Color || Color || Determines what color the header text should be. | |||
|- | |||
| Header_Scale || Enum || Allows you to change the size of the font used for the header. | |||
|- | |||
| Header_Text || Localized String || Any text you enter here will render at the top of your objective with a bold font. | |||
|- | |||
|} | |||
==='''Screen Position Properties'''=== | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| Horizontal || Float || Sets the Horizontal (X) screen position of the Objective as a percentage of the total horizontal pixels on the screen. | |||
|- | |||
| Vertical || Float || Sets the Vertical (Y) screen position of the Objective as a percentage of the total vertical pixels on the screen. | |||
|- | |||
|} | |||
[[File:ObjectiveHUDInfo.jpg |left|x700px|link=File:ObjectiveHUDInfo | |||
.jpg |left|x700px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
== Adding Conditions == | |||
Now that you have added an objective to your map, it's time to add some conditions to it. | |||
Conditions are pieces of logic which let the Objective know when it should be considered 'complete', and whether the outcome was successful, or whether players failed to accomplish their goals. | Conditions are pieces of logic which let the Objective know when it should be considered 'complete', and whether the outcome was successful, or whether players failed to accomplish their goals. | ||
As with objectives themselves, there is no limit to the number of conditions an objective actor may contain. However, unlike objectives, conditions have replicated properties which means there could be network performance issues if you decided to have a huge number of conditions active at the same time. Use your best judgement. In general, the fewer conditions you use, the less performance overhead there will be. | As with objectives themselves, there is no limit to the number of conditions an objective actor may contain. However, unlike objectives, conditions have replicated properties which means there could be network performance issues if you decided to have a huge number of conditions active at the same time. Use your best judgement. In general, the fewer conditions you use, the less performance overhead there will be.<br> | ||
<br> | |||
Conditions are broken up into different | ===Condition Types=== | ||
Conditions are broken up into different 'types' which check specific things. As of the Halloween 2013 update , these are all the 'official' condition types you can use in your map: | |||
<br> | |||
*[[ObjCondition_Area]] | *[[ObjCondition_Area]] | ||
*[[ObjCondition_Counter]] | *[[ObjCondition_Counter]] | ||
Line 65: | Line 137: | ||
*[[ObjCondition_Timed]] | *[[ObjCondition_Timed]] | ||
*[[ObjCondition_WaveCounter]] | *[[ObjCondition_WaveCounter]] | ||
<br> | |||
---- | ---- | ||
[ | <br> | ||
Each type of condition can be added to one of three separate categories in the objective actor. When adding a condition, the category you add it under determines what effect it will have on the completion requirements for your objective. Below is a list of each condition category and its uses. <br><br> | |||
[[File:ConditionsList.jpg |left|x700px|link=File:ConditionsList | |||
.jpg |left|x700px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
==='''Success Conditions'''=== | |||
---- | |||
Success Conditions determine what it takes to successfully finish an objective. Each objective must have '''at least one success''' condition ,or it cannot be completed. If you choose to add multiple success conditions the objective will only be considered complete if each one of them is completed. The only exception to this rule is if you change the [[Progress Importance]] value of your conditions. | |||
<br> | |||
<br> | |||
''Example : If I add a 'ObjCondition_Timed' condition to my Success Conditions array, my Objective will succeed if I wait for 60 seconds.'' | |||
==='''Failure Conditions'''=== | |||
---- | |||
Failure Conditions determine what it takes to fail an objective. Unlike success conditions, failure conditions are entirely optional. Many objectives will not have any failure conditions at all because alot of Killing floor maps assume that failure just means dying, so there's not always a need to impose added restrictions on players. An example of a failure condition is the 'Don't let anything other than bloats fall into the trap' condition from KFO-Frightyard. | |||
<br> | |||
<br> | |||
'' Example : If I add a 'ObjCondition_Timed' condition to my Failure Conditions array, my Objective will fail if I take longer than 60 seconds'' | |||
=== '''Optional Conditions''' === | |||
---- | |||
Optional conditions have no impact on the completion state of an objective. They exist purely to provide the player with "bonus" goals, or to display HUD information. If you want to add an extra goal for the player to achieve that isn't important, put it here. | |||
=== Creating a new Condition === | |||
To create a new condition, expand the category you want to add the condition to, select a type of condition to add from the drop down list and then click the 'new' button on the right hand side of the properties window. | |||
[[File:NewCondition.jpg |left|x700px|link=File:NewCondition | |||
.jpg |left|x700px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
After adding a new condition you will notice that it displays a list of collapsible categories. Each category can be expanded to modify a different area of the condition's behaviour. | |||
=== Configuring condition HUD properties === | |||
The 'HUD' collapsible category in the condition properties is important because it controls the amount of feedback players receive on their HUDs for that condition. Two types of information can be displayed on the HUD for each condition : "World" and "Screen". World HUD information is useful for displaying icons that hover over top of areas in the map you want players to go to, or for marking locations that are significant. Screen HUD information is useful for letting players keep tabs on how they are progressing with their current objective. You can choose to display one type of HUD information, or both, or neither. The more conditions you are displaying HUD information for, the slower your map will run, not to mention your HUD will start to look very confusing - So exercise restraint. <br><br> | |||
{{note|HUD_Screen information will always render in a 'list' format underneath the objective's header, in the order the condition was added to the objective. The only exception is when you have conditions which are not immediately active. These will appear at the bottom of the list at the time of their activation, regardless of their position in the actual array}} | |||
===='''World Properties'''==== | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| World_Texture || Material || Displays a material in the world at the location of the World_Location actor. | |||
|- | |||
| World_Texture_Scale || Float || Modifies the size of World_Texture on the HUD. a value of 1.0 means it displays at whatever the resolution of the material is. | |||
|- | |||
| World_Hint || Localized String || Displays localized text underneath the World_Texture at the position of the World_Location actor. | |||
|- | |||
| World_Location || Actor || HUD_World information displays at the location of this actor. | |||
|- | |||
| bShowWhispTrail || Bool || If true, display a whisp trail leading from the player to the position of the World_Location actor. | |||
|- | |||
| bHide || Bool || Don't render any HUD information for this condition in world space. '''Does not affect the whisp trail.''' | |||
|- | |||
| bIgnoreWorldLocHidden || Bool || By default, world HUD information will not render if the World_Location actor is hidden. This bool overrides that behavior. | |||
|- | |||
| World_Clr || Color || What color the text & icon should be in the world. Note : this color value modulates the base color of the World_Texture, so if the it already has a tint it will blend with this value. | |||
|- | |||
| Whisp_Clr || Color || What color the whisp trail has if bShowWhispTrail is true. | |||
|- | |||
|} | |||
===='''Screen Properties'''==== | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| Screen_Hint || Localized String || Displays a hint on the HUD which is concatenated with whatever data is displaying for the condition. i.e if it's a timed condition and the screen_hint was "Time left:" you would see "Time Left : 00:60" on the HUD. | |||
|- | |||
| Screen_CountStyle || Enum || Determines whether the condition should 'count up' , 'count down' or not display any data string at all. | |||
|- | |||
| Screen_ProgressStyle || Enum || Determines whether this condition displays with a graphical progress bar or if it should be text-only. | |||
|- | |||
| FontScale || Enum || Scales the text size of the condition hint. | |||
|- | |||
| bShowCheckbox || Bool || If true, display a graphical checkbox to the left of the condition hint which gets ticked off when the condition is completed. | |||
|- | |||
| bShowStrikethrough || Bool || If true, display a strikethrough effect overtop of the hint when the condition is completed. | |||
|- | |||
| Screen_ProgressbarBG || Material || A material to draw behind the Screen hint for this condition. only relevant if Screen_ProgressStyle is not set to 'Text Only' or 'Hide' | |||
|- | |||
| Screen_ProgressBarFill ||Material || A material to draw for the progress bar fill if Screen_ProgressStyle is not set to 'Text Only' or 'Hide' | |||
|- | |||
| Screen_Clr || Color || A color to tint all of the screen HUD information by. | |||
|- | |||
|} | |||
<br> | |||
<br> | |||
[[File:ScreenWorld.jpg |left|x700px|link=File:ScreenWorld | |||
.jpg |left|x700px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
== Adding Actions == | |||
Now that you have added conditions to your objective, the next step is adding actions. Actions tell the game which objective it should go to after the current one is complete, or whether it is time to end the game. Unlike conditions, each objective can only have a single action for success and failure. <br><br> | |||
===Action Types=== | |||
The types of actions an objective can have are as follows : | |||
*[[ObjAction_GoToObjective]] | |||
*[[ObjAction_GoToNextObjective]] | |||
*[[ObjAction_GoToLastObjective]] | |||
*[[ObjAction_LoseGame]] | |||
*[[ObjAction_Random]] | |||
*[[ObjAction_ResetCurrentObjective]] | |||
*[[ObjAction_RestartFromCheckpoint]] | |||
*[[ObjAction_WinGame]]<br><br> | |||
=== Creating a new Action === | |||
To create a new action, expand the category you want to add the action to, select a type of action to add from the drop down list and then click the 'new' button on the right hand side of the properties window. | |||
[[File:SuccessAction.jpg |left|x700px|link=File:SuccessAction | |||
.jpg |left|x700px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
{{note|By default, each objective has a 'ObjAction_GoToNextObjective' success action. If you want your objective to do something different, simply select the default action and click 'Clear' , then add your own action in place of it.}}<br> | |||
== Using Objectives to Trigger Events == | |||
Objectives can be used as a way of directing events in your map. Typical examples of objective controlled events would be - Making enemies start spawning when an objective begins, or making a door open when the objective is completed successfully. There are no limitations on how you use events, but it is important to understand exactly when they are triggered, and which type of event you want to use for a given situation. Below is a list of all the events you have at your disposal in Objective Mode. <br> <br> | |||
[[File:ObjectiveEvents.jpg |left|x400px|link=File:ObjectiveEvents | |||
.jpg |left|x600px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
===Activation Events=== | |||
Activation events are triggered the moment an objective begins. They are triggered in the order in which they are entered in the array, so if you want something to happen before another, move it closer to index 0. There is no limit to the number of activation events you can have, and the performance cost of having a large number of them is minor. | |||
===De-Activation Events=== | |||
De-Activation events are the opposite of activation events. They will be triggered the moment an objective ceases to be the player's current goal. This can be as a result of the objective being completed, failed, or if another different objective was manually trigger-activated. | |||
===Completion Events=== | |||
Completion events are triggered when players complete an objective successfully. They are only triggered if '''all''' of an objective's success conditions are met. They will not be triggered if the objective is partially completed, or failed. | |||
===Failure Events=== | |||
Failure events are triggered if players fail an objective. Failure events are only triggered if '''all''' of an objective's failure conditions are met. They will not be triggered if the objective is partially failed, or is completed successfully. | |||
===Condition Progress Events=== | |||
---- | |||
<br> | |||
Since objectives can take a while to complete you will almost certainly want to have additional events firing off at various points along the way. This is where condition 'Progress Events' come in handy. Unlike completion and failure events, they do not require that the objective be 100% complete or 100% failed. In this way they allow you to have a lot more control over the timing of your events, but they also take a little more work to set up. | |||
====Adding a Progress Event==== | |||
To add a new progress event to a condition, select the condition and expand the 'Events' category. Then click on 'Progress Events' and select the 'Add' button. | |||
[[File:AddProgressEvent.jpg |left|x400px|link=File:AddProgressEvent | |||
.jpg |left|x600px|]] | |||
{{Col-begin}} | |||
{{Col-break}} | |||
'''Progress Event Properties''' | |||
{| class="wikitable sortable" style="min-width:75%;text-align:left;" | |||
! Variable Name | |||
! Variable Type | |||
! Description | |||
|- | |||
|- | |||
| EventName || Name || This is the event that will get triggered when the condition's completion state is more than 'progress pct' | |||
|- | |||
| ProgressPct || Float || This should be a value between 0 and 1. Whenever the condition's overall completion state is greater than this value, 'EventName' will be fired. i.e If you want an event to happen after 30 seconds out of 60 for a timed condition you would enter a value of 0.5 here as this represents 50% completion. Certain condition types such as ObjCondition_Triggered will only ever have completion percentages of 0 or 1 as they are either incomplete, or fully complete. | |||
|- | |||
| bRetriggerable || Bool || By default, once a progress event is triggered it will never trigger again until the objective is reset. If you set this bool to true it can trigger over and over again without requiring a reset. | |||
|- | |||
|} |
Latest revision as of 18:48, 7 November 2013
What is an Objective?
Objectives are the most important part of any Objective mode map. They determine how the gameplay should flow as well as setting winning / losing conditions for players. There is no limit on the number of objectives that can be placed in a map, but you should try to reduce it where possible to avoid clutter. It is important to note that there can only be one active objective at any given time. If you want to create complex 'multi-part' objectives you are often better off using multiple conditions inside a single objective than creating multiple different objective actors. Another thing to keep in mind is that objectives are always the same for all players connected to a server. You cannot assign one player an objective that is different from someone else's. Outside of these limitations, there are very few things you can't do with Objectives. They are highly configurable and capable of producing some very complex and interesting gameplay scenarios.
Placing your First Objective
Open the Actor classes browser and navigate to StoryObjectiveBase. Expand it and you should see 'KF_StoryObjective'.
Select it and right click anywhere in your map with solid ground. You should see the option to 'Add KF_StoryObjective'. Select this option and you should now see a green icon with a checkmark in the viewport.
|