De/Level Transition (Portal 2)

=Coop=
Dies ist eine Anleitung, wie eine Serie von Testräumen für Coop-Kapmagnen erstellt werden kann.
==Erstelle deine Map==
Um zu beginnen, . Nun füge eine hinzu und ändere die VMF-Datei zu instances/coop/coop_lighting_ents.vmf. Wir verwenden lediglich das 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 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 . 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 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 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 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. 
Category:Portal 2 Tutorials