Difference between revisions of "Creating a Portal 2 Coop Map"

From Valve Developer Community
Jump to: navigation, search
m (Added info apout places to spawn players)
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
ru=Creating_a_Portal_2_Coop_Map:ru|
 
ru=Creating_a_Portal_2_Coop_Map:ru|
 
de=Creating_a_Portal_2_Coop_Map:de
 
de=Creating_a_Portal_2_Coop_Map:de
 +
pl=Tworzenie_Mapy_Co-Op_do_Portal_2
 
}}
 
}}
{{stub}}
 
 
==Basic steps==
 
==Basic steps==
 
Here are the basic steps needed to create a coop map:
 
Here are the basic steps needed to create a coop map:
Line 25: Line 25:
 
* '''TWO''' [[logic_script]]s
 
* '''TWO''' [[logic_script]]s
 
* '''TWO''' [[prop_indicator_panel]]s
 
* '''TWO''' [[prop_indicator_panel]]s
 +
* a [[prop_button]]
 +
* '''TWO''' [[info_coop_spawn]]s (place them where you want the players to start)
  
 +
{{Note| You must '''HIDE''' the [[prop_indicator_panel]] and the [[prop_button]] so the player's won't see it in the level}}
 
== Step 2==
 
== Step 2==
 
* Name your first [[logic_relay]] '''relay_return_hub'''
 
* Name your first [[logic_relay]] '''relay_return_hub'''
Line 34: Line 37:
 
* Name your first [[prop_indicator_panel]] '''panel_level_return_orange'''
 
* Name your first [[prop_indicator_panel]] '''panel_level_return_orange'''
 
* Name your first [[prop_indicator_panel]] '''panel_level_return_blue'''
 
* Name your first [[prop_indicator_panel]] '''panel_level_return_blue'''
 +
