.| Autor | Beitrag |
|---|---|
|
000 28.09.2011, 20:27 Albatros |
Hi, ich verzweifle. Für unsere Mod namens Zeitgeist sind wir gerade daran gegangen, unser Transportsystem zu verbinden. Das heißt, dass wir mehr als ein Dutzend U-Bahn-Stationen verbinden müssen, und davon jeweils 2-6 Gleise. Die Idee ist, dass ein Zug den Spieler zum (sonst nicht erreichbaren) Trigger trägt und er sich in Fahrtrichtung eine Station auswählen kann. Wir haben eine eigene Entity geschrieben, die den Player die nächste Map auswählen lässt. Soweit funktioniert das alles peachy, solange man von Map A nach Map B will; von Map A nach Map C geht auch, aber von Map B nach Map C spawne ich immer irgendwo im Void. Das Setup: Bisher arbeiten wir mit trigger_changelevel_underground (ein trigger, der den mapchange initialisiert), trigger_changelevel und info_landmarks. Beispielsweise sitzt am westlichen Ende von Gleis A der Station A ein trigger_changelevel_underground mit landmark "a0" definiert. Außerdem die landmark "a0" in der Nähe, und dann noch (zum Verbindung finden) eine ganze Palette mit trigger_changelevels, für jede übrige Map einen Eintrag pro trigger_changelevel und als landmark auch "a0" definiert. Am östlichen Ende von Gleis A der Station B sitzt die ganze Apparatur nochmal, also trigger_changelevel_underground, landmark und trigger_changelevels, alle mit "a0". Am westlichen Ende von Gleis A der Station B wieder das gleiche Spiel, nur dass hier landmark "a1" definiert ist und sich befindet. Am östlichen Ende also von Gleis A der Station C wieder die besagten Entities, "a1" als landmark eingetragen und am westlichen ende das Gleiche mit "a2" als landmark, und so weiter und so fort. Das Problem: Von Station A zu Station B kann der Übergang super klappen. Bin ich mit der Spawnlocation nicht zufrieden, schiebe ich die Landmark herum und beim nächsten Compile passt alles. Das gleiche gilt für Station A zu Station C. Von Station B zu Station C aber klappt zwar der Levelchange, doch spawne ich durchweg im Void. Verschieben von info_landmark, trigger_changelevel und / oder trigger_changelevel_underground hat keinerlei Effekt auf die Spawnlocation des Players. Ich habe das ganze zwischenzeitlich mit einer Station D getestet, in der keinerlei Entities außer einem Light und einmal die beiden trigger und das landmark waren; dort konnte ich durch verschieben der drei entities die Spawnlocation nach belieben ändern, nur hatte dann HL viele Entities aus der Ursprungsmap mit rübergeholt. Die Fragen: Nach welcher Vorgehensweise berechnet Hl2 die neue Location des Players? Welche Rollen spielen info_landmark und ihre Platzierung? Welche Rolle spielt die Umgebungsgeometrie, das Brushwork, die Entities? Und: kann ich aus einer Map überhaupt einen Levelchange in eine andere machen, wenn die Geometrie völlig und komplett anders ist, quasi eine total andere Map, oder MUSS Source Teile der Map wiedererkennen? Ich danke euch echt herzlich für jede Idee, ich bin am Rande eines Burnouts hier. Eine Woche hänge ich schon dran und arbeite mich ohne Wirkung dran ab. Das bin ich einfach nicht gewohnt.
"...we're not retreating; we're just advancing in another direction!!!..." Dieser Beitrag wurde am 28.09.2011 um 20:28 von Albatros bearbeitet. |
|
Profil || Suche |
|
001 29.09.2011, 21:17 m_iace |
Ich denke mal: Landmarkpositionsvektor der Ursprungsmap wird vom Spielerpositionsvektor der Ursprungsmap abgezogen. Nach dem Levelchange ergibt sich die neue Spielerposiotion aus der Summe der Differenz und des Landmarkpositionsvektors der neuen Map. Befinden sich die Landmarks der einzelnen Level global an derselben Position? -- |
|
Profil || Suche |
|
002 29.09.2011, 23:13 Snut |
Die Landmarke ergibt in HL1 sozusagen den null-Punkt beim Levelchange. Im Verhältnis zu ihr findet der Change statt. In Hl2 dürfte es genau so sein. Edit: Ich vermute mal auch in HL2 muss sich in beiden Maps ein Playerstart befinden, sonst gibt es Probleme beim Wechseln. Edit2: In HL1 gibt es unter Worldspawn einen Option "New Level Unit". Vielleicht gibt es die in HL2 auch. Die bewirkt, dass die alten Entities nicht mit ins neue Level wechseln. --Dieser Beitrag wurde am 29.09.2011 um 23:26 von Snut bearbeitet. |
|
Profil || Suche |
|
003 30.09.2011, 20:49 m_iace |
Gibt es auch in HL2. Jedoch ist ein Verzicht auf alle Levelinformationen möglicherweise nicht angebracht. trigger_transition hat eine ähnliche Funktion, er sorgt dafür, dass nur die im Triggeer befindlichen Entitys "mitgenommen" werden. -- Dieser Beitrag wurde am 30.09.2011 um 20:50 von m_iace bearbeitet. |
|
Profil || Suche |
|
004 04.10.2011, 09:18 Albatros |
Hi und danke euch, ich war leider über das verlängerte Wochenende nicht da, deshalb erst jetzt meine Antwort. "Ich denke mal: Von wo aus berechnet sich der Landmarkpositionsvektor? Was ist für die Engine neben der Landmark noch Fixpunkt? Der Nullpunkt im Grid, oder das info_player_start, oder etwas anderes? Es muss ja einen Punkt geben, den Hl2 als Referenz nimmt, um Landmark- und Spielerpositionsvektor berechnen zu können, sonst hängen beide Vektoren ja beliebig im Raum. An sich ist die Erklärung schlüssig, bisher dachte ich auch, dass es auf diese Weise funktioniert. Aber meine trial-and-error Versuche haben mir keine verbindliche Regel aufgezeigt, so lange ich nicht weiß, wie Hl2 sich das Grid vor der Vektorenberechnung beim Transit "vorstellt". "Befinden sich die Landmarks der einzelnen Level global an derselben Position?" Nein, leider nicht! Das würde mir ziemlich viel Kopfzerbrechen bereiten, eben gerade weil in manchen Bahnhöfen 6 Gleise laufen, in anderen nur 2, und all diese Bahnhöfe auch noch überirdische, mit normalen trigger_changelevels verbundene Bereiche haben... Einen Testlauf mit simplen Maps kann ich schon machen, nur haben die mich bisher wie ich oben beschrieben hab auch bisher eher in die Irre geführt, weil die Regel, die in der einfachen Würfelmap galt, in der komplexen Stationsmap auf einmal nicht mehr galt. Wenn es irgend geht, will ich die Landmarks ohne Beschränkungen setzen können, bzw. wäre bei einer Festlegung auf die global selbe Position bei den Landmarks ziemlich schnell schluss mit Levelchanging, weil dann jede linienbezogene Landmark jeder Station am global gleichen Ort liegen müsste. Von A nach B geht das noch, auch von B nach C noch, aber von A nach C wäre es dann schon wieder unmöglich - ist das verständlich? "Edit: Ich vermute mal auch in HL2 muss sich in beiden Maps ein Playerstart befinden, sonst gibt es Probleme beim Wechseln." Playerstart ist leider in jedem Level vorhanden. "Edit2: In HL1 gibt es unter Worldspawn einen Option "New Level Unit". Vielleicht gibt es die in HL2 auch. Die bewirkt, dass die alten Entities nicht mit ins neue Level wechseln." Danke, das klingt nach einem heißen Tip. Abschließend denke ich, der entscheidende Punkt ist: was nimmt Hl2 als Referenzpunkt für die Berechnung der Position von Landmark und Player im Raum? Wenn die Vektorendifferenzen als Berechnungsgrundlage für die Playerposition im neuen Level fungieren, ist entscheidend, ob Source nur "relativ", quasi im freien Raum, verschiebt, oder ob es irgendeine Art von Referenzpunkt gibt, der die Verschiebung "global" ablaufen lässt und von in allen Levels gleichbleibender Gridposition abhängige Landmarkpositionen notwendig macht. Danke euch vielmals, Til --"...we're not retreating; we're just advancing in another direction!!!..." |
|
Profil || Suche |
|
005 04.10.2011, 15:44 Snut |
Ich versteh nich wirklich, wieso ihr euch soviel Gedanken über die Beziehung landmark und Levelmittelpunkt oder player macht. Beim Levelchange ist die Landmarke der Beziehungspunkt. Der TriggerlevelChange löst nur den Wechsel aus. Wenn du beim Levelchange also 64Units weg von der landmark bist, dann bist du im nächsten Level auch 64Units von der landmark entfernt. |
|
Profil || Suche |
|
006 05.10.2011, 11:35 Albatros |
Hi, "Das es trotzdem zu Problemen kommt, wenn sich die Architektur um die Landmark gravierend ändert." Das ist ja gerade das Problem. Wenn ich weiß, welchen Bezugspunkt die Landmark zur Ausrichtung im neuen Level verwendet, weiß ich auch, welchen Einfluss die Geometrie um die Landmark herum hat. Mittlerweile weiß ich, dass die Landmark im alten Level wohl die Entfernungen zu allen Wänden misst, und im neuen Level dann versucht, diese Entfernungen wieder zu "finden". Das Problem! allerdings, an dem wir uns die Zähne ausgebissen haben, war, dass unser trigger_changelevel_underground keine Positionsdaten des Players übermittelt hat. Sonst hätte vermutlich alles funktioniert. Jetzt schreiben wir das Ding so um, dass es normale trigger_changelevel aktiviert, die den Spieler dann an die gewünschte location bringen - am Wochenende weiß ich obs funktioniert. :) Nochmal danke an alle, die mitgedacht haben... falls jemand zukünftig Fragen zum Changelevel hat oder sich für Workarounds zur Geometrie interessiert, bin ich mittlerweile damit vertraut und gebe gerne Auskunft. Grüße, Til --"...we're not retreating; we're just advancing in another direction!!!..." |
|
Profil || Suche |




