Inhalt | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Allgemeines Vor einiger Zeit wurde ich auf ein scheinbar seltsames Programm namens O² aufmerksam, das man wohl dazu benötigte, Modelle für OFP zu erstellen. Tja, nach etlichen, wieder gelöschten Versuchen und einigen gelesenen Tutorials von Brsseb kam mir das neue Wissen gerade recht.Für meine nächste Mission brauche ich unbedingt solche Objekte wie begehbare Pipelines und für die Atmosphäre ein paar Pumpen, sowie einen Hafen, den ich an meine Vorstellung anpassen konnte und einen Öltanker. Aus dieser Grundidee entwickelte sich nach und nach dann das Oil-Addon, wie ihr es jetzt vor euch habt. Auf der Suche nach einer Lösung, die Pipelines dem Terrain anzupassen, ohne eine "keep height"-Variante benutzen zu müssen, entstand die Idee, die Pipes zu animieren. Leider wusste ich da noch nicht über alle Probleme bescheid, die das mit sich bringen würde. Aber im Endeffekt ist es jetzt eine ganz brauchbare Alternative, mit der Möglichkeit auch an steileren Stellen Pipes ohne Verzerrungen am Modell zu bauen. Für die Inselersteller (und alle Anderen natürlich auch) gibt es zumindest die 20m Pipeline trotzdem als "keep-height"-Variante, es ist aber zu beachten, dass der Untergrund dabei möglichst eben sein sollte. Wie sich die Pipes "per Hand" erstellen lassen, erfahrt ihr im Kapitel Die Scripte. So, genug gelabert, viel Spass beim Mappen! Features des Oil-Addon
Änderungen Änderungen am OA1 von v1.00 zu v1.01:
Änderungen am OA1 von v1.01 zu v1.02:
Die Modelle Hier findet ihr eine Liste mit allen enthaltenen Objekten, deren Bezeichnungen und Eigenschaften. Zu finden sind die Objekte im Editor unter "Mapfact OA - Objekte" bzw. "Mapfact OA - Fahrzeuge".
Tipp: Es scheint leider so zu sein, dass der Tanker Lags verursacht, sobald er in die Nähe anderer Objekte kommt. Wenn ihr den Tanker also am Hafen vor Anker liegen habt, benutzt die "Static"-Version, da bei dieser das Problem nicht auftritt. Soll der Spieler auch die Möglichkeit bekommen mit dem Tanker zu fahren, empfiehlt sich ein einfaches Replacescript, mit dem ihr die Tanker gegeneinander austauscht, sobald es nötig ist. Die Scripte Alle Scripte liegen in der pbo "MAP_OilAddon_script".Aufgerufen werden sie also mit ... exec "\MAP_OilAddon_script\... .sqs" Pipebuilder.sqs ---- Beispielmap enthalten Der Pipebuilder.sqs ist zusammen mit einem weiteren Script für das Bauen der Pipelines zuständig. Um diese dem Terrain anzupassen, werden sie vom Script animiert (standardmäßig stehen die Pipes senkrecht nach oben). Das zweite Script arbeitet automatisch nachdem eine Pipe gebaut wurde (es sei denn diese besteht nur aus "keep-height"-Stücken) und sorgt dafür, dass auch nach dem Neuladen die einzelnen Segmente wieder in ihre richtige Position gekippt werden. Da beide Scripts geloopt sind, kann es zu entsprechenden Verzögerungen kommen, die sich nach der Länge der Pipe richten. Generell lässt sich noch sagen, dass die meisten Fehler beim Aufrufen des Scripts nicht gleich zu OFP-Fehlermeldungen führen, sondern Hints darauf hinweisen. Erst bei schwereren Fehleingaben gibt es dann klassische OFP-Meldungen. Hier eine genaue Erklärung, wie der Pipebuilder aufgerufen wird: Beispiel: [Name,1500,0,[[Kurve1],[Kurve2],...],[[Objekt1],[Objekt2],...],1,2] exec "\MAP_OilAddon_script\Pipebuilder.sqs" Erklärung: Name: Muss ein Pipeline-Objekt sein, nach dieser Vorgabe richtet sich das Script und baut die weiteren Segmente. Gebt dem Objekt einfach einen Namen und benutzt diesen, oder schreibt direkt in die Init [this,.....] Das kann alles sein außer: "Pipeline 20m (Über Straßen)" "Pipeline 20m (Über Straßen, "keep height")" "Pipeline 20m (Über Straßen, begehbar)" "Pipeline 20m (Über Straßen, begehbar, "k.h.")" "Pipeline 16m Einstieg" Es gibt drei verschiedene Arten von Pipelines die das Script bauen kann. Wenn euer Startobjekt eines der animierten ist, wird eure gesamte Pipeline aus diesen animierten Stücken bestehen. Wenn ihr als Startobjekt eines der "keep-height"-Stücke setzt und das Script aufruft gibt es dann zwei weitere Möglichkeiten: 1) Es wird eine Pipeline gebaut die nur aus "keep-height"-Segmenten besteht, allerdings auch an sehr steilen Stellen! Denkt daran dass das Verzerrungen am Modell mit sich bringt! 2) Euer Startobjekt ist auch in diesem Fall eines der "keep-height"-Stücke, aber ihr schreibt an die letzte Stelle in den Array mit dem ihr das Script aufruft noch zusätzlich den Text "mixed". In dem Beispiel weiter oben würde das dann so aussehen: "[....,1,2,"mixed]" exec. Das wird das Script dazu bringen die Pipeline aus "keep-height"-Stücken zu bauen, aber nur an Stellen die weniger Steil als 5° auf 20m sind (also ungefähr eine Höhendifferenz von 1.7m). An steileren Stellen werden dann animierte Segmente eingebaut. Achtung: Die Gesamtlänge der Pipeline wird sich wahrscheinlich leicht verändern wenn ihr zwischen diesen Methoden wechselt. Die Vor-und Nachteile dieser Methoden: Nur animierte Stücke: - Nach dem Zerstören kann es Probleme mit der Animation geben - Nach dem Neuladen des Spielstands müssen alle Stücke erneut animiert werden, das kann also auffallen. Nur "keep-height": - Die Modelle werden an Steigungen verzerrt - Passgenau aneinandergebaute Segmente - Durch Neuladen oder Zerstören treten keine Probleme auf "Mixed"-Methode: - Jeweils die Vor-und Nachteile der anderen Methoden - Die Übergänge zwischen den animierten und den "keep-height"-Stücken sind sichtbar 1500: Gibt die Gesamtlänge der Pipe in Metern an. 0: 0° oder 180° vom Startobjekt aus, d.h. es können 2 Scripte vom selben Startobjekt aus aufgerufen werden, die dann in die jeweils andere Richtung bauen. Ist natürlich nur bedingt sinnvoll. Kurven: Um eine Kurve zu erzeugen, benötigt man folgendes: [wann,Richtung in Grad,"Härte"] also z.B. [200,-50,0.4] ergibt nach 200m eine Kurve um 50° nach links, mit der Härte 0.4, wobei 1 das Maximum wäre. Kurven lassen sich nur bei der 20m-Pipe bauen (s.a. Objekte) Sollen keine Kurven gebaut werden, bleibt der Array leer. Objekte: Richten sich nach der gebauten Pipe Art, diese Kombinationen sind möglich: Pipe 16m, alles außer: "MAP_Pipeline_16m" , "MAP_Pipeline_16m_End" Pipe 20m, alles außer: "MAP_Pipeline_20m" , "MAP_Pipeline_20m_kh" , "MAP_Pipeline_20m_WK" , "MAP_Pipeline_20m_WK_kh" , "MAP_Pipeline_20m_End" , "MAP_Pipeline_20m_End_kh" , "MAP_Pipeline_20m_End_WK" , "MAP_Pipeline_20m_End_WK_kh" Aufgerufen wird standardmäßig so [400,"Objekt"] => ergibt nach 400m das Objekt. Es gibt beim "MAP_Pipeline_Entrance" noch die Möglichkeit (nur wenn die 16m pipe gebaut wird) die Pipe an dieser Stelle abknicken zu lassen, so dass sich auch bei der 16m Pipe "Kurven" bauen lassen: [500,"MAP_Pipeline_Entrance",16] => ergibt einen Einstieg an dem die Pipe um 16° nach rechts abknickt. Max ist 30°. Sollen keine Objekte gebaut werden, bleibt auch dieser Array leer. 1: Legt fest ob die Pipe mit dem entsprechenden Endstück abgeschlossen werden soll oder nicht. 0 ergibt keins, alles andere lässt eines bauen (also auch jeder andere Mist, nur halt nicht 0 :) 2: Legt eine Verzögerung fest, die von dem Überwachungsscript verwendet wird. Je nach dem, wartet das Script länger, bis es wieder fragt, ob neu geladen wurde (Alle Segmente müssen nach dem Neuladen wieder animiert werden). Minimum ist 0. Zahlen kleiner 0 sind nicht erlaubt. Standardmäßig ist eine Verzögerung von 1s eingestellt, zu dieser wird der eingegebene Wert addiert. Das dient dazu, dem Mapper mehr Einfluss auf die Performance zu geben. Das Script schreibt beim Durchlaufen alle gebauten Objekte in einen Array, und speichert den unter der Variable MAP_OA_PbObjects ab. Hier habt Ihr also jederzeit die Möglichkeit, aus diesem Array die Objekte auszuwählen, um sie z.B. zu animieren etc. Überblick über die wichtigsten Funktionen
Variabeln Um die Explosions, Rauch- und Soundeffekte auszuschalten, wird die Variable MAP_OA_FX = false gesetzt. Die Ölpumpen sind im Multiplayer aus Performancegründen (Desync!) deaktiviert. Um sie dennoch zum Laufen zu bringen muß die Variable MAP_OA_MPPumpAnim = true gesetzt werden. Wie stark die Ölquelle raucht richtet sich nach der Performance des Rechners. Über die Variable MAP_OA_Smoke kann das aber auch direkt eingestellt werden: Der Wert 0 (MAP_OA_Smoke = 0) schaltet den Rauch komplett ab. Ab einem Wert von 1 raucht eine Ölquelle dann schwach. Bei einem Wert von 4 ist der Rauch am stärksten (nur ganze Zahlen). MAP_OA_noReanimShip Setzt diese Variable auf true, wenn ihr wollt, dass die Beiboote nach dem Wassern nicht versteckt bleiben, sondern auch manuell neu an den Tanker gehängt werden können. Benutzt dann die Animation für die Boote und diese Variable. Wichtige Scripte im Überblick:
Achtung! Nur mit weiß unterlegte Scripte sind ausdrücklich dazu gedacht, direkt aufgerufen zu werden. Bei den Anderen besteht keine Garantie, dass ein direktes Aufrufen keinen Fehler verursacht! Animationen Überblick über alle animierten Objekte
Achtung: Da einige Objekte über Scripte animiert werden, kann ein direktes Ausführen einer Animation evtl. einen Fehler produzieren. Danksagung Also, ich danke erst einmal den Leuten, die O²-Tutorials geschrieben haben. ;-) Dann den Personen, die direkt an der Entwicklung beteiligt waren: raedor: Config, alle MAP_x Scripte, Überarbeitung und Optimierung aller Scripte hinsichtlich der Performance und der Funktionalität im MP, Funktionen, Betatesting Sniping-Jack: Sound-und Texturbearbeitung, technische Betreuung und Anregungen, Betatesting Und den Betatestern: BadAss Chneemann Medicus Sky Und zu guter letzt allen, die bei Fragen Antworten hatten oder sonst irgendwie behilflich waren ;-) DANKE! Haftungsausschluss Dies ist ein inoffizielles Addon für Operation Flashpoint © Bohemia Interactive Studio. Für Schäden, die durch dieses Addon entstehen, wird keine Haftung übernommen. Benutzung auf eigene Gefahr. Mapfact Oil-Addon © Flashpoint_K. Für Fragen jeglicher Art zum Addon schreibt eine Mail an Flashpoint_K@web.de oder postet im Mapfact forum in den entsprechenden Thread. |