De/Level Transition (Portal 2)
Coop
Hier ist ein Weg um Test-Raum-Sequenzen für Coop-Kapmagnen zu erstellen.
Erstelle deine Map
Um zu beginnen Erstelle eine Coop-Map. Nun füge eine func_instance hinzu und ändere die VMF Datei zu instances/coop/coop_lighting_ents.vmf. (Das einzige was wir in ihr verwenden ist point_servercommand.)
Modifiziertes Endlevel
Die Ende-des-Levels Einheit befindet sich in der instances/coop/coop_endlevel_room.vmf Instanz und beinhaltet die Funktion, die Map zu beenden.
In einem kleinen Raum in dieser Map findest Du ein logic_script genannt transition_script. (Du kannst den Find Entities Befehl nutzen um es auszuwählen.) Du wirst sehen, dass seine Entity Scripts Eigenschaft auf debug_scripts/mp_coop_transition_list.nut gestellt ist.
Verändere nicht diese Datei! Sie ist Teil von Portal 2 und Du willst sie in GLaDOS Namen nicht anfassen. Verändere stattdessen die Entity Scripts Eigenschaft um auf eine Map deiner Wahl zu verweisen-- z.B. debug_scripts/my_mp_coop_transition_list.nut. Jetzt speichere die Map.
Gehe zurück zu deinem Coop Level, wähle die func_instance aus, die deinen Endlevel Raum beinhaltet, und editiere die VMF Datei um auf deine modifizierte Version zu verweisen.
Modifiziertes Script
Gehe jetzt zu scripts/vscripts/debugscripts in der Portal 2 Installation und erstelle dieses script. (Erneut, verändere in GLaDOS Namen nicht das Valve script.) Alles was Du wirklich brauchst sieht so aus:
// 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 deine geordnete Map-Liste. (Für diejenigen unter Euch die mit der Programmiersprache Squirrel nicht vertraut sind, beachtet bitte, dass jede map in Anführungszeichen gesetzt wird und es muss ein Komma zwischen jede map gesetzt werden. Die letzte map bekommt kein Komma... und vergesst nicht die letzte eckige Klammer!)
Um nach deiner Map 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. Compiliere sie alle.
Jetzt kannst Du deine maps testen. Lade einfach die erste Map und spiel 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 eine Vernetzung wie im Spiel zu erstellen. Schau dir mp_coop_transition_list.nut an für Inspirationen.)
Einzelspielermodus
Der Einzelspielermodus ist ähnlich.
Modifizierter Übergangs Manager
Im Einzelspielermodus befindet sich die Ende-des-Levels Einheit in der func_instance arrival_departure_transition_ents.vmf im maps/instances/transitions Ordner. Lade diese map in Hammer und speicher sie unter einem anderen Namen, wie zum Beispiel my_arrival_departure_transition_ents.vmf.
Innerhalb dieser Einheit, befindet sich im kleinsten Raum ein logic_script genannt @transition_Script. Die Script Einheit Eigenschaften (Script Entity Properties) dieses scripts verweisen auf transitions/sp_transition_list.nut.
Verändere nicht diese Datei! (...GLaDOS). Verweis bitte stattdessen auf eine von dir erstellte Kopie z.B. transitions/my_sp_transition_list.nut.
Während Du schon hier bist, kannst Du optional den game_text genannt @end_of_playtest_text ändern um eine Textzeile nach dem Ende der letzten Map anzuzeigen. Ändere dafür einfach die Message Text Eigenschaften.
Speicher deine modifizierte VMF Datei.
Modifiziertes script
Es passiert erstaunlich viel im script, selbstverständlich wäre eine einfachere Version ausreichend für eine simple Serie von Testräumen. Da Du dich aber entschlossen hast, nicht den easy way zu gehen, ist hier das 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 werde in Anführungszeichen gesetzt und haben ein Komma danach, außer bei der letzten map. Und vergess 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 tatsächliche Einheit (Logic) um maps zu wechseln befindet sich in TransitionFromMap. Um Portal 2 nach dem Anzeigen des End-Txtes zum Hauptmenü wechslen zu lassen, such nach diesen Zeilen:
EntFire( "end_of_playtest_text", "display", 0 )
EntFire( "@end_of_playtest_text", "display", 0 )
und füge diese Zeile nach diesen ein:
EntFire( "@command", "Command", "disconnect", 2.0 )
Speicher deine Datei. (Achtung, speichere deine modifizierte Kopie dieser .nut file-- Überschreibe nicht die Valve Datei in GLaDOS Namen!)
Compile and test
Erstelle und compiliere 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 deine erste ö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.