De/Level Transition (Portal 2): Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
m (obsolete language category)
 
(27 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{lang|Level Transition (Portal 2)}}
=Coop=
=Coop=
Hier ist ein Weg um Test-Raum-Sequenzen für Coop-Kapmagnen zu erstellen.
Dies ist eine Anleitung, wie eine Serie von Testräumen für Coop-Kapmagnen erstellt werden kann.


==Erstelle deine Map==
==Erstelle deine Map==


Um zu beginnen [[Creating a Portal 2 Coop Map|Erstelle eine Coop-Map]]. Füge eine [[func_instance]] hinzu und ändere die VMF Datei zu instances/coop/coop_lighting_ents.vmf. (Alles was wir benutzen ist [[point_servercommand]] in ihr.)
Um zu beginnen, {{L|Creating a Portal 2 Coop Map|Erstelle eine Coop-Map}}. Nun füge eine {{L|func_instance}} hinzu und ändere die VMF-Datei zu instances/coop/coop_lighting_ents.vmf. Wir verwenden lediglich das {{L|point_servercommand}} daraus.


==Modifed endlevel==
==Modifiziertes Endlevel==
The end-of-map logic lives within the instances/coop/coop_endlevel_room.vmf instance.  Load this map within Hammer and '''save a copy of it'''-- e.g. my_coop_endlevel_room.vmf. 


In a little room in this map you'll find a [[logic_script]] named transition_script. (You can use the Find Entities command to select it.)  You'll see that its Entity Scripts property is set to debug_scripts/mp_coop_transition_list.nut.
Die Funktion, die das Level beendet, befindet sich in der instances/coop/coop_endlevel_room.vmf-Instance. Lade diese Instance in Hammer und speichere eine Kopie davon, zum Beispiel als my_coop_endlevel_room.vmf.
In einem kleinen Raum in dieser Instance findest Du ein {{L|logic_script}} namens transition_script. Du kannst den Find-Entities-Befehl benutzen, um es auszuwählen. Du wirst sehen, dass die Entity-Scripts-Eigenschaft auf debug_scripts/mp_coop_transition_list.nut gestellt ist.


'''Don't modify that file!''' It's part of Portal 2 and you don't want to touch it. Instead, change the Entity Scripts property to point to a script of your own-- e.g. debug_scripts/my_mp_coop_transition_list.nut. Then save the map.
'''Verändere um GlaDOS' Willen nicht diese Datei!''' Sie ist ein wichtiger Teil von Portal 2. Verändere stattdessen die Entity-Scripts-Eigenschaft, um auf Dein eigenes Script zu verweisen – zum Beispiel debug_scripts/my_mp_coop_transition_list.nut. Jetzt speichere die Instance.


Go back to your coop level, select the func_instance containing the endlevel room, and edit its VMF file to point to your modified version.   
Gehe zurück zu deinem Coop-Level, wähle die func_instance aus, die deinen End-Level-Raum beinhaltet, und ändere die VMF-Datei, um auf deine modifizierte Version zu verweisen. In diesem Beispiel also my_coop_endlevel_room.vmf.


