Mapfact Oil-Addon

by Flashpoint_K


Visit www.mapfact.net



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

  • Voll Multiplayer-fähig
  • Zwei verschiedene Arten von Pipelines, beide begehbar
  • Schnelles und einfaches Bauen von Pipelines per Script
  • Animierte Ölpumpen mit zufällig festgelegten Sounds
  • Brennende Ölquelle mit eigenem Sound und Performanceanpassung
  • Einfache Verwendung der Effekte und Animationen durch Funktionen und Scripte
  • Voll animierter und begehbarer Hafenkran
  • Größtmögliche Kompatibilität der Objekte mit WrpTool und dem Editor gleichzeitig
  • Fast alle Objekte lassen sich vom Spieler benutzen und beinflussen
  • Öltanks und Bohrturm mit zusätzlichen Explosionen
  • Begehbare Öltanker, je nach Version mit Beibooten die gewassert werden können und MG. Warnsound bei Beschuss und Schiffshorn.


Änderungen

Änderungen am OA1 von v1.00 zu v1.01:
  • gefixt: alle vier Schiff Modelle
  • gefixt: craneControl.sqs
  • gefixt: Icon für statische Schiffe
  • gefixt: Sound nach dem Wassern der Beiboote wird nur noch einmal abgespielt
  • hinzugefügt: Variable "MAP_OA_noReanimShip"
  • verbessert: Texturen des Speedboats

Änderungen am OA1 von v1.01 zu v1.02:
  • gefixt: KI kann nun auch unter wrp gesetzten "kh" Pipes durchlaufen
  • gefixt: ein paar Kleinigkeiten
  • hinzugefügt: Neues Objekt, Abwasserrohr



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".