* Name your [[info_coop_spawn]]s '''spawns_1'''
 +
{{Note| The [[prop_button]] doesn't need a name}}
  
 
==Step 3: Properties==
 
==Step 3: Properties==
#Go to '''script_return_hub''' properties and do the following:
+
1. Go to '''script_return_hub''' properties and do the following:
  
 
::{| class=standard-table
 
::{| class=standard-table
Line 47: Line 52:
  
  
#Now go to the '''@script_mp_coop_lobby''' properties and do this:
+
2. Now go to the '''@script_mp_coop_lobby''' properties and do this:
  
 
::{| class=standard-table
 
::{| class=standard-table
Line 57: Line 62:
 
|}
 
|}
  
#Continue to the '''panel_level_return_orange''' properties:
+
3. Continue to the '''panel_level_return_orange''' properties:
 
::{| class=standard-table
 
::{| class=standard-table
 
!  Property Name || Value
 
!  Property Name || Value
Line 68: Line 73:
 
|-
 
|-
 
| Indicator lights || tex_level_return_orange
 
| Indicator lights || tex_level_return_orange
 +
|}
 +
 +
4. Continue to the '''spawns_1''' properties:
 +
::{| class=standard-table
 +
!  Property Name || Value
 +
|-
 +
| Name || spawns_1
 +
|-
 +
| Team || <red or blue, depending on wich player>
 
|}
 
|}
  
  
 
{{Warning|The '''panel_return_blue''' has the '''SAME''' properties except of the "Indicator lights" which is "tex_level_return_blue"}}
 
{{Warning|The '''panel_return_blue''' has the '''SAME''' properties except of the "Indicator lights" which is "tex_level_return_blue"}}
==Srep 4: Outputs/Inputs==
+
 
 +
4. '''prop_button''' properties:
 +
 
 +
::{| class=standard-table
 +
!  Property Name || Value
 +
|-
 +
| Delay Before Reset || 3
 +
|}
 +
 
 +
==Step 4: Outputs/Inputs==
 
Now we need to connect all these entities together. Follow these instructions:
 
Now we need to connect all these entities together. Follow these instructions:
  
'''logic_auto Outputs'''
+
*'''logic_auto Outputs'''
  
 
::{| class=standard-table
 
::{| class=standard-table
Line 83: Line 106:
 
|-
 
|-
 
| [[Image:Io11.png]] || OnMapSpawn  || script_return_hub || RunScriptCode || MapPostLoaded() || 2.00 || Yes
 
| [[Image:Io11.png]] || OnMapSpawn  || script_return_hub || RunScriptCode || MapPostLoaded() || 2.00 || Yes
 +
|-
 +
| [[Image:Io11.png]] || OnMapSpawn  || script_return_hub || RunScriptCode || SetMapBranchAndLevel() || 0.25 || Yes
 +
|-
 +
| | [[Image:Io11.png]] || OnMapSpawn  || spawns_1 || SetAsActiveSpawn || <none> || 0.00 || No
 
|}
 
|}
 
{{Note| Don't forget the '''"Delays"''' and the '''"Only Once"'''}}
 
{{Note| Don't forget the '''"Delays"''' and the '''"Only Once"'''}}
 +
 +
 +
*'''logic_coop_manager Outputs'''
 +
 +
::{| class=standard-table
 +
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
 +
|-
 +
| [[Image:Io11.png]] || OnChangeToAllTrue  || relay_return_hub || Trigger || <none> || 0.00 || No
 +
|-
 +
| [[Image:Io11.png]] || OnChangeToAllTrue  || panel_level_return_orange || Check || <none> || 0.00 || No
 +
|-
 +
| [[Image:Io11.png]] || OnChangeToAllTrue  || panel_level_return_blue || Check || <none> || 0.00 || No
 +
|}
 +
 +
*'''relay_return_hub Outputs'''
 +
 +
::{| class=standard-table
 +
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
 +
|-
 +
| [[Image:Io11.png]] || OnTrigger  || script_return_hub || RunScriptCode || ReturnToHubFromLevel() || 1.00 || Yes
 +
|}
 +
 +
 +
*'''@relay_has_new_taunt Outputs'''
 +
 +
::{| class=standard-table
 +
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
 +
|-
 +
| [[Image:Io11.png]] || OnTrigger  || brush_new_taunts || Enable || <none> || 0.00 || Yes
 +
|}
 +
 +
 +
*'''prop_button Outputs'''
 +
 +
::{| class=standard-table
 +
!  || My Output || Target Entity || Target Input || Parameter || Delay || Only Once
 +
|-
 +
| [[Image:Io11.png]] || OnButtonReset  || panel_level_return_orange || Stop || <none> || 0.00 || No
 +
|-
 +
| [[Image:Io11.png]] || OnButtonReset  || coopmanage_return_hub || SetStateBFalse || <none> || 0.00 || No
 +
|-
 +
| [[Image:Io11.png]] || OnPressed  || panel_level_return_orange || Start || <none> || 0.00 || No
 +
|-
 +
| [[Image:Io11.png]] || OnPressed  || coopmanage_return_hub || SetStateBTrue || <none> || 0.00 || No
 +
|}
 +
 +
 +
 +
That's it! You now can create co-op maps with working co-op scripting!
 
[[Category:Portal 2 Level Design]]
 
[[Category:Portal 2 Level Design]]

Latest revision as of 12:53, 20 May 2019

Deutsch Русский

Basic steps

Here are the basic steps needed to create a coop map:

  • Create a func_instance. Set its VMF file to one of the coop spawn rooms, such as instances/coop/coop_spawn_room.vmf. These VMF files already contain an info_player_start, so don't create another one.
  • Create another func_instance, this one set to one of the level end rooms, such as instances/coop/coop_endlevel_room.vmf.
  • Build your map in between these rooms. (You can move them, of course.) The embedded VMF files have an obvious exit which should lead into your map. You may need to enclose the rooms in order to prevent leaks.
  • Make sure you save the map with the prefix mp_coop_.

That's it! See Testing Portal 2 Co-Op Maps Alone for how to test the map without a partner. (To test it with a partner, both must have the bsp file. Get into the hub normally, then the host should changelevel to the map.)

Co-op Level without spawn Instances

To create a co-op level, you need to use:

Note.png Note:  You must HIDE the prop_indicator_panel and the prop_button so the player's won't see it in the level

Step 2

Note.png Note:  The prop_button doesn't need a name

Step 3: Properties

1. Go to script_return_hub properties and do the following:

Property Name Value
Name script_return_hub
Entity Scripts debug_scripts/mp_coop_transition_list.nut


2. Now go to the @script_mp_coop_lobby properties and do this:

Property Name Value
Name @script_mp_coop_lobby
Entity Scripts debug_scripts/mp_coop_lobby.nut

3. Continue to the panel_level_return_orange properties:

Property Name Value
Name panel_level_return_orange
Time Duration 3
Is a timer? Yes
Indicator lights tex_level_return_orange

4. Continue to the spawns_1 properties:

Property Name Value
Name spawns_1
Team <red or blue, depending on wich player>


Warning.png Warning: The panel_return_blue has the SAME properties except of the "Indicator lights" which is "tex_level_return_blue"

4. prop_button properties:

Property Name Value
Delay Before Reset 3

Step 4: Outputs/Inputs

Now we need to connect all these entities together. Follow these instructions:

  • logic_auto Outputs
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnMapSpawn @script_mp_coop_lobby RunScriptCode CheckForNewTaunts() 2.00 No
Io11.png OnMapSpawn script_return_hub RunScriptCode MapPostLoaded() 2.00 Yes
Io11.png OnMapSpawn script_return_hub RunScriptCode SetMapBranchAndLevel() 0.25 Yes
Io11.png OnMapSpawn spawns_1 SetAsActiveSpawn <none> 0.00 No
Note.png Note:  Don't forget the "Delays" and the "Only Once"


  • logic_coop_manager Outputs
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnChangeToAllTrue relay_return_hub Trigger <none> 0.00 No
Io11.png OnChangeToAllTrue panel_level_return_orange Check <none> 0.00 No
Io11.png OnChangeToAllTrue panel_level_return_blue Check <none> 0.00 No
  • relay_return_hub Outputs
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger script_return_hub RunScriptCode ReturnToHubFromLevel() 1.00 Yes


  • @relay_has_new_taunt Outputs
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger brush_new_taunts Enable <none> 0.00 Yes


  • prop_button Outputs
My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnButtonReset panel_level_return_orange Stop <none> 0.00 No
Io11.png OnButtonReset coopmanage_return_hub SetStateBFalse <none> 0.00 No
Io11.png OnPressed panel_level_return_orange Start <none> 0.00 No
Io11.png OnPressed coopmanage_return_hub SetStateBTrue <none> 0.00 No


That's it! You now can create co-op maps with working co-op scripting!