==Modified script==
==Modifiziertes Script==
Now go to scripts/vscripts/debugscripts in the Portal 2 installation and create this script. (Again, don't touch the Valve script.)  All you really need is something like this:  
Gehe jetzt zu scripts/vscripts/debugscripts in Deinem \Portal 2\Portal2-Odner und erstelle das Script, in diesem Beispiel also my_mp_coop_transition_list.nut (Noch einmal: Verändere um GLaDOS Willen nicht das Original-Valve-Script!). Was Du in diesem neuen Script brauchst, ist so etwas:


<source lang="text">
<source lang="text">
Line 62: Line 65:
</source>
</source>


The array at the top, MapPlayOrder, is your list of maps in order. (For those not familiar with Squirrel, note that each map is enclosed in quotes, and there must be a comma ''in between'' each map. That is, the last map doesn't get a comma after it. And don't lose that final bracket!)
Das obere Feld, MapPlayOrder, ist eine Liste Deiner Maps in der richtigen Reihenfolge. Für diejenigen unter Euch, die mit der Programmiersprache Squirrel nicht vertraut sind: Beachtet bitte, dass jede Map in Anführungszeichen gesetzt und ein Komma ''zwischen'' jede Map gesetzt werden muss. Die letzte Map bekommt kein Komma. Vergesst nicht die abschließende eckige Klammer!
 
Um nach Deiner Map zurück zur Lobby zu kommen, füge "mp_coop_lobby_2" als letzte Map in der Liste hinzu (MapPlayOrder).


To go to the lobby after your maps, add "mp_coop_lobby_2" as the last map in the list (MapPlayOrder).
==Testen==
Erstelle deine Coop-Maps und nutze deinen modifizierten Endlevel-Raum anstelle des vorgegebenen. Kompiliere alle Maps.


==Testing==
Jetzt kannst Du {{L|Testing Portal 2 Co-Op Maps Alone|Deine Maps testen}}. Lade einfach die erste Map und spiele sie. Wenn Du an ihrem Ende angelangt bist, wird Portal 2 zur nächsten Map wechseln. Sobald Du am Ende der Liste angekommen bist, wirst Du einfach zum Hauptmenü zurückkehren.
Make the additional coop maps, using your modified endlevel room instead of the default one. Compile them all.


Now you can [[Testing Portal 2 Co-Op Maps Alone|test your maps]]. Just load the first map and play it.  When you get to the end, Portal 2 will switch to the next map. Once it gets to the end it will simply exit to the main menu.
Diese Methode kann erweitert werden, um ein Hub-Level wie im Spiel zu erstellen. Schau dir mp_coop_transition_list.nut für Inspirationen an.


(This method could be extended to create a hub as in the game. Look at mp_coop_transition_list.nut for ideas.)
=Einzelspielermodus=
Das Prozedere für den Einzelspielermodus ist ähnlich.


=Single-player=
==Modifizierter Übergangs Manager==
The single-player case is similar. 


==Modifed transition manager==
Im Einzelspielermodus befindet sich die Funktion, die das Level beendet, in der {{L|func_instance}} arrival_departure_transition_ents.vmf im maps/instances/transitions-Ordner. Lade diese Instance in Hammer und '''speichere sie unter einem anderen Namen''', zum Beispiel my_arrival_departure_transition_ents.vmf.
In single player, the end-of-level logic lives in the [[func_instance]] arrival_departure_transition_ents.vmf in the maps/instances/transitions folder. Load this map in Hammer and '''save it under another name''', such as my_arrival_departure_transition_ents.vmf.


Within this instance, the smallest room contains a [[logic_script]] named @transition_Script. Its Script Entity property points to transitions/sp_transition_list.nut.
In dieser Instance befindet sich im kleinsten Raum ein {{L|logic_script}} namens @transition_Script. Die Script-Entity-Eigenschaften dieses Scripts verweisen auf transitions/sp_transition_list.nut.


'''Don't modify that file'''. Instead, point the property to a copy of your own, e.g. transitions/my_sp_transition_list.nut.
'''Verändere nicht diese Datei! (...GLaDOS)'''. Verweise stattdessen auf eine von dir erstellte Kopie, zum Beispiel transitions/my_sp_transition_list.nut.


While you're here, you might optionally change the [[game_text]] named @end_of_playtest_text to display a line of text after the last mapJust change the Message Text property.
Wenn Du schon hier bist, kannst Du optional auch den {{L|game_text}} namens @end_of_playtest_text ändern, um eine Textzeile nach dem Ende der letzten Map anzuzeigenÄndere dafür in den Eigenschaften einfach den Message Text.


Save your modified VMF file.
Speichere diese modifizierte VMF Datei.


==Modified script==
==Modifiziertes Script==
There is a lot going on inside this script, and undoubtedly a much simpler version would do for a simple series of testchambers. However, here's the minimum you must do.
Es passiert viel in diesem Script, zweifellos wäre eine einfachere Version ausreichend für eine simple Serie von Testräumen. Es gibt aber ein Minimum, das Du tun musst.


Look for the list of maps and search for "demo_paint", the last map in the file. Add your maps after this. (Again, map names are in quotes, and there's a comma afterward ''except'' for the last map. And don't lose the final bracket.)  
Geh in die Liste der Maps und suche nach "demo_paint", der letzten Map in der Datei. Füge deine Maps dahinter ein. (Bedenke: Map-Namen werden in Anführungszeichen gesetzt und es folgt nach jeder Map ein Komma ''außer'' bei der letzten Map. Und vergiss nicht die eckige Klammer am Ende.)


The result should look like this:
Das Resultat sollte wie folgt aussehen:


<source lang="text">
<source lang="text">
Line 110: Line 114:
</source>
</source>


The actual logic to change maps is in TransitionFromMap. To make Portal 2 exit to the main menu after displaying the end text, look for these lines
Die eigentliche Funktion, um Maps zu wechseln, befindet sich unter TransitionFromMap. Um Portal 2 nach dem Anzeigen des End-Textes zum Hauptmenü wechseln zu lassen, such nach diesen Zeilen:


<source lang="text">
<source lang="text">
Line 117: Line 121:
</source>
</source>


and add this line after them:
und füge danach diese Zeile ein:
<source lang="text">
<source lang="text">
EntFire( "@command", "Command", "disconnect", 2.0 )
EntFire( "@command", "Command", "disconnect", 2.0 )
</source>
</source>


Save the file. (Again, you're saving your modified copy of this .nut file-- don't overwrite the Valve file!)
Speichere Deine Datei. Achtung: Speichere Deine modifizierte Kopie dieser .nut-Datei, in diesem Beispiel also my_sp_transition_list.nut. Überschreibe nicht die Valve-Datei!


==Compile and test==
==Kompiliere und teste==
Make and compile the additional maps. You can now go back to your first map and run it from Hammer; Portal 2 will load and put you into your first map. When you get to the end it'll run the next map from the script, and exit to the main menu when all are done.
Erstelle und kompiliere deine zusätzlichen Maps. Jetzt kannst Du zurück zu deiner ersten Map gehen und sie von Hammer aus starten; Portal 2 wird laden und diese erste Map öffnen. Wenn Du am Ende angekommen bist, wird Portal 2 deine nächste Map vom Script laden und zum Hauptmenü wechseln, nachdem alle geschafft sind.  




[[Category:Portal 2 Tutorials]]
[[Category:Portal 2 Tutorials]] {{ACategory|Portal 2 Level Design}}

Latest revision as of 03:14, 22 August 2024

English (en)Deutsch (de)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)