Editorname Configname Eigenschaften
Zäune und Zubehör
Bretterzaun 9m MAP_WoodFence_9m -
Stacheldrahtzaun 9m MAP_Fence_9m -
Stacheldrahtzaun Eckstück MAP_Fence_9m_Corner -
Warnschild MAP_Warnschild -
Hafenobjekte
Hafenkran MAP_Crane Türe, Drehen, Heben/Senken des Magneten
Anlegestelle #1 MAP_Dock1 -
Anlegestelle #1 (40m) MAP_Dock1_40m -
Anlegestelle #2 MAP_Dock2 -
Anlegestelle #2 (40m) MAP_Dock2_40m -
Anlegestelle #3 MAP_Dock3 -
Dock mit Bahngelände MAP_Dock4 -
Dock mit Gleisen #1 MAP_Dock5 -
Dock mit Gleisen #2 MAP_Dock6 -
Dock mit Gleisen #3 MAP_Dock7 -
Container (Grün) MAP_Container Erkletterbar
Container (Rot) MAP_Container2 Erkletterbar
Container (Gestapelt) MAP_ContainerS Erkletterbar
Container (rot, Türen) MAP_Container3 Begehbar, Türen
Gelagerte Pipelines MAP_Pipelines_Stored Begehbar
Gelagerte 20m Pipelines MAP_PLine_Big_Stored -
Kiste #1 MAP_Kiste1 -
Kiste #2 MAP_Kiste2 -
Kiste #3 MAP_Kiste3 -
Kabeltrommel MAP_Kabeltrommel -
Rammbock MAP_Rammbock -
AbwasserrohrMAP_SewagePipe-
Abwasserrohr (begehbar)MAP_SewagePipe_WK-
Gangway MAP_Gangway animiert
Ölobjekte
Erdölpumpe #1 MAP_OilPump1 Animiert und Sound, Useraction
Erdölpumpe #1 (on) MAP_OilPump1_on von Anfang an: Animiert und Sound, Useraction
Erdölpumpe #2 MAP_OilPump3 Animiert und Sound, Useraction
Erdölpumpe #2 (on) MAP_OilPump3_on von Anfang an: Animiert und Sound, Useraction
Erdölpumpe (kaputt) MAP_OilPump2 -
Erdölpumpe (kaputt #2) MAP_OilPump2v -
Ölturm MAP_OilTurret Erkletterbar
Ölturm (brennend) MAP_OilTurret_Burning Erkletterbar, Brennt
Pipeline 16m (begehbar) MAP_Pipeline_16m Begehbar, animiert
Pipeline 16m (zerstört #1) MAP_Pipeline_16m_Broken Begehbar, als Einstieg nutzbar, animiert
Pipeline 16m (zerstört #2) MAP_PLine_16m_Broken2 Begehbar, animiert
Pipeline 16m Endstück MAP_Pipeline_16m_End -
Pipeline 16m Einstieg MAP_Pipeline_Entrance Erkletterbar, animiert, Useraction
Pipeline 20m /("Keep Height") MAP_Pipeline_20m /_kh animiert bzw. "keep-height"
Pipeline 20m (begehbar) /(begehbar, "keep height") MAP_Pipeline_20m_WK /_kh begehbar; animiert bzw. "keep-height"
Pipeline 20m (zerstört) /(zerstört, "keep height") MAP_PLine_Big_Broken /_kh animiert bzw. "keep-height", raucht
Pipeline 20m (zerstört, begehbar) /(zerstört, begehbar, "k.h.") MAP_PLine_Big_Broken_WK /_kh begehbar; animiert bzw. "keep-height", raucht
Pipeline 20m Endstück MAP_Pipeline_20m_End /_kh animiert bzw. "keep-height"
Pipeline 20m Endstück ("Für Begehbare") MAP_Pipeline_20m_End_WK animiert
Pipeline 20m Endstück ("k.h. , für Begehbare") MAP_Pipeline_20m_End_WK_kh "keep-height"
Pipeline 20m (Über Straßen) /(Über Straßen, "keep height") MAP_Pipeline20mStrCross_kh animiert bzw. "keep-height"
Pipeline 20m (Über Straßen, begehbar) MAP_Pipeline20mStrCross_WK begehbar; animiert
Pipeline 20m (Über Straßen, begehbar, "k.h.") MAP_Pipeline20mStrCross_WK_kh begehbar; "keep-height"
Pipeline 20m (45° rechts) MAP_PLine_Big_curve_r 45° Kurve nach rechts
Pipeline 20m (45° links) MAP_PLine_Big_curve_l 45° Kurve nach links
Pipeline 20m (45° rechts, begehbar) MAP_PLine_Big_curve_r_WK Begehbare 45° Kurve nach rechts
Pipeline 20m (45° links, begehbar) MAP_PLine_Big_curve_l_WK Begehbare 45° Kurve nach links
Pipeline 20m Einstieg MAP_Pipeline20m_Entrance animiert
Öltank klein (orange) MAP_OilTank_Small Erkletterbar, kleine Explosion
Öltank klein (blau) MAP_OilTank_Small2 Erkletterbar, kleine Explosion
Öltank mittel MAP_OilTank_Medium Erkletterbar, Explosionseffekt
Öltank groß MAP_OilTank_Big Erkletterbar, Explosionseffekt
Öltank groß (doppelt) MAP_OilTank_Twin Erkletterbar, Explosionseffekt
Ölquelle MAP_OilWell Brennt und raucht ;-)
Ölquelle (brennend) MAP_OilWell_Burning Von Anfang an: Brennt und raucht ;-)
Baustelle MAP_BuildingSite Kleine Baustelle an einer Pumpe
Bretter MAP_ScrapW Herumliegende Bretter
Schrott (gemischt) MAP_Scrap Herumliegender Schrott
Schrott (Metall) MAP_ScrapM Herumliegende Stangen
Öllache #1 MAP_Spill1 -
Öllache #2 MAP_Spill2 -
Öllache #3 MAP_Spill3 -
Öllache #4 MAP_Spill4 -
Öllache #5 MAP_Spill5 -
Wasserfahrzeuge
Tanker MAP_Tankship Begehbar, Leitern, Animiert, Horn, Warnsirene
Tanker (Schmugglerversion) MAP_SmugglerShip Begehbar, Leitern, Animiert, Mg, Beiboote, Horn, Warnsirene
Schnellboot (Schmugglerversion) MAP_SmugglerBoat Mg
Tanker (Schmugglerversion, statisch) MAP_SmugglerShip_static Begehbar, Leitern, Animiert, Mg, Beiboote, Performancefreundlicher, Horn, Warnsirene
Tanker (statisch) MAP_Tankship_static Begehbar, Leitern, Animiert, Performancefreundlicher, Horn, Warnsirene


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

Aufruf Funktion
Name call MAP_oa_turretOn
Name call MAP_oa_turretOff
Zündet das Feuer auf dem Ölturm an, bzw. löscht es.
Name call MAP_oa_wellOn
Name call Map_oa_wellOff
Zündet die Ölquelle an bzw. löscht sie.
Name call MAP_oa_pumpOn
Name call MAP_oa_pumpOff
Schaltet die Pumpe an bzw. aus
Für alle Funktionen gilt: Aufruf wenn möglich erst ca. 1s nach Missionsstart. Fehler sind sonst möglich!


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:

Scriptname Aufgabe und Erklärung
BoatsDown.sqs Lässt die Beiboote zu Wasser. Kann automatisch über das Actionmenue an der richtigen Stelle auf dem Schiff ausgeführt werden. Ansonsten lautet der Aufruf [name,"Right/Left"] exec
Crane.sqs Öffnet die Türe des Krans und schließt sie automatisch nach 8 Sekunden wieder. Aufrufbar automatisch über Actionmenue oder über [Name] exec
MAP_OA_20mEntr.sqs Öffnet/Schließt die Türen. Aufrufbar automatisch über Actionmenue oder über Name exec
ShipHorn.sqs Löst das Schiffhorn aus. Aufrufbar automatisch über Actionmenue oder über Name exec
CraneContr.sqs Ist für die restlichen Animationen des Krans zuständig. Aufzurufen über [Name,Richtung in Grad relativ zur Richtung des Krans,heben und senken des Magneten in Meter relativ zur 0-Position] exec
(Beispielmap enthalten)
Pipebuilder.sqs Ist für den Bau der Pipelines zuständig, Erklärung s.o.


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

OA Hafenkran a_rotateR => Drehung der Beine des Krans um 360°
ani_UpDown => Heben/Senken des Magneten
a_door => Öffnen/Schließen der Türe
OA Erdölpumpe Haupt_Anim => Bewegen des "Kopfes" der Pumpe
Antr_Anim => Animiert die Schwungräder
Rad1_Anim , Rad2_Anim , Rad3_Anim => Animiert die Antriebsräder
Erdölpumpe #2 Wie die erste Pumpe, Rad2/3_Anim gibt es hier aber nicht
Alle Pipeline Segmente außer Pipeline 16m/20m Endstück und den "keep-heights" Ani_Hrz => Dreht die Segmente um 180°
Pipeline Einstieg ani_Deckel => Öffnen/Schließen der Dachluke
Pipeline 20m Einstieg ani_O_Door; Öffnen/Schließen der äußeren Türe
ani_I_Door; Öffnen/Schließen der inneren Türe
ani_Geo_Door; Öffnen/Schließen der Türe im Geo-Lod, wichtig!
Gangway ani_fitHgt; Heben/Senken der Gangway um ca. 30°
Container (rot, Türen) ani_DoorR/L; Öffnen/Schließen der rechten/linken Containertüre
Tanker ani_door01-06 => Öffnen/Schließen der Türen
ani_Klappe => Öffnen/Schließen der Dachluke
OA Tanker Schmggl ani_door01-06 => Öffnen/Schließen der Türen
ani_Klappe => Öffnen/Schließen der Dachluke
aniHideR/L => Verstecken der Beiboote im Schiffbauch

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.