Coop

Dies ist eine Anleitung, wie eine Serie von Testräumen für Coop-Kapmagnen erstellt werden kann.

Erstelle deine Map

Um zu beginnen, Erstelle eine Coop-Map(en). Nun füge eine func_instance(en) hinzu und ändere die VMF-Datei zu instances/coop/coop_lighting_ents.vmf. Wir verwenden lediglich das point_servercommand(en) daraus.

Modifiziertes Endlevel

Die Funktion, die das Level beendet, befindet sich in der instances/coop/coop_endlevel_room.vmf-Instance. Lade diese Instance in Hammer und speichere eine Kopie davon, zum Beispiel als my_coop_endlevel_room.vmf.

In einem kleinen Raum in dieser Instance findest Du ein logic_script(en) namens transition_script. Du kannst den Find-Entities-Befehl benutzen, um es auszuwählen. Du wirst sehen, dass die Entity-Scripts-Eigenschaft auf debug_scripts/mp_coop_transition_list.nut gestellt ist.

Verändere um GlaDOS' Willen nicht diese Datei! Sie ist ein wichtiger Teil von Portal 2. Verändere stattdessen die Entity-Scripts-Eigenschaft, um auf Dein eigenes Script zu verweisen – zum Beispiel debug_scripts/my_mp_coop_transition_list.nut. Jetzt speichere die Instance.

Gehe zurück zu deinem Coop-Level, wähle die func_instance aus, die deinen End-Level-Raum beinhaltet, und ändere die VMF-Datei, um auf deine modifizierte Version zu verweisen. In diesem Beispiel also my_coop_endlevel_room.vmf.

Modifiziertes Script

Gehe jetzt zu scripts/vscripts/debugscripts in Deinem \Portal 2\Portal2-Odner und erstelle das Script, in diesem Beispiel also my_mp_coop_transition_list.nut (Noch einmal: Verändere um GLaDOS Willen nicht das Original-Valve-Script!). Was Du in diesem neuen Script brauchst, ist so etwas:

// Map order
MapPlayOrder<- [
"mp_coop_easiest",
"mp_coop_easiest_two"
]

function TransitionFromMap()
{	
	local nextmap = -2
	
	// Loop through maps
	foreach( index, map in MapPlayOrder )
	{
		if( GetMapName() == MapPlayOrder[index] )
		{
			// This is the map we're on
			nextmap = -1
		}
		else 
		{
			if (nextmap == -1)
			{
				// This is the first map past that one
				nextmap = index
			}
		}
	}
		
	printl( "nextmap = " + nextmap )
		
	if (nextmap > 0)
	{
		// We found a map; go to it
		EntFire( "@command", "command", "changelevel " + MapPlayOrder[nextmap], 1.0 )
	}
	else
	{
		// No map found; we're done
		EntFire( "@command", "command", "disconnect", 2.0 )
	}
}

Das obere Feld, MapPlayOrder, ist eine Liste Deiner Maps in der richtigen Reihenfolge. Für diejenigen unter Euch, die mit der Programmiersprache Squirrel nicht vertraut sind: Beachtet bitte, dass jede Map in Anführungszeichen gesetzt und ein Komma zwischen jede Map gesetzt werden muss. Die letzte Map bekommt kein Komma. Vergesst nicht die abschließende eckige Klammer!

Um nach Deiner Map zurück zur Lobby zu kommen, füge "mp_coop_lobby_2" als letzte Map in der Liste hinzu (MapPlayOrder).

Testen

Erstelle deine Coop-Maps und nutze deinen modifizierten Endlevel-Raum anstelle des vorgegebenen. Kompiliere alle Maps.

Jetzt kannst Du Deine Maps testen(en). Lade einfach die erste Map und spiele sie. Wenn Du an ihrem Ende angelangt bist, wird Portal 2 zur nächsten Map wechseln. Sobald Du am Ende der Liste angekommen bist, wirst Du einfach zum Hauptmenü zurückkehren.

Diese Methode kann erweitert werden, um ein Hub-Level wie im Spiel zu erstellen. Schau dir mp_coop_transition_list.nut für Inspirationen an.

Einzelspielermodus

Das Prozedere für den Einzelspielermodus ist ähnlich.

Modifizierter Übergangs Manager

Im Einzelspielermodus befindet sich die Funktion, die das Level beendet, in der func_instance(en) arrival_departure_transition_ents.vmf im maps/instances/transitions-Ordner. Lade diese Instance in Hammer und speichere sie unter einem anderen Namen, zum Beispiel my_arrival_departure_transition_ents.vmf.

In dieser Instance befindet sich im kleinsten Raum ein logic_script(en) namens @transition_Script. Die Script-Entity-Eigenschaften dieses Scripts verweisen auf transitions/sp_transition_list.nut.

Verändere nicht diese Datei! (...GLaDOS). Verweise stattdessen auf eine von dir erstellte Kopie, zum Beispiel transitions/my_sp_transition_list.nut.

Wenn Du schon hier bist, kannst Du optional auch den game_text(en) namens @end_of_playtest_text ändern, um eine Textzeile nach dem Ende der letzten Map anzuzeigen. Ändere dafür in den Eigenschaften einfach den Message Text.

Speichere diese modifizierte VMF Datei.

Modifiziertes Script

Es passiert viel in diesem Script, zweifellos wäre eine einfachere Version ausreichend für eine simple Serie von Testräumen. Es gibt aber ein Minimum, das Du tun musst.

Geh in die Liste der Maps und suche nach "demo_paint", der letzten Map in der Datei. Füge deine Maps dahinter ein. (Bedenke: Map-Namen werden in Anführungszeichen gesetzt und es folgt nach jeder Map ein Komma außer bei der letzten Map. Und vergiss nicht die eckige Klammer am Ende.)

Das Resultat sollte wie folgt aussehen:

// ---------------------------------------------------
// 	Demo files
// ---------------------------------------------------
"demo_intro",
"demo_underground",
"demo_paint",

// ---------------------------------------------------
// 	Your title
// ---------------------------------------------------
"your_first_level",
"your_second_level"
]

Die eigentliche Funktion, um Maps zu wechseln, befindet sich unter TransitionFromMap. Um Portal 2 nach dem Anzeigen des End-Textes zum Hauptmenü wechseln zu lassen, such nach diesen Zeilen:

		EntFire( "end_of_playtest_text", "display", 0 )
		EntFire( "@end_of_playtest_text", "display", 0 )

und füge danach diese Zeile ein:

		EntFire( "@command", "Command", "disconnect", 2.0 )

Speichere Deine Datei. Achtung: Speichere Deine modifizierte Kopie dieser .nut-Datei, in diesem Beispiel also my_sp_transition_list.nut. Überschreibe nicht die Valve-Datei!

Kompiliere und teste

Erstelle und kompiliere deine zusätzlichen Maps. Jetzt kannst Du zurück zu deiner ersten Map gehen und sie von Hammer aus starten; Portal 2 wird laden und diese erste Map öffnen. Wenn Du am Ende angekommen bist, wird Portal 2 deine nächste Map vom Script laden und zum Hauptmenü wechseln, nachdem alle geschafft sind.