Beruflich Dokumente
Kultur Dokumente
E D I T I N G
G U I D E
by Mr-Murray
Vorwort Vorwort
Der Inhalt dieser Editieranleitung wird dir das Leben im Armed Assault Editor wesentlich angenehmer gestalten. Du hast hiermit die Mglichkeit auch ohne Programmierkenntnisse schnell und einfach anspruchsvolle Missionen fr Armed Assault zu erstellen. Ganz richtig, ohne Programmierkenntnisse! Gewisse Vorkenntnisse aus dem Vorgnger Operation Flashpoint wren natrlich von Vorteil, sind aber nicht zwingend notwendig. In dieser Anleitung werden dir die Teilbereiche des Editors erlutert und anhand von Beispielen nher erklrt. Dazu werden dir die nahezu unbegrenzten Mglichkeiten aufgezeigt, die du in diesem Spiel und dem Editor hast. Du wirst mit ein bisschen Geschick, Ideenreichtum und Kreativitt deine eigenen Szenarien umsetzen und dank der Kameramglichkeiten und dem Einbinden eigener Sounddateien Missionen erstellen, die schon fast mit einem Hollywoodlm zu vergleichen sind und den Spieler in seinen Bann ziehen werden. Dynamische Missionen erstellen, bei denen bei jedem Start das Wetter oder die Uhrzeit anders ist, dass Erfllen von Missionszielen bei jedem Spielablauf verschieden abluft und dass bestimmte Einheiten oder der Spieler bei jedem Neustart an einer anderen Position der Insel startet, sollte hiermit fr dich kein Problem mehr sein. Jetzt liegt es nur noch an deinem Ideenreichtum, deiner Kreativitt und natrlich dir, gute Missionen erstellen zu knnen. Ein Drehbuch, Szenario oder eine Story fr deine Mission ist hier nicht enthalten, dass musst du dir schon selbst ausdenken. Ansonsten hast du mit dem Editor und dieser Anleitung alles, was du brauchst um deine Ideen umzusetzen. Und wenn mal was nicht klappt, Editor aus, Spiel an und einfach mal entspannt in den Krieg ziehen. Dieses Spiel baut als Operation-Flashpoint-Nachfolger mit eigens entwickelter Programmiersprache auf seinen Vorgnger auf. Es sind zwar hier und da nderungen erfolgt und viele Neuheiten eingeossen, aber vom Grundkonzept ist alles nahezu gleich geblieben. Der Editor ist, wie auch bei seinem Vorgnger, mit gleicher bersichtlicher und benutzerfreundlicher Oberche zu bewundern. Und auch die Missionsordner und der Inhalt dieser, sind vom Grundsatz her gleich geblieben. Doch lies, probier und editier dich selbst mit Hilfe dieser Anleitung durch die Welt von Armed-Assault. Viel Erfolg und Spa mit dem Editor wnschen Bohemia Interactive und Mr-Murray.
Anmerkung Anmerkungen
Diese Anleitung ist als Einfhrung in den Armed Assault Editor gedacht und soll gerade dem Editieranfnger den Umgang mit dem Editor erleichtern. Hier aufgefhrte Skripte oder Ablufe sind frei erfunden und knnen selbstverstndlich weiterentwickelt und verbessert werden. Natrlich gibt es noch weit mehr Mglichkeiten im Editierbereich von Armed Assault als hier im Buch erlutert, wobei ich hier auf die ozielle Wiki http://community.bistudio.com/wiki verweisen mchte, die immer auf dem aktuellen Stand ist, was Editing, Scripting und sonstiges rund um Armed Assault betrit. Hier wurde lediglich das grundlegendste mit eingebunden und ein paar Blicke ber den Tellerrand gegeben, die dich anregen und auf eigene Ideen bringen sollen. Smtliche Skripte aus Kapitel 6 stehen im oziellen Forum (www.forum.german-gamers-club.de) fr dich zum Download bereit.
Danksagung Danksagungen
Ich mchte mich mit diesem Editing Guide bei allen Operation Flashpoint und natrlich Armed Assault Fans, die dem Spiel bis heute treu geblieben sind, bedanken. Mein nchster Dank gilt dem groartigen Team von Bohemia Interactive, ohne die es ein Spiel dieses Umfangs und somit diese Anleitung gar nicht geben wrde. Ein weiterer Dank richtet sich an das gesamte Mapfact-Team, BadAss, Chneemann, Flashpoint_K, JrgF., Kriegerdaemon, LockheedMartin$ch, MCPXXL, OneManGang, Silola, Sniping-Jack, Raedor, Lester und Wstenfuchs und unseren helfenden Hnden MemphisBelle, Simba, Marco-Polo-IV, Parvus, Sgt.Ace und SNKMan, welche mich in den letzten Jahren tatkrftig untersttzt haben. Wobei hier ein besonderer Dank Raedor, Chneemann und den oziellen BIS-Betatestern gilt, die mir bei diversen Problemen mit Armed Assault tatkrftig zur Seite standen. Ein weiterer ganz besonderer Dank geht an MemphisBelle, Metal0130 und Matt Rochelle fr die hervorragende englische bersetzung und Andre Scheufeld, Andreas Holzwart, Rastavovich sowie Wolle fr den hervorragenden Support. Des Weiteren bedanke ich mich noch bei allen Freunden und Bekannten und besonders bei meiner Familie und meiner Freundin, die mich in der Zeit der Realisierung dieses Werkes tatkrftig untersttzt und motiviert haben. Euer Sascha Mr-Murray Homann
Platz 1: Marcus-Ergalla (Aljosha Rall) Platz 2: Mr. Burns (Andreas Schmitz) Platz 3: Stoned Boy (Frank Nobis)
Platz 1: Marcus-Ergalla
Platz 2: Mr Burns
Inhaltsverzeichnis
Kapitel 1: Der Einstieg 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 Die Oberche Einheiten einfgen Gruppen einfgen Auslser einfgen Wegpunkte einfgen Synchronisieren Markierungen einfgen Einheiten und Objekte drehen Einheiten und Marker verbinden Einheiten mit Wegpunkten bearbeiten 16 20 26 27 30 35 36 39 39 40
Kapitel 2: Die Dateien 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 Der Missionsordner Die Mission.sqm Die Description.ext Die Stringtable.csv Die Init.sqs Das Skript (.sqs) Die Funktion (.sqf ) Das Paa-Format Die PBO Die Sounddateien Die Lip-Dateien Der Overview Das Brieng 42 43 48 51 53 54 55 55 56 56 57 58 59
Kapitel 3: Die Waen Fahrzeuge Einheiten Objekte 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 8 Die Handwaen und statische Waen Die Waenbezeichnungsliste Einheiten bewanen und ausrsten Die Waen- und Munitionskiste Fahrzeuge be- und entladen Waenauswahl im Brieng Die Fahrzeugklassen Die Fahrzeugwaen Die Einheitsklassen Die Shellklassen Die Objekt- und Gebudeklassen Die Panzenklassen 64 68 70 71 71 72 73 76 77 80 81 88
3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22
Die Steinklassen Die Schilderklassen Waen- und Magazintypen ausgeben lassen Abgefeuerten Typ ausgeben lassen Hat Einheit Wae? Primr- bzw. Sekundrwae einer Einheit Hat Einheit Munition? Mine erzeugen Waen und Magazine erzeugen Waenblickrichtung ausgeben lassen
90 91 92 92 92 93 93 93 94 95
Kapitel 4: Die Mission 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Der Missionsname Der Missionsstart Das Missionszubehr Die Missionswertung Die Missionsziele Mission beenden Mission speichern 97 97 98 99 99 101 103
Kapitel 5: Das Missionszubehr 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 Leeres oder verschlossenes Fahrzeug Fahrer/Beifahrer eines Fahrzeugs Einheit hat Fahrzeugverbot Einheit in Fahrzeug? Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Gruppe zu Missionsbeginn im Fahrzeug Ein- und Aussteigen lassen Geschwindigkeit einer Einheit Geschwindigkeit ausgeben lassen Einheit bleibt stehen Einheiten starten bzw. stoppen Einheit bewegt sich zum Bestimmungsort Streife laufen, fahren oder iegen Fluchtverhalten einer Einheit oder Gruppe Einheiten, Objekte, Auslser u. Marker versetzen Objekte versenken oder hher setzen Flughhe einer Einheit Punktgenaue Helikopterlandung Einheit begibt sich in ein Gebude Einheit verlsst eine Gruppe oder tritt anderer bei 106 106 106 107 107 108 108 108 108 109 109 110 110 110 111 111 112 112 112 113 9
5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 5.40 5.41 5.42 5.43 5.44 5.45 5.46 5.47 5.48 5.49 5.50 5.51 5.52 5.53 5.54 5.55 5.56 5.57 5.58 5.59 5.60 5.61 5.62 5.63 10
Einheit ein Ziel zuweisen Einheit wendet sich anderer zu Einheit whlt Wae Einer Einheit Schaden zufgen bzw. heilen Einrichten einer Todeszone Das Prfen eines Bereiches Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Bekanntheitsgrad einer Einheit Freundlicher Feind Befreundete Parteien Der Alarm Tod als Bedingung Distanz zweier Einheiten oder Objekte Einem Fahnenmast eine Fahne zuweisen Brennende Feuerstelle Spielbare Einheit hinzufgen oder entfernen Spielerseite, -namen, typ auslesen bzw. ausgeben Spielereingabe unterdrcken Karte auf den Monitor erzwingen Sichtweite ndern Wetter einstellen Datum und Uhrzeit einstellen Zeitlupe oder Zeitsprint Einheiten und Objekte erzeugen Flares, Rauch und Explosionen erzeugen Einheiten und Objekte lschen Funkmen verndern Einer Gruppe ein Rufzeichen zuweisen Funkspruch abgeben Sound erstellen Eigenen Sound einbinden Identitt festlegen Mimiken Der Actionbefehl Der Animationsbefehl KI abschalten SetVelocity Der Informationstext Einheit bleibt liegen, kniet oder steht IDs verwenden Einheiten in Gebuden platzieren Einheit begibt sich zu Gebudeposition
113 114 114 114 115 115 115 116 117 117 118 119 120 120 120 121 121 121 121 121 122 122 123 123 124 126 127 127 128 129 129 130 134 135 136 139 144 144 144 144 145 148 153
5.64 5.65 5.66 5.67 5.68 5.69 5.70 5.71 5.72 5.73 5.74 5.75 5.76 5.77 5.78 5.79 5.80 5.81 5.82 5.83 5.84 5.85 5.86
Position auslesen Der Eventhandler Texteinblendarten Stringtable Grundwerte Wegpunkte erzeugen Auslser erzeugen Marker erzeugen Rund ums Vehikel Lichtquellen erzeugen Staub erzeugen Rauch erzeugen Feuer erzeugen Dienstgrad vergeben Einheit benutzt Fernglas Einheit ein Fahrzeug zuweisen Einheit ein Team zuweisen Einheit gibt Befehle Hat Einheit Schaden erhalten? Der Flugverkehr Grasdetails heruntersetzen Objekte schrg platzieren Mission verschlsseln bzw. freischalten Leerer Scheinwerfer mit Licht
153 155 157 158 159 160 162 165 167 167 168 169 171 172 172 173 174 174 175 176 176 177 177
Kapitel 6: Die Missions Specials 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 Die Fallschirmspringer Das GPS-System Der Actionmeneintrag Der Rucksack Zufallspositionen Der Mapclick Die Artillerie Tote Einheiten bzw. Fahrzeuge lschen Spielbeschleunigung dauerhaft unterdrcken Der Bullet Mode Das Feindmeldeskript Der Airstrike Der Airvehiclecreator Der Scheinwerfer Der Zeitzhler Das House-Patrol-Script Das Minen-Skript Das Vehikeltransportskript 179 180 181 181 185 187 189 194 195 196 197 198 201 203 204 205 208 209 11
Das Mwenskript Das Insektenskript Der Bombenleger Der Aufklrer Einheit ergibt sich Der Teleport Das Verfolgungsskript
Kapitel 7: Multiplayer 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23 Die Multiplayermission Die Respawnpunkte Flexible Respawnpunkte Die MP-Description.ext Die Respawnarten Das Deathmatch Multiplayerbereich festlegen Zeit und Wertung Punkte vergeben bzw. anzeigen lassen Die Zeitanzeige Der Class Header Der Respawndialog Stringtable MP Grundwerte Fahrzeug-Respawn Mr-Murrays Fahrzeug-Respawn Flaggen Grundinformationen Capture The Flag Die Publicvariable Allgemeines Die Steuerungsbefehle Bewanung im MP Spielerbezogene Textmitteilung Join In Progress (JIP) 224 224 225 226 227 227 228 229 231 232 233 233 234 235 236 238 240 246 247 249 250 251 252
Kapitel 8: Das Camscripting 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 12 Die Steuerung Die Kamerakoordinaten Kamera erstellen Die erste Szene Kamera an ein Fahrzeug/Einheit heften Text- und Einblendeekte Kamera-Eekte Preload - Objekte und Positionen vorladen 255 256 257 258 260 261 262 262
8.9
Kartenanimation ausfhren
263
Kapitel 9: Scripting 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 Die Variable Wahrheitswerte Logische Operatoren Die While-Do-Schleife Der Zhler If-Then-Else Der Delay Random WaitUntil Die Klammer Das Semikolon Der Array Funktionen-Grundwissen 265 266 267 268 268 268 269 269 269 270 271 271 274
Kapitel 10: Dialoge 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 Was sind eigentlich Dialoge Basisdenitionen (Konstanten) Basisklassen und Subklassen Die Schriftarten Eine Grak einblenden Einen Text einblenden Visieransichten einblenden Eigene Landkarte einblenden Einen Button denieren Einen Rahmen denieren Die Videosequenz 279 280 283 286 287 288 289 291 292 294 297
Kapitel 11: Allgemeines 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 Eigenes Prol Die ArmA Cheats Der MOD-Ordner Die Verwendung von Addons Der Missionsrelease Die ArmA.rpt Das Natoalphabet Die Dienstgradabzeichen Die Squad.xml Die Startparameter Tastenkombinationen, Tipps und Tricks 299 301 302 303 304 305 306 307 308 311 313 13
14
Kapitel 1
Kapitel 1
- Der Einstieg Dieses Kapitel soll dir zunchst mehr bersicht und Durchblick ber die Oberche des Editors verschaen und dich auf die weiteren Kapitel vorbereiten. Mit Hilfe dieses Kapitels wirst du einen sicheren Umgang mit der Oberche des Editors erlangen und erste gute Ergebnisse erzielen. Es erlutert dir zunchst die Hauptfunktionen der einzelnen Bereiche.
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10
Die Oberche Einheiten einfgen Gruppen einfgen Auslser einfgen Wegpunkte einfgen Synchronisieren Markierungen einfgen Einheiten und Objekte drehen Einheiten und Marker verbinden Einheiten mit Wegpunkten bearbeiten
16 20 26 27 30 35 36 39 39 40
15
Gegenwrtiger Nebel
Spteres Wetter
Spterer Nebel
16
Kapitel 1
F-Tasten Mit Hilfe der F-Tasten 1 bis 6 whlt man die Untermens an. Dieser Abschnitt soll zunchst eine grobe Erluterung der F-Tasten darstellen, welche im Laufe des Kapitels noch einzeln und nher erklrt werden. 1 ermglicht es Einheiten, Fahrzeuge und Objekte auf die Karte zu setzen und individuell einzustellen. hat gleich zwei Funktionen. Zum einen kann man damit gleich ganze Gruppen auf die Karte setzen und zum anderen dient 2 als Verbindungstool, mit welchem man Einheiten und Auslser verbinden kann. Mit 3 setzt man Auslser, welche man sehr exibel und fr viele Aktionen verwenden kann. Als Beispiel soll hier das Funkmen dienen, welches unter anderem ja auch in den Auslsern deniert wird. Mit der 4-Taste weist man Einheiten oder auch einer Logik Wegpunkte zu, welche sie dann nacheinander abarbeiten und je nach Denition an gewissen Stellen Aktionen durchfhren oder auslsen ist eine Funktion, welche gerne bersehen wird, obwohl sie sehr ntzlich ist. Sie ermglicht es Wegpunkte und Auslser auf einander abzustimmen. Demnach wrde der nchste Wegpunkt erst angelaufen werden, wenn der damit verbundene Wegpunkt oder Auslser bereits ausgelst wurde. Die 6-Taste fhrt ins Untermen der Marker, mit welchem die Karte sehr taktisch gestaltet werden kann und dem Spieler ein wenig mehr bersicht ber die Mission gibt.
17
Einsatz Im oberen Abschnitt whlt man zunchst den Arbeitsbereich aus. Hier hat man die Auswahl zwischen Einleitung, Einsatz und Abspann gewonnen und Abspann verloren. Es stehen also vier Karten pro Mission zur Verfgung, welche genutzt werden knnen. Dies ist sehr vorteilhaft, denn es spart eine Menge Performance, da die Einleitungs- bzw. Abspann-Einheiten und -Objekte nicht auf der eigentlichen Missionskarte sind. Zustzlich hat man somit auch gleich mehr bersicht beim Editieren auf der Hauptkarte. Ein weiterer Punkt ist, dass der Spieler beim mehrfachen Spielen der Mission das Intro irgendwann nicht mehr sehen mag und dann die Mglichkeit hat, dieses per Leertaste wegzuklicken. Wrde das Intro auf der Hauptkarte erstellt, wre ihm dies nicht mglich und er msste die Sequenz jedes Mal bis zum Ende schauen, was auf Dauer etwas demotivierend sein kann. Laden Mit Laden ldt man, wie der Name schon sagt, seine Missionen in den Editor. Natrlich muss diese auch im Ordner C:\EigeneDateien\ArmA\Benutzer\Missions vorhanden sein. Sprich, man muss zunchst seine Mission abgespeichert haben. Denn nach der Installation des Spiels ist dieser Ordner noch leer! Fertige Missionen, welche im ArmA-Hauptmen zum Spielen ausgewhlt werden knnen, kann man ohne ein PBO-Tool nicht in den Editor laden. Diese mssen dazu erst mit einem solchen Tool entpackt werden. Zusammenfhren Zusammenfhren steht auch fr Importieren. Man kann hiermit eine andere Mission bzw. die Einheiten, Objekte, Auslser, Wegpunkte, Marker usw. aus einer anderen Mission importieren. Importiert wird hierbei alles, was auf dieser Karte zu nden ist, jedoch nicht der Ordnerinhalt. Das Zusammenfhren ist sehr ntzlich, wenn man beispielsweise eine sehr komplexe Mission, die eine Weile zum Laden bentigt, editiert. Wenn man nun an einer Position noch ein paar Objekte platzieren und ausrichten mchte, msste man teilweise ewig warten bis die Mission zur Vorschau startet. Aus diesem Grund ist es sinnvoll eine zweite Map anzulegen, welche man dann als Mission2 abspeichert und dort die Objekte setzt und ausrichtet. Ist man damit fertig, importiert man diese Mission danach einfach auf seine Hauptmissionskarte. Eine weitere gute Mglichkeit ist, wenn man sich Vorlagen anlegt. Also zum Beispiel Karten auf welchen nur bestimmte Dinge vorgefertigt sind. Zum Beispiel ein selbsterstelltes Lager oder hnliches. Man kann dies dann immer auf seine aktuelle Map importieren ohne es nochmal neu erstellen zu mssen. 18
Kapitel 1
Speichern Mit Speichern wird die Mission abgespeichert. Hierbei kann man auswhlen, ob die Mission zunchst als Editormission abgespeichert oder schon als fertige Mehrspielerbzw. Einzelspielermission exportiert werden soll. Whrend Editormissionen im Verzeichnis C:\EigeneDateien\ArmA\Missions hinterlegt werden, ndet man seine exportierten Mehrspielermissionen im Spieleverzeichnis unter MP-Missions und seine Einzelspielermission im Verzeichnis Missions wieder. Auf dem Bild sieht man den Ordner Missions unterEigene Dateien.
Zurcksetzen Mit Zurcksetzen subert man die Karte. Die Karte wird damit wieder in ihren Urzustand versetzt. Dabei wird lediglich alles was auf der Karte ist gelscht. Der Missionsordner samt Inhalt bleibt aber weiterhin vorhanden. IDs zeigen Mit dem Button IDs zeigen lsst man sich die IDs der Objekte auf der Karte anzeigen. Denn jedes Objekt auf der Karte hat eine ID, mit welcher man es ansprechen kann. Dies macht es mglich dem Objekt Schaden zuzufgen oder zu prfen, ob es noch am Leben oder, anders gesagt, noch existent ist. Texturen zeigen Hiermit lassen sich die Texturen einer Karte anzeigen. Jede Variante, also mit Texturen anzeigen oder ohne, hat gewisse Vor- und Nachteile beim Editieren. Letztendlich muss jeder fr sich entscheiden, wie er lieber editieren mchte. Vorschau Mit Vorschau kommt man in die Missionsvorschau, also direkt in die Mission, die man gerade editiert und kann sich so sein Editierergebnis anschauen und testen. Weiter Hiermit wechselt man die letzte Vorschau zurck. nderungen, die man bis dahin im Editor vorgenommen hat, sind dann noch nicht sichtbar. Beenden Mit Beenden verlsst man den Editor und kommt zurck zum Hauptmen.
19
Kontrolle - Spieler oder Spielbar Hier whlt man aus, ob man Spieler dieser Einheit sein soll oder ob diese Einheit spielbar bzw. nicht spielbar, also eine KI ist. Spielbare Einheiten werden beispielsweise fr Multiplayermissionen bentigt, bei denen ja fr die Spieler mehrere Einheiten zur Auswahl stehen mssen. Fr Singleplayermissionen ist Playable ntig, wenn man den Characterswitch nutzen mchte. Der Spieler kann dann in der fertigen Mission zwischen den spielbaren Soldaten umherschalten und diese einzeln steuern und in Position bringen. Player Playable Non Playable Spieler Spielbar Nicht Spielbar
20
Kapitel 1
Bei Fahrzeugen hat man zustzlich die Auswahl, als was der Spieler im Fahrzeug sitzen soll und kann dies somit sofort festlegen. Player as Driver Player as Pilot Player as Gunner Spieler als Fahrer Spieler als Pilot Spieler als Schtze
Fahrzeugstatus - Einstellung des Fahrzeugs Default Locked Unlocked Voreinstellung Abgeschlossen Nicht abgeschlossen
Die Syntax fr externes Ansteuern ber ein Skript oder eine Initzeile sieht wie folgt aus:
Dienstgrad - Dienstgrad der jeweiligen Einheit Hier wird der Rang bzw. Dienstgrad der jeweiligen Einheit eingestellt. Die Einheit mit dem hchsten Dienstgrad ist automatisch der Gruppenfhrer der Gruppe. Befrderungen im Spielverlauf werden im Kapitel 5.76 ausfhrlich erlutert. Private Corporal Sergeant Lieutenant Captain Major Colonel Soldat Gefreiter Feldwebel Leutnant Hauptmann Major Oberst
Die Syntax fr das Vergeben eines Ranges sieht dabei wie folgt aus: Player setRank "Sergeant" Einheit - Art der Einheit Nachdem man bei Klasse festgelegt hat, ob das Objekt ein Soldat oder Fahrzeug ist, kann man hier die Art des Objektes auswhlen. Je nach Klassen-Auswahl ist hier die Unterauswahl anders. Bei Infanterie hat man die Auswahl der Soldaten vom Grenadier bis zum Scharfschtzen, bei Fahrzeuge die Auswahl zwischen verschiedenen Fahrzeugen und so weiter.
21
Speziell - Besonderheit einer Einheit Hier lassen sich gleich verschiedene Einstellungen vornehmen, die beim Editieren gerne bersehen werden. Denn hier ist es nicht nur mglich einzustellen, ob ein Flugzeug oder Helikopter beim Start iegt, sondern noch weit mehr. Keine Wrde man sich eine Einheit mit dem Spezial Keine unterstellen und sie irgendwo weit weg auf die Karte stellen, wrde sie sich, wenn sie wei wo sich der Leader bendet, auf den Weg zu ihm begeben. Anders bei Formation Ist beim Spezial der unterstellten Einheit In Formation ausgewhlt, wird die Einheit gleich, egal wo sie auf der Karte steht, an ihrer Formationsstelle neben dem Leader stehen. Setzt man eine Gruppe auf eine Karte, von der eine Einheit ein Fahrzeug ist (muss nicht der Leader sein), und whlt bei allen anderen Einheiten bei Spezial Im Laderaum aus, werden alle Einheiten der Gruppe in dem Fahrzeug sitzen. Ein Flugzeug oder ein Heli sind bei Missionsstart gleich in der Luft.
In Formation
Im Laderaum
Fliegen
Name - Name der Einheit Hier wird der Name der jeweiligen Einheit oder des Objektes angegeben. Dieser ist sehr wichtig, wenn man diese Einheit per Skript oder hnliches anprechen mchte. Der hier angegebene Wert ist gleichzeitig eine globale Variable.
Fhigkeiten - Fhigkeiten einer Einheit Hier deniert man die Fhigkeiten einer Einheit. Diese bestimmt, wie gut diese schieen, reagieren und so weiter. Die Fhigkeiten werden mit einem Wert zwischen 0 und 1 deniert. 0 steht fr weniger gut und 1 fr sehr gut. In Syntaxform schaut das Ganze wie folgt aus: Name setSkill 0.8 Name setUnitAbility 0.6 Es ist auch mglich einen Zufallsskill einzustellen. Dazu msste man in der Initialisierungszeile der Einheit folgende Syntax eingeben: this setSkill (Random 0.6) Jetzt wrde der Einheit ein Zufallsskill im Bereich von 0 bis 0.6 zugewiesen. 22
Kapitel 1
Azimut - Die Blickrichtung einer Einheit Hier legt man beim Einstellen der Einheit eine grobe Blickrichtung fest und kann somit auch gleich den Blickrichtungswert sehen. Die Blickrichtungswerten sind, wie im realen Leben auch, von 0 bis 360 Grad deniert. Besttigt man nun mit OK, sieht man die Einheit mit der ausgewhlten Blickrichtung auf der Karte. Wenn man diese im Nachhinein nochmal drehen mchte, weil sie doch nicht in die richtige Richtung schaut, geht das auch in Kombination mit der Maus und der Shift-Taste. Dazu bleibt man auf der Karte und klickt sich nicht per Doppelklick ins EinheitenUntermen, sondern whlt die Einheit an, indem man sie nur ein Mal anklickt. Jetzt hlt man die Shift-Taste und die linke Maustaste gedrckt und bewegt die Maus. Die Einheit wird sich nun mit Hilfe der Mausbewegungen frei drehen lassen. Zum Drehen von mehreren Einheiten oder Objekten gilt das gleiche Prinzip. Dazu markiert man alle zu drehenden Einheiten und bewegt dann die Maus mit gedrckter linker Maustaste. Eine andere Mglichkeit eine Einheit beispielsweise in einer Sequenz auszurichten wre:
Hierzu kann man den Wert aus dem Einheiten-Untermen mit der Tastenkombination Strg + C kopieren und fr Wert einfgen. Initialisierung - Die Initialisierungszeile Jede Einheit bzw. jedes Objekt hat eine Initialisierungszeile. Befehle, welche dort eingetragen werden, werden beim Missionsstart sofort ausgefhrt. Von hier aus kann man unter anderem Skripte starten oder wie oben bei Fhigkeiten eine Zufallsskillsyntax angeben. Generell lohnt es sich eine Init.sqs im Missionsordner zu erstellen, welche die Initalisierungsdatei der Mission darstellt und ohne angeben einer Syntax beim Missionsstart automatisch ausgefhrt wird. Eine nhere Erklrung der Init.sqs ndet man im Kapitel 2.5 Die Init.sqs. Befehle werden hier generell mit einem ; getrennt! Sogar whrend einer laufenden Mission ist es mglich einen Eintrag in der Initialisierungszeile einer Einheit vorzunehmen und ausfhren zu lassen. Dazu nutzt man zunchst den setVehicleInit-Befehl und zum Aufrufen dann processInitCommands. Player setVehicleInit "Player say 'Sound1' "; processInitCommands; Beschreibung - Die Infozeile In dieser Zeile gibt man einen Namen oder eine kleine Beschreibung zur jeweiligen Einheit an. Diese Beschreibung wird dann angezeigt, wenn die Einheit als spielbare Einheit deniert wurde und man das Switchmen net. 23
Gesundheit/Panzerung - Der Gesundheitsstatus Mit dem Schieberegler lsst sich der Gesundheits- bzw. Panzerungsstatus einer Einheit festlegen. Einheiten knnen also schon verletzt auf die Karte gestellt werden oder eben Fahrzeuge, wenn sie als Wrack dienen sollen, ohne jegliche Panzerung. Der Wert wird ebenfalls wieder von 0 bis 1 deniert und lsst sich auch extern des EinheitenUntermens mit einer Syntax festlegen. Diese schaut wie folgt aus:
Nun htte die Einheit, der Panzer oder das Objekt einen Schadenswert von 1 und ist tot oder zerstrt. Diesen Wert kann man natrlich wieder zurcksetzen und mit
wre die Einheit nun wieder geheilt oder repariert. Selbstverstndlich knnen auch Zwischenwerte verwendet werden. Mit 0.5 wre die Einheit halt nur zur Hlfte geheilt bzw. repariert usw. Support: Supportfahrzeuge wie Treibsto-, Munitions- und Reparaturfahrzeuge knnen mit einem Wert von 0 bis 1 versehen werden. Ist dieser 0, kann man diese nicht mehr zum Tanken, Reparieren oder Aufmunitionieren nutzen. Mit der Syntax
Name setRepairCargo 1
weist man einem Reparatur-Lkw einen Reparaturwert zu. Treibsto - Der Tankstatus Hier stellt man die Treibstomenge ein, die ein Fahrzeug haben soll. Diese lsst sich ebenfalls extern mit einer Syntax ansteuern, welche wie folgt aussieht:
Support:
steht fr einen leeren Tank steht fr einen vollen Tank weist Tank-Lkw einen Fllwert zu
Munition - Der Munitionsstatus Einstellung der Munitionsmenge, die die Einheit beim Missionsstart haben soll. Support:
24
Kapitel 1
Anwesenheit - Wahrscheinlichkeit der Anwesenheit Hier lsst sich die Wahrscheinlichkeit der Anwesenheit einer Einheit in Prozent einstellen. Stellt man den Regler auf die Mitte, wird die Einheit mit einer Wahrscheinlichkeit von 50% auf der Karte sein. Dies bringt sehr viel Dynamik ins Spiel, da man nie vorhersagen kann, ob die Einheit oder Einheiten wirklich auch auf der Karte sind. Anwesenheit - Bedingung der Anwesenheit Einheit ist nur anwesend, wenn eine Bedingung erfllt ist. Diese Bedingung wird hierbei beim Missionsstart abgefragt. Gibt man hier CadetMode ein, wird die Einheit nur im CadetMode auf der Karte sein. Radius der Platzierung - Platzierungsradius der Einheit Hier stellt man den Radius ein, in welchem die Einheit beim Spielstart stehen soll. Diese Einheit wird dann bei jedem Spielstart irgendwo in dem Radius erscheinen. Info-Alter - Bekanntheitsgrad einer Einheit Info-Alter bestimmt den Bekanntheitsgrad einer Einheit. Es sagt also aus, was die Gegnerseite ber diese Einheit wei und wie aktuell diese Information ist. Dabei gibt es folgende Auswhlmglichkeiten: "ACTUAL" "5 MIN" "10 MIN" "15 MIN" "30 MIN" "60 MIN" "120 MIN" "UNKNOWN" Das Info-Alter lsst sich auch anhand einer Syntax vergeben. Diese lautet dann wie folgt: Player setTargetAge "10 MIN"
25
Bei Name hat man dann die Mglichkeit sich eine von fnf Typen auszusuchen.
Hier hat man zum Beispiel bei West und Ost die Auswahl zwischen: Basistrupp Waentrupp Spezialtrupp Motorisierte Patrouille Panzergrenadiertrupp Gemischte Infanteriegruppe Kleinere Infanteriegruppe Spezialeinheit Infanteriegruppe mit Fahrzeug Infanteriegruppe mit Schtzenpanzer
Eine hnliche Auswahl hat man neben den Infanterietruppen natrlich auch unter den Panzerplatoons oder den Luftgeschwadern. Bei den Air Squadrons muss man darauf achten, dass bei den einzelnen Vehikeln das Spezial auf Fliegen steht, wenn diese gleich zu Missionsbeginn iegen sollen. Mit Azimut stellt man hierbei wieder, wie auch bei anderen Einheiten, die Blickrichtung der Gruppe ein. 26
Kapitel 1
Aktivierung durch Westen Osten Widerstand Zivilisten Spiellogik Jeder Funk AJ Erobert von Westen Erobert von Osten Erobert von Widestand Art der Aktivierung Vorhanden Auslser wird aktiviert, wenn bei Aktivierung zum Beispiel West ausgewhlt wurde und eine westliche Einheit den Auslserbereich betritt.
Nicht vorhanden Auslser wird deaktiviert, wenn bei Aktivierung zum Beispiel West ausgewhlt wurde und keine westliche Einheit mehr in dem Auslserbereich ist. Entdeckt durch Entdeckt durch Westen, Osten, Widerstand oder Zivilisten. Wird man im festgelegten Auslserbereich durch eine im Auslser festgelegt Seite entdeckt, werden die Aktionen ausgefhrt, die im Auslser deniert sind. 27
Countdown/Timeout - Zhler Hier wird festgelegt, ob der Auslser gleich bei Auslsung oder erst nach Ablauf einer festgelegten Zeit ausgelst werden soll. Durch die Mglichkeit einen Min, Mid und MaxWert einzugeben hat man auch hier wieder eine gewisse Dynamik. Whrend der MinWert fr die mindeste Wartezeit steht, stehen der Mid-Wert fr den Mittelwert und der Max-Wert fr den Maximalwert der Wartezeit. Durch Angabe aller drei Werte kann man die Auslsung dem Zufall berlassen. Gibt man berall den gleichen Wert ein, so wird der Auslser nach Ablauf der angegebenen Zeit auslsen. Typ - Auslsertyp Keine Von Westen bewacht Von Osten bewacht Von Widerstand bewacht Schalter Ende 1 bis 6 Verlieren Keine Geschtzt durch Westen Geschtzt durch Osten Geschtzt durch Widerstand Schalten Ende einer Mission Verloren am Ende
Text - Der Auslsertext Den Auslsertext kann man im Editor lesen, wenn man mit der Maus ber das Auslserfhnchen fhrt. Er soll die Orientierung auf komplexen Karten erleichtern. Man muss so nicht jeden Auslser wieder nen und schauen was darin deniert ist, sondern erkennt ihn so am selbst festgelegten Namen schnell wieder. Des Weiteren wird hier der Text fr das Funkmen deniert. Wenn man also mehrere der Funksprche verwendet, kann man diese hier entsprechend benennen und man sieht in der spteren Mission besser welcher Funkspruch fr welche Aktion vorgesehen ist. Zum Beispiel: Auslser 1: Auslser 2: Aktivierung: Text: Aktivierung: Text: Radio Alpha Artillerie anfordern Radio Bravo Untersttzung anfordern
Beim Funkgert auf der Kartenansicht wrde jetzt Artillerie anfordern und Untersttzung anfordern stehen, was ein gewisses Ma an bersicht gewhrleistet. Name - Der Auslsername Der Name eines Auslsers ist wichtig, wenn man diesen auf irgendeine Art ansprechen mchte. Wenn man ihn beispielsweise versetzen oder lschen will. Mehr zum Versetzen oder Lschen eines Auslsers gibt es auf Seite 30 zu lesen. 28
Kapitel 1
Bedingung - Die Bedingung Das Angeben einer Bedingung ermglicht es einen Auslser sozusagen auf Stand by zu setzen oder ihn etwas prfen zu lassen. Dabei wrde der Auslser erst starten, wenn diese Bedingung erfllt ist. Die Angabe von Bedingungen kann hierbei ganz verschieden aussehen. Zum Einen kann man hier die Variante Verwendung einer Variablen und zum Anderen das Prfung einer Bedingung verwenden. Die Bedigungszeile beinhaltet bereits automatisch das IF bzw. ?. Daher wird in dieser Zeile kein ? verwendet! Verwendung einer Variablen Gibt man in der Bedingungszeile eine Variable an, wird der Auslser erst ausgelst, wenn diese erfllt, also true ist. Wenn in der Bedingungszeile beispielsweise die Variable Angri steht, wartet der Auslser, bis Angri auf true geschaltet wurde. Irgendwo auf der Karte muss dazu bei Aktivierung eines Auslsers, eines Wegpunktes oder in einem Skript die Variable Angri also zunchst auf true gesetzt werden, damit dieser aktiviert wird. Das macht man mit folgender Syntax: Angri=true Der Auslser wurde nun aktiviert und startet die Aktionen, die darin deniert wurden.
Prfung einer Bedingung Eine andere Variante ist die Prfung, ob eine Bedingung erfllt ist. Zugegeben, eine Variable ist ja auch eine Bedingung, die geprft und erfllt werden muss. Hierbei ist eine Bedingung im vorstellbaren Sinne gemeint, welche man quasi als vorstellbare Aktion denieren kann. Zum Beispiel, dass Soldat1 nicht mehr lebt oder der Spieler(Player) im Fahrzeug Jeep1 sitzt. Dies wrde dann wie folgt aussehen: Bedingung: Spieler sitz in Jeep1: Player in Jeep1
oder
Bei Aktivierung In dieser Zeile kann man fast alles denieren, was ausgefhrt werden soll, wenn der Auslser ausgelst wird. Das Starten eines Skriptes, eine Bedingung auf true schalten usw.. Es ist also mglich so ziemlich jede Syntax hier anzugeben, die Armed Assault zu bieten hat. Natrlich gibt es auch Grenzen, aber da kann man ja dann auf ein Skript ausweichen. Auch der bersicht halber, ist es oftmals besser auf ein Skript auszuweichen, wenn hier zum Beispiel unzhlige Befehle oder hnliches angegeben werden. 29
Bei Deaktivierung Natrlich kann man bei einem Auslser auch eine Aktion starten lassen, wenn dieser deaktiviert wird. Als Beispiel dient hier mal die Variante mit einem Actionmeneintrag. Wenn der Spieler den Auslserbereich betritt, soll er einen Actionmeneintrag namens Eintrag bekommen und wenn er den Bereich wieder verlsst, soll er wieder gelscht werden. Dazu vergibt man:
Auslser versetzen oder lschen Auslser lassen sich bei Bedarf verschieben oder auch lschen. Dazu muss der Auslser mit einem Namen versehen werden, um ihn direkt ansprechen zu knnen. Dazu werden unter anderem folgende Befehlszeilen verwendet: Auslsername setPos getPos Name Oder in Koordinatenform: Auslsername setPos [x,y,z]
30
Kapitel 1
Typ Auswhlen - Die Aktionen Hier lassen sich fr jeden Wegpunkt individuelle Einstellungen festlegen, welche eine Einheit beim Erreichen des Wegpunktes ausfhren soll. Move Destroy Get in Seek and destroy Join Join and lead Get out Cycle Load Unload Transport unload Hold Sentry Guard Talk Scripted Support Get in next Released Bewegen Zerstren Einsteigen Suchen und Zerstren Anschlieen Anschlieen und fhren Aussteigen Wiederholen Laden Entladen Transport entladen Halten Aufklren Bewachen Sprechen Geskriptet Untersttzen In Nhestes einsteigen Entlassen
Aufklren Besonderheit Weist man einer Einheit/Gruppe einen solchen Wegpunkt zu, wird sie bis zu diesem Punkt laufen und dort auf Feindkontakt warten, bevor sie zum Nchsten weiterluft.
Wegpunktfolge Beim Anklicken dieser Option, kann man smtliche Wegpunkte einer Einheit mit jeweiliger Aktion auf einem Blick sehen und im Nachhinein sogar die Abfolge ndern, indem man einfach eine andere Zahl auswhlt.
Beschreibung Dies ist die Beschreibung eines Wegpunktes. Was hier eingetragen wird, wird dann spter nur im Cadet-Mode angezeigt werden und erleichtert dem Anfnger das Spielen und die Orientierung in einer groen und komplexen Mission. Beispiel: Zerstren Sie das Ziel 31
Kampfmodus Hier deniert man den Kampfmodus, den eine Einheit oder Gruppe haben soll. Nie schieen Nicht schieen Nicht schieen, Angri nach eigenem Ermessen Feuer ernen Feuer ernen, eigenstnd. Angri Blue Green White Yellow Red
Die Syntax, um das Verhalten per Auslser oder Skript festzulegen, schaut hierbei wie folgt aus: Name setCombatMode "Blue" Verhalten Hier lsst sich das Verhalten einer Einheit oder Gruppe denieren, wobei man folgende Auswahlmglichkeiten hat: Careless Safe Aware Combat Stealth Achtlos Sicher Wachsam Kampf Tarnung
Natrlich lsst sich das Verhalten auch wieder per Auslser oder Skript denieren. Die Syntax hierfr lautet: Name setBehaviour "Careless" Formation Diverse Situationen auf dem Schlachtfeld erfordern gewisse Formationen, welche in der jeweiligen Situation von Vorteil sind. Diese schauen wie folgt aus, wobei der Leader hier in grn zu sehen ist: Columm - Kolonne Staggered Columm - Gestaelte Kolonne
Wedge - Keil
Vee - V-Frmig
32
Kapitel 1
Line - Reihe
Delta - 3-Reihig
Natrlich kann man einer Gruppe auch eine Formation per Auslser oder Skript zuweisen. Das Ganze schaut dann in Sytaxform wie folgt aus: Name setFormation "Line" Geschwindigkeit Hiermit wird die Geschwindigkeit einer Einheit am jeweiligen Wegpunkt deniert. Zum Beispiel ist es mglich, einer Einheit zum Wegpunkt 1 eine langsame und zum Wegpunkt 2 eine schnellere Geschwindigkeit zu geben. Dabei hat man die Auswahl zwischen drei Varianten. Auto / Limited / Normal / Full Hierbei ist es auch wieder mglich das Ganze in einem Auslser oder Skript zu denieren. Syntax: Name setSpeedMode "Limited" Platzierungsradius Der Radius eines Wegpunktes bringt wieder ein wenig mehr Dynamik ins Spiel. Hierbei wird in dem Bereich der festgelegt wird eine Zufallsposition bestimmt, die bei jedem Missionsstart anders ist. Dies bedeutet dass, wenn man dort zum Beispiel den Wert 100 angibt, ein Wegpunktradius von 100 Metern deniert wird, in dem der Wegpunkt dynamisch gesetzt wird. Timeout - Verzgerung Die Verzgerung bis zur Auslsung in Sekunden. Gibt man bei allen drei Positionen den gleichen Wert an, so ist die Auszeit dem Wert entsprechend lang. Durch das Angeben verschiedener Werte wird der jeweilige Wegpunkt per Zufallszeit aktiviert. Zufallszeit zwischen Min und Max mit Tendenz zum Mittelwert. Min Max Mid Mindestzeit bis zur Aktivierung Maximale Zeit bis zur Aktivierung Mittelwert 33
Das Verwenden der Zufallszeit bringt wieder einen gewissen Grad an Spannung ins Spiel, da man nie genau vorhersagen kann, wann die Einheiten auf der jeweiligen Stelle der Karte ankommen. Kombiniert mit dem Platzierungsradius und der Bedingung der Anwesenheit hat man sogar noch mehr Dynamik. Denn nun wei man nicht, ob es die Einheit gibt, wohin sie Punktgenau luft und wann sie kommt. Gerade dynamische Missionen haben einen hohen Spannungs- und Wiederspielgrad. ArmA besitzt anhand solcher Mglichkeiten die besten Vorraussetzungen dafr, seine Missionen so dynamisch wie mglich zu gestalten. Bedingung Das Angeben einer Bedingung ermglicht es einen Wegpunkt sozusagen auf Stand by zu setzen oder ihn etwas prfen zu lassen. Dabei wrde der Wegpunkt erst aktiviert, wenn diese Bedingung erfllt ist. Das Verwenden einer Bedingung ist bereits unter Bedingung beim Auslser erklrt. Bei Aktivierung In dieser Zeile kann man fast alles denieren, was ausgefhrt werden soll, wenn der Wegpunkt ausgelst wird. Das Starten eines Skriptes, eine Bedingung auf true schalten usw. usw. Es ist also mglich so ziemlich jede Syntax hier anzugeben, die Armed Assault zu bieten hat. Natrlich gibt es auch Grenzen, aber da kann man ja dann auf ein Skript ausweichen. Auch der bersicht wegen, ist es oftmals besser auf ein Skript auszuweichen, wenn hier zum Beispiel, unzhlige Befehle angegeben werden oder hnliches. Skript Diese Zeile ermglicht die Verwendung von Syntaxes, wie sie sonst nur in Skripten verwendet werden knnen. Wegpunkt zeigen Wegpunkte lassen sich anzeigen oder verbergen. Hierbei kann man festlegen, ob sie nur im Cadet-Mode, generell oder gar nicht sichtbar sind. Never Show Show in Cadet Mode Always Show Wird nie angezeigt Nur im Cadet Mode Wird immer angezeigt
Anschlieen und fhren Man setzt dazu zunchst zwei Gruppen auf die Karte, die an irgendeiner Position zu einer Gruppe verschmelzen sollen. Jede Gruppe bekommt jetzt einen Wegpunkt irgendwo auf der Karte. Bei dem einen Wegpunkt deniert man nun Anschlieen und bei dem anderen Wegpunkt Anschlieen und fhren. 34
Kapitel 1
Jetzt mssen die beiden Wegpunkte synchronisiert werden. Dazu ist die Synchronisation (5) notwendig, mit welcher die beiden Wegpunkte nun aufeinander abgestimmt werden. Wenn nun beide Gruppen ihre Wegpunkte erreicht haben und noch am Leben sind, werden sie zu einer Gruppe. Vorausgesetzt die Gruppen sind nicht zu gro. Die maximale Gruppengre in Armed Assault betrgt inklusive Leader 144 Einheiten. Auf der Karte sieht das Ganze dann etwa so aus:
35
Gleichermaen luft dies bei der Auslser-Wegpunkt-Kombination. Die Gruppe wrde erst weiterlaufen, wenn der Auslser ausgelst wurde. Man muss also nicht bei dem Wegpunkt einer Gruppe eine Variable (z.B. Grp1go) angeben und dann in der Aktivierungszeile des Auslsers Grp1go=true angeben, damit die Gruppe losluft, wenn der Auslser ausgelst wird. Die 5-Variante ist doch viel einfacher und schneller. Ob der Auslser dabei durch eine Einheit, ein Objekt oder Funk aktiviert wird ist dabei egal.
Bei folgendem Bild werden drei Gruppen und ein Funkauslser aufeinander abgestimmt. Wenn alle drei Gruppen ihre Position erreicht haben, gibt der Spieler per Funk 0-0-1 den Befehl zum Angri. Erst dann werden sich die Gruppen zu ihrem nchsten Wegpunkt, also das Ziel, weiter bewegen.
Kapitel 1 Name Hier wird der Name des Markers angegeben, welcher spter unter anderem fr die Verknpfung mit dem Brieng gebraucht, damit die Ziele durch das Fadenkreuz auf der Karte gezeigt werden knnen oder welcher es ermglicht den Marker zu versetzen oder ihm ein anderes Symbol zuzuweisen. Art Die Auswahl der Art des Markers. Dies kann statt einem Symbol auch ein Kreis oder ein Rechteck sein, mit dem man eine grere Flche markieren kann. Zum Beispiel ein Feindgebiet oder hnliches. Farbe Farbe des Markers. Die Farben beschrnken sich hierbei auf rot, schwarz, grn, blau, gelb und wei Symbol Hier eine bersicht der verschiedenen taktischen Zeichen mit Bezeichnung:
Pick Up
Marker
Join
End
Unknown
Warning
Empty
Start
Objective
Destroy
Flag
Arrow
Dot
Empty
Light Team
Heavy Team
Supply Team
Town Vehicle
Move
Defend
Attack
Depot
Camp
Repair
37
Mit diesen taktischen Zeichen in Verbindung mit grochigen Markern (Ellipse/Rectangle) hat man schnell eine bersichtliche Karte geschaen. Die englischen Bezeichnungen sind zugleich auch die Klassennamen der Marker. Auer bei Objective! Objective hat seitens BIS den Klassennamen Flag bekommen.
Objective Flag1 Dot Destroy Start End Warning Join PickUp Unknown Marker - Ziel (Flag) - Fahne - Punkt - Zerstren - Start - Ende - Achtung - Beitreten - Auesen - Unbekannt - Markierung Arrow Empty Select Vehicle Defend Move Attack Headquarters Depot Camp Town - Pfeil - Leer - Leerer Kreis - Vehikel - Verteidigen - Bewegen - Angreifen - Stab - Depot - Lager - Stadt SalvageVehicle - Bergungs Fhz RepairVehicle - Reparatur Fhz SupplyVehicle - VersorgungsFhz DestroyedVehicle - Zerstrtes Fhz MaintenanceTeam - Reparatur CommandTeam - Fhrungsstab SupplyTeam - Versorger InfantryTeam - Infanterie LightTeam - Leichte Inf. HeavyTeam - Schwere Inf. AirTeam - Luftabwehr FireMission - Firemission
Achse A/Achse B Hier wird die Gre des Markers eingestellt. Winkel Hier hat man die Mglichkeit den Winkel des Markers zu bestimmen. Text Hier wird der Text angegeben, der spter auf der Karte lesbar sein soll. Zum Beispiel: Ziel Alpha. Mit folgender Syntax ist es sogar mglich dem Marker den Spielernamen oder Einheitennamen zuzuweisen: "S1M" setMarkerText Name S1 Dabei liest das Spiel den Spielernamen der Einheit mit Namen S1 automatisch aus. Dynamische Positionen Setzt man mehrere Marker auf die Karte und verbindet diese mit F2 (siehe Kapitel 1.9) mit einer Einheit, steht die Einheit bei jedem Start an einer anderen Markerposition. Marker versetzen, ndern oder lschen Marker lassen sich whrend des Spielverlaufs vom Symbol her ndern, versetzen oder auch lschen. Als Beispiel dient hier mal die Erfllung eines Missionsziels, bei welchem man den Marker von rot in grn einfrben oder ihn einfach lschen knnte. Dazu muss ein Marker erstmal benannt werden. Dieser heit jetzt fr die folgend aufgefhrten Syntaxformbeispiele mal Marker1. Man hat jetzt eine Menge von Mglichkeiten diesen anzusprechen. Dies kann wieder von einem Wegpunkt, Auslser oder auch Skript erfolgen. Hierbei gibt es unter anderem folgende Syntaxformen: 38
Kapitel 1
Marker wird zur Position [x,y] versetzt: "Marker1" setMarkerPos [x,y] Marker zur Position von Objekt Ziel versetzt: "Marker1" setMarkerPos getPos Ziel Marker1 wird zur Position von Marker2 versetzt: "Marker1" setMarkerPos getMarkerPos "Marker2" Setzt Art und Aussehen von Marker1: "Marker1" setMarkerType "Start" ndert die Farbe des Markers: "Marker1" setMarkerColor "ColorBlue" ndert die Markergre in [Hhe, Breite] "Marker1" setMarkerSize [2,4] Lscht den Marker: deleteMarker "Marker1"
Das Gleiche geht nun auch mit Einheiten und Markern. Das Besondere hieran ist, das man der Einheit oder dem Objekt damit mehrere Zugfallspositionen zuweisen kann. Verbindet man die Einheit beispielsweise mit 3 Markern, kann diese Einheit beim Spielstart entweder an der ursprnglich gesetzten Position oder an einer der 3 Zufallspositionen stehen. Dies spart ein Skript und bietet gleichzeitig Dynamik.
40
Kapitel 2
- Die Dateien Kapitel 2 Nachdem du im Kapitel 1 in die Oberche eingefhrt wurdest, wird dich dieses Kapitel eine Ebene tiefer, nmlich zum Standgerst einer Mission fhren. Hier werden dir die einzelnen Dateien erklrt, die fr eine Mission wichtig sind. In ihnen werden unter anderem wichtige Informationen gespeichert und konguriert.
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13
Der Missionsordner Die Mission.sqm Die Description.ext Die Stringtable.csv Die Init.sqs Das Skript (.sqs) Die Funktion (.sqf ) Das Paa-Format Die PBO Die Sounddateien Die Lip-Dateien Das Overview Das Brieng
42 43 48 51 53 54 54 55 56 56 57 58 59
41
Die hier zu lesenden Dateinamen sind vorgegeben und nicht variabel! Lediglich das Bild Title.paa und die Ordner knnten anders benannt werden. Hier mal die nher erluterten Dateibedeutungen: Mission.sqm Description.ext Stringtable.csv Brieng.html Overview.html Titel.paa Missionskoordinaten Missionskonguration (Musik, Sound, Waen, Identitten, Ressourcen usw.) Textausgabe fr mehrsprachige Missionen Brieng beim Missionsstart Missionsinfo in Missionsauswahlmen Overview Bild
Die verschiedenen Briengdateien stellen das Brieng in verschiedenen Sprachen dar. Wenn man seine Mission natrlich nur mit einer Sprache ausstatten will, gengt die Brieng.html, der Rest der HTML-Dateien kann dann gelscht werden. Bei nur einer Sprache ist es egal, ob man in der Brieng.html deutsch, englisch oder sonstiges verwendet. Mehr aber im Kapitel 2.13 im Unterbereich Das Brieng. Music Sound Scripts Scenes Function Pictures Fr Musikdateien Fr Soundateien (z.B. Sprache oder Eekte) Fr die Skripte (.sqs) Fr die Zwischensequenzen (z.B. Intro, Outro usw.) Fr die Funktionen (.sqf ) Fr die Bilder (z.B. Titel.paa)
Mchte man eine Datei aus einem Unterordner aufrufen, gibt man in der Syntax den jeweiligen Ordner, dann Backslash und die jeweilige Datei an. Zum Beispiel das Aufrufen eines Skriptes: [] exec scripts\script.sqs 42
Kapitel 2
43
Neben der Class Mission gibt es noch die Class Intro, Class OutroWin und OutroLoose, die vom Aufbau her genauso sind, wie die Class Mission. Hier sind jedoch die Einheiten, Wegpunkte usw. fr die jeweilige Sequenz deniert. Es ist mglich nderungen direkt in der Mission.sqm vorzunehmen. Dabei ist es wichtig, dass man die nderungen richtig vornimmt. Wenn man das Ergebnis danach im Editor sehen will, muss man die Mission dort erst neu laden. Sollte das Spiel beim Laden komplett abstrzen, ist wohl ein Fehler unterlaufen. Deshalb bietet es sich an vorher immer eine Kopie der Mission.sqm zu machen, um spter eine funktionierende Datei zu haben.
Einheits- und Objektklassen Nach dem Anfangsbereich kommt man in der Class Mission in den Unterbereich Class Groups und damit in den Unterbereich Class Vehicles in welcher die Einheiten, Objekte und die dazugehrigen Wegpunkte deniert sind.
class Groups { items=22; class Item0 { side="WEST"; class Vehicles { items=1; class Item0 { position[]={7973.895020,4.460081,9351.659180}; id=0; side="WEST"; vehicle="SoldierWB"; player="PLAYER COMMANDER"; leader=1; rank="CORPORAL"; skill=0.200000; text="aP"; init="this addWeapon ""binocular""; }; }; };
Wie man sieht, sind hier smtliche Informationen fr diese Einheit namens S1 deniert. Hier die Erluterung der Begrie: Items=1 Class Item0 Side Class vehicles Items=1 44 Zeigt die Anzahl der Items der Class Groups an. Also die Anzahl der Gesamtgruppen aller Seiten auf einer Karte Ist die Gruppe 0. Die nchste Gruppe hiee Class Item1 Die Seite der jeweiligen Gruppe. Auch eine einzelne Einheit wird als Gruppe deniert und angegeben! Sagt aus, dass es sich um ein Vehikel handelt Die Anzahl der Items(Einheiten) der Gruppe Class Item0 an
Class Item0
Presence Position Azimut ID Side Vehicle Player Leader Skill Health Ammo Text Init
Class Item0 ist Leader der Gruppe Class Item0. Der dem Leader unterstellte Soldat ist Class Item1, der nchste Class Item2 usw. Wahrscheinlichkeit der Anwesenheit (Nicht bei Spieler!) YXZ-Koordinaten des Spielers in der Anordnung X Z Y Blickrichtung der Einheit (Wert denierbar von 0 bis 360) ID der Einheit Spielerseite Art der Einheit Spieler Gibt an, ob die Einheit ein Leader ist. Fhigkeit der Einheit (Wert denierbar von 0 bis 1) Gesundheitsstatus (Wert denierbar von 0 bis 1) Munitionsstatus (Wert denierbar von 0 bis 1) Name der Einheit (Variable) Die Initzeile der Einheit (Angabe einer Syntax etc.)
Kapitel 2
Wegpunkt-Klassen Unter der jeweiligen Gruppe sind die zu der Gruppe gehrigen Wegpunkte angeordnet. Diese sind von der Anordnung her den Einheiten gleich, aber eben von der Zusammenstellung etwas anders.
class Waypoints { items=1; class Item0 { position[]={7970.289551,4.731988,9346.483398}; placement=50.000000; CombatMode="RED"; Speed="FULL"; combat="COMBAT"; description="Hold this position!"; expActiv="[] exec""scripts\script.sqs"; class Eects { timeoutMin=10.000000; timeoutMid=3.000000; timeoutMax=30.000000: }; showWP="NEVER"; }; };
Wie man sieht, sind hier smtliche Informationen fr diesen Wegpunkt der Gruppe deniert. Der nchste Wegpunkt schaut, je nach Einstellung wieder ganz anders aus. Hier die dazugehrigen Erluterungen: Items=1 Zeigt die Anzahl der Items der Class Waypoints an. Also die Anzahl der gesamten Wegpunkte der Gruppe. 45
Class Item0 Position Placement CombatMode Formation Speed Combat Description ExpActiv
Class Item0 ist der erste Wegpunkt. Der zweite wrde dann Class Item1, der bernchste Class Item2 usw. heien. YXZ-Koordinaten des Wegpunktes, in der Anordnung XZY. Ist der zufallsbedingte Platzierungsradius des Wegpunktes. Der jeweilige Kampfmodus der Gruppe ab diesem Wegpunkt. Die jeweilige Formation der Gruppe ab diesem Wegpunkt. Die Geschwindigkeit der Gruppe ab diesem Wegpunkt. Das jeweilige Verhalten der Gruppe ab diesem Wegpunkt. Die Beschreibung des Wegpunktes, welche man, wenn der Wegpunkt im Spiel angezeigt wird, lesen kann. Die Aktivierungszeile des Wegpunktes, die bei Auslsung des Wegpunktes ausgelst wird. Hier wird ein Skript mit Namen Script.sqs aus dem Ordner Scripts aktiviert. Die krzeste Auslsezeit des Wegpunktes in Sekunden Der Mittelwert der Auslsezeit des Wegpunktes in Sekunden Die maximalste Auslsezeit des Wegpunktes in Sekunden Gibt an, ob der der Wegpunkt im Spiel angezeigt wird oder nicht.
Bei diesem Wegpunkt wurden keine Eekte deniert. Diese sind dann bei den Auslserklassen mit erklrt. Marker-Klassen Nach den Gruppen und den dazugehrigen Wegpunkten folgt die Klasse der Marker. Ab hier werden smtliche Marker aufgelistet, die in der Mission gesetzt werden. Das Ganze sieht etwa so aus:
class Markers { items=28; class Item0 { position[]={2452.061035,0.760200,3673.595703}; name="TargetOne"; text="Objective Alpha"; type="Flag"; a=2.000000 b=2.000000 angle=0.100000 }; };
Hier die Beschreibung der einzelnen Punkte: Items=1 Class Item0 Position 46 Zeigt die Anzahl der Items der Class Markers an. Also die Anzahl der gesamten Marker in der Mission Class Item0 ist der erste Marker. Der zweite wrde dann Class Item1, der bernchste Class Item2 usw. heien. YXZ-Koordinaten des Markers, in der Anordnung XZY.
Der Name des Markers. Die Beschreibung des Markers, die man spter auf der Karte liest Die Art des Markers. Hier ein Fadenkreuz. Die Gre des Markers in X-Richtung Die Gre des Markers in Y-Richtung Der Winkel des Markers.
Kapitel 2
Auslser-Klassen Diese sind von der Sache her hnlich wie ein Wegpunkt zu betrachten und auch die Anordnung ist, wie man sehen kann, fast gleich. Hier sind auch mal Eekte mit aktiviert worden, um diese mal in der Mission.sqm sehen zu knnen.
class Sensors { items=53; class Item0 { position[]={8012.703613,6.300000,9301.049805}; a=100.000000; b=100.000000; activationBy="WEST"; timeoutMin=10.000000; timeoutMid=3.000000; timeoutMax=30.000000: age="UNKNOWN"; name="DetectorOne"; expCond="Var1"; expActiv="[] exec ""scripts\script.sqs"""; expDesactiv="[] exec ""scripts\animation-end.sqs"""; }; };
Items=1 Class Item0 a b ActivationBy TimeOutMin TimeOutMid TimeOutMax Age Name ExpCond ExpActiv
ExpDesactiv
Zeigt die Anzahl der Items der Class Sensors an. Also die Anzahl der gesamten Auslser auf der Karte. Class Item0 ist der erste Auslser. Der zweite wrde dann Class Item1, der bernchste Class Item2 heien usw. Die Gre des Auslsers in X-Richtung Die Gre des Auslsers in Y-Richtung Aktivierung durch WEST Die mindest Auslsezeit des Auslsers Der Mittelwert der Auslsezeit des Auslsers Die maximalste Auslsezeit des Auslsers Unknown Der Name des Auslsers Die Bedingung der Auslsung. Hier die Variable Var1. Die Aktivierungszeile des Auslsers, die bei der Auslsung des Auslsers ausgelst wird. Hier wird ein Skript mit Namen Skript.sqs aus dem Ordner Scripts aktiviert. Die Deaktivierungszeile des Auslsers. Hier kann man den Auslser wieder deaktivieren. 47
Es ist, je nach Mission, nicht notwendig alle Bereiche in die Datei einzubauen. Man nimmt nur das, was fr die Mission bentigt wird. Damit spart man sich zum Einen eine Menge Arbeit und zum Anderen auch gleich mgliche Fehlerquellen, die dabei auftauchen knnen. Fr eine Einzelspielermission ist es schlielich vllig berssig, wenn man den Respawn mit angibt. Es ist auf jeden Fall darauf zu achten, dass alle Klammern { die genet werden, auch wieder geschlossen }; werden. Andernfalls strzt ArmA sofort ab! Auch andere Fehler machen sich teilweise durch einen Absturz bemerkbar! Deshalb ist hier ein gewissenhaftes Arbeiten angesagt. Mchte man Missionszubehr, wie den Kompass oder die Uhr in der Mission verbergen oder verfgbar machen, macht man das mit 1 oder true fr aktiv/sichtbar oder mit 0 oder false fr inaktiv/unsichtbar. Hinter die beiden // oder einem Semikolon ; hat man die Mglichkeit etwas zu schreiben, was ArmA ignoriert. Dies lediglich dient der bersicht in Form einer berschrift, die man bei einer groen Description schnell verlieren kann. Hat man nun nderungen in der Datei vorgenommen und wieder in den Editor gewechselt, muss man die Mission erst nochmal speichern oder neu laden, damit die 48
nderungen wirksam werden. Sollte das Spiel dabei abstrzen, nicht gleich die Geduld verlieren und einfach kurz nach dem Fehler suchen. Deshalb ist es sinnvoll einen Abschnitt nach dem anderen zu denieren. Somit wei man sofort, dass der Abschnitt betroen ist, den man gerade bearbeitet hat. Hier sieht man, wie eine Description.ext in etwa aussehen kann.
// ====================== Description.ext =====================> Debrieng = 1; OnloadIntro = 1; OnLoadIntroTime = 1; OnLoadMissionTime = 1; Saving = 0; // === Titlecut ==============================================> OnloadIntro= M r - M u r r a y p r o u d l y p r e s e n t s onLoadMission= A R M E D A S S A U L T // === Punktvergabe ==========================================> minScore=200 avgScore=2500 maxScore=6000 // === Missionszubehr =======================================> ShowCompass = 1; ShowMap = 1; ShowGPS = 1; ShowWatch = 1; // === Respawn ===============================================> respawn=3; respawndelay=10; // === Waen ================================================> class Weapons { class M4 { count = 4; }; class Javelin { count = 2; }; }; // === Magazine ===============================================> class Magazines { class 20Rnd_556x45_Stanag { count = 10; }; class Javelin { count = 6; }; }; // === Musik ================================================> class CfgMusic {tracks[]= { Track1,Track2}; class Track1 { name = "Track1"; sound[] = {\music\track1.ogg, db+0, 1.0}; };
Kapitel 2
49
class Track2 { name = "Track2"; sound[] = {\music\track2.ogg, db+0, 1.0}; }; }; // === Sounds ===============================================> class CfgSounds { sounds[]= {Sound1}; class Sound1 { name = "Sound1"; sound[] = {\sounds\sound1.ogg, db+0, 1.0}; }; }; // === Radio ================================================> class CfgRadio { sounds[] = { }; }; // === Umgebung =============================================> class CfgSFX { sounds[] = {}; }; class CfgEnvSounds { sounds[] = {}; }; // === Identitten ==========================================> class CfgIdentities { class MrMurray { name = "MrMurray"; face = "Face33"; glasses = "none"; speaker = "Dan"; pitch = 1.00; }; class Memphisbelle { name = "Memphisbelle"; face = "Face10"; glasses = "none"; speaker = "Howard"; pitch = 1.00; }; class Dan { name = "Dan"; face = "Face22"; glasses = "none"; speaker = "Russell"; pitch = 1.00; }; }; // End Of File
50
Kapitel 2
Bei dem folgenden Bild, wurde ein Wegpunkt mit Text versehen, welcher direkt aus der Stringtable bezogen wird, welche dafr wie folgt deniert wurde: STR_Mission_1,"Hold Position!","Position halten!","",Missionstext1 51
Bei dem Wegpunkt wurde dabei folgendes in die Description-Zeile geschrieben: @STR_ Mission_1 Wie man hier sehen kann, wird der Text dann direkt so in die Mission bergeben.
Natrlich ist es hierbei auch mglich in einem Satz oder Text einen Zeilenumbruch anzugeben, was gleich etwas besser aussieht. Dazu verwendet man lediglich ein \n STR_Mission_1,"Hold Position\nand wait for orders!","","",Missionstext1 Hier wurde eine Texteinblendung verwendet, was in der Mission dann so aussieht:
Hier nochmal ein kurzes Dateibeispiel einer Stringtable aus einer originalen Armed Assault Mission, wobei man hier sehr gut erkennen kann, dass darin nur eine Sprache deniert wurde.
LANGUAGE,English,Notes STR_M11_Name,"Night Patrol",Mission Name STR_M11_OnLoad,"You're on duty tonight",Onload STR_M12_OnLoad,"Dontsleep and keep your eyes open!",Onload COMMENT, -------------- Main Mission ------------STRCAMP_OBJSTART,Guard the military installation, STRM_07an01,"Southern sector, Sahrani",prebrieng STRM_07an02,"NATO base in La Riviere, Sahrani",prebrieng STRM_07an03,"Near Paraiso - One hour later, Sahrani",prebrieng
Im Kapitel 5.67 ndet sich eine Auswahl von Stringtable Grundwerten, welche direkt in ArmA hinterlegt sind. Ebenso auch im Kapitel 7.13 in welchem aber nur MP-Werte aufgelistet sind. Diese kann man ganz einfach fr seine Mission verwenden, ohne eigene Stringtablewerte erstellen zu mssen. 52
Kapitel 2
Natrlich kann man hier noch weit mehr vordenieren, als oben angegeben. Zum Beispiel das Verhalten von Einheiten, die Bewanung, Variablen, Einheitsstatus lschen, Funktionen laden und so weiter. Diese Datei sollte nur mal als Beispiel dienen. Alle hier angegebenen Skript oder hnliches mssen natrlich extra geschrieben werden bzw. die Missionsziele auch so vordeniert und benannt werden. Wie man auerdem sieht, ist hier alles sehr bersichtlich gehalten. Dabei wird alles, was hinter einem Semikolon steht, von ArmA ignoriert und dient hier als Beschreibung um die bersicht zu behalten. 53
Anwendungsmig sind Funktionen so zu benutzen, dass sie eine bestimmte Aufgabe lsen und dies mit einem so kurzen und bndigen Schreibaufwand wie mglich. Hinzu kommt, dass man diese Funktion dann auch in anderen Missionen jederzeit verwenden kann, ohne sie umschreiben zu mssen. Man schreibt sie lediglich ein einziges Mal zum Erfllen eines ganz bestimmten Zweckes. Beispielsweise ist es mglich mit Hilfe einer Funktion einen Vektor zu berechnen. Oder auch viele andere Bereiche lassen sich mit Funktionen wesentlich einfacher realisieren. Es ist besser viele kleine Funktionen zu haben, als nur ein langes Skript. Hierbei geht es weniger um die Performance. Wichtiger ist die Wiederverwertbarkeit dieser Funktion. Mehr zum Thema Funktionen kann man im Kapitel 9.13 nachlesen.
Kapitel 2
Zum Betrachten und zum Bearbeiten von Paa- bzw. Pac-Dateien verweise ich auf die Armed Assault Fanseiten, auf denen man die entsprechenden Tools nden wird. 55
Kapitel 2
0.400, 0 0.440, 1 0.480, 3 0.520, 0 0.560, 1 4 Frame-Pausen 0.720, 2 2 Frame-Pausen 0.800, 1 0.840, 2 0.920, 1 1.000, 2
Dieses Beispiel ist ja nur fr eine Sekunde. Man kann sich dann schon vorstellen, wie lang eine 10 oder 15 Sekunden lange Lip-Datei aussehen kann. Damit man das aber alles nicht per Hand machen muss, gibt es Tools, die fr die Erstellung solcher Dateien konzipiert sind. Hier verweise ich mal wieder auf die Armed Assault Fanseiten, auf denen man die entsprechenden Tools nden und runterladen kann.
57
Rechts ist die Missionsauswahl und links die Info mit Bild zu der Mission zu sehen. Zum Erstellen eines Overviews wren gewisse Html-Kenntnisse von Vorteil, aber auch wer sich damit nicht auskennt, bekommt das ohne weiteres hin. Am besten ist es immer, wenn man sich die Overview aus einer anderen Mission herauskopiert, einfach umschreibt und mit einen eigenem Bild versieht. Zu Beginn erstellt man zunchst einmal eine Textdatei, welche man spter, wenn man alles fertig konguriert hat, dann in Overview.html umbenennt. Diese Textdatei net man dann und trgt dort etwa folgenden Quelltext ein, welcher aus einer original Armed Assault Mission stammt.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta name="GENERATOR" content="VB"> <title>Overview</title> </head> <body bgcolor="#FFFFFF"> <br> <!--Nachtwache--> <br> <p align="center"><img src="Title.paa" width="230" height="115"></p> <BR> <p> <! ---Missionsinfo> Wieder steht eine langweilige Nachtwache an. Es ist eine warme Nacht <! ---Ende Missionsinfo> </p></body> </html>
58
Kapitel 2
Trotz allem folgt hier jetzt der trockene Weg zum Erstellen eines Briengs. Im Brieng selbst gibt es ja, wie man oben sieht, den Abschnitt Plan und den Abschnitt Notes. Beide stellen zwei verschiedene Seiten dar, die aber in einer Datei verarbeitet werden. Zum Erstellen eines Briengs wird zunchst wieder eine ganz normale Textdatei bentigt. Diese wird zunchst wieder normal als Textdatei genet und in ihr der Quelltext nach den eigenen Bedrfnissen verfasst. Nach Abschluss der Arbeit, wird die Datei geschlossen und in Brieng.html umbenannt. 59
Wie man im Kapitel 2.1 -Der Missionsordner- sehen kann, gibt es mehrere Briengdateien, welche in den jeweiligen Sprachen verfasst sind. Normalerweise ist in der normal benannten Brieng.html alles in Englisch geschrieben. Aber wenn man nur eine Sprache fr seine Mission vordeniert, ist es egal welche Sprache darin vorkommt. Mchte man beispielsweise mehrere Sprachen einbinden, so sollte man sich schon an die Regel halten und die Dateien dementsprechend benennen. Brieng.German.html Overview.German.html Brieng.France.html Overview.France.html Das englische Brieng und Overview wrde in diesem Fall einfach nur wie folgt benannt: Brieng.html Overview.html Auf den folgenden zwei Seiten ist nun das passende Brieng zum Briengbild auf der Vorseite zu sehen. Es wurden lediglich die Notizen hinzugefgt, die im Bild als Notes benannt sind. Mit ein wenig Geduld, Ideenreichtum und Kreativitt kann jeder mit ein bisschen bung ein gut ausgefeiltes Brieng erstellen. So kann ein Brieng einer Mission spter im Quelltext etwa aussehen:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta name="GENERATOR" content="vb"> <title>Brieng</title> </head> <body bgcolor="#FFFFFF"> <h2> <a name="Main"></a> </h2> <! --- Die Notizen ab hier werden die Notizen(Notes) eingetragen.> <h6> Damn thats my rst shooting lesson. <br> </h6> <! --- Ende der Notizen> <hr> <! --- Der Missionsplan Ab hier wird die Missionsbeschreibung angegeben.> <p><a name="Plan"></a> Successfully nish weapon qualication.<br>
60
Expert Marksman rie qualication required to unlock sniper course in line 6. </p> <hr> <! --- Die Missionsziele Ab hier erfolgt die Eintragung der Missionsziele> <p><a name="OBJ_1"></a> Listen to your drill instructor until he lets you go. </p><hr> <p><a name="OBJ_2"></a> Qualify with rie in line 1. </p><hr> <p><a name="OBJ_3"></a> Qualify with automatic weapon in line 2. </p><hr> <p><a name="OBJ_4"></a> Qualify with granade launcher in line 3. </p><hr> <p><a name="OBJ_5"></a> Familiarize with hand granades in line 4. </p><hr> <p><a name="OBJ_6"></a> Qualify with M9 pistol in line 5. </p><hr> <! --- Ende des Missionsplans> <! --- Abschlussbrieng Festlegung des Abschlussbriengs> <hr><br> <h2><p><a name="Debrieng:End1">Qualied</a></p></h2> <br><p> Now I'm a qualied infantryman. </p><br> <hr><br> <h2><p><a name="Debrieng:End2">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End3">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End4">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End5">Title</a></p></h2> <br><p></p><br> <hr><br> <h2><p><a name="Debrieng:End6">Give UP</a></p></h2> <br><p> I gave it up. The infantry training is boring. </p><br> <! --- END debrieng ---> </body> </html>
Kapitel 2 61
Mit <html> und <head> wird die Html-Datei zunchst ernet. Danach folgen einige hier jetzt nicht so wichtige Standartzeilen. Die Hintergrundfarbe wird mit <body bgcolor="#FFFFFF"> deniert, obwohl die bei Armed Assault ohnehin fest ist. Viel wichtiger ist zum Beispiel <br>, was fr einen Zeilenumbruch steht. Hinzu kommen noch Befehle wie <hr> fr eine horizontale Linie, welche man aber nicht sehen kann, dann das <p>, welches fr einen Absatz steht und zu guter letzt das <a>, welches einen Link hervorhebt. Mann hat ja die Mglichkeit Wrter mit Marker zu verbinden, wo das Fadenkreuz dann hinwandert, wenn man diesen Link im Brieng anklickt. Folgend ein kurzes Beispiel: Hat man im Brieng beispielsweise einen Marker mit dem Namen Ziel gesetzt, verlinkt man diesen im Brieng wie folgt. Der Satz im Brieng lautet: Erobern Sie das Ziel. Von diesem Satz soll das Wort Ziel mit dem Marker namens Ziel verlinkt werden. Im Quelltext sieht das dann so aus: Erobern Sie das <a href="marker:ziel">Ziel</a> Wie man sieht, ist der Marker namens Ziel angegeben und zwischen dem <a> und </a> das Wort Ziel. Wenn man jetzt im Brieng auf das Wort Ziel klickt, wandert das Fadenkreuz beim Anklicken auf den Marker namens Ziel, wie auf dem unteren Bild sehr gut zu sehen ist. Befehle, die mit einem Backslash versehen sind, beenden die jeweilige Aktion.
62
Kapitel 3
Waen Fahrzeuge Einheiten Objekte
Nachdem du in den ersten beiden Kapiteln mit der Oberche und den Dateien vertraut gemacht wurdest, kommen wir nun zu den etwas spezielleren Bereichen. Du bist nun fhig Einheiten zu setzen, diese mit Wegpunkten zu verbinden und weit sogar, in welchen Dateien du welchen Bereich nden und kongurieren kannst. Hier werden dir nun alle Bereiche erlutert, die mit Waen, Fahrzeugen, Einheiten und Objekten verbunden sind.
Kapitel 3
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21 3.22
Die Handwaen und statische Waen Die Waenbezeichnungsliste Einheiten bewanen und ausrsten Die Waen- und Munitionskiste Fahrzeuge be- und entladen Waenauswahl im Brieng Die Fahrzeugklassen Die Fahrzeugwaen Die Einheitsklassen Die Shellklassen Die Objekt- und Gebudeklassen Die Panzenklassen Die Steinklassen Die Schilderklassen Waen- und Magazintypen ausgeben lassen Abgefeuerten Typ ausgeben lassen Hat Einheit Wae? Primr- bzw Sekundrwae einer Einheit Hat Einheit Munition Minen erzeugen Waen und Magazine erzeugen Waenblickrichtung ausgeben lassen
64 68 70 71 71 72 73 76 77 80 81 88 90 91 92 92 92 93 93 93 94 95
63
M16A2
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag
M16A2GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203
M4GL - M4A1GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203
Wae: Magazin:
M4
M4A1SD
M4AIM
M16A4
M4A1
M16A4_GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203
M16A4_ACG_GL
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag
Wae: Magazin: 64
M16A4_ACG
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag
MP5A5
30Rnd_9x19_MP5 30Rnd_9x19_MP5SD
MP5SD
30Rnd_9x19_MP5 30Rnd_9x19_MP5SD
Wae: Magazin:
M4SPR
M249
M240
Kapitel 3
Wae: Magazin:
G36a
30Rnd_556x45_ G36
G36C
30Rnd_556x45_G36
G36K
30Rnd_556x45_ G36
Wae: Magazin:
M24
5Rnd_762x51_M24
M107
10Rnd_127x99_M107
Wae: Magazin:
M9
15Rnd_9x19_M9 15Rnd_9x19_M9SD
M9SD
15Rnd_9x19_M9 15Rnd_9x19_M9SD
Wae: Magazin:
Stinger
Stinger
M136
M136
Javelin
Javelin
Wae: Magazin:
M119
30Rnd_105mmHE_M119
M2StaticMG M2HD_mini_TriPod
100Rnd_127x99_M2
SearchLight
65
Wae: Magazin:
MK19_TriPod
48Rnd_40mm_MK19
TOW_TriPod
6Rnd_TOW_Tripod
Stinger_Pod
2Rnd_Stinger
AK74
30Rnd_545x39_AK
AK74GL
30Rnd_545x39_AK 1Rnd_HE_GP25 FlareWhite_GP25 FlareGreen_GP25 FlareRed_GP25 FlareYellow_GP25
AKS74U
30Rnd_545x39_AK
Wae: Magazin:
AKS74UN
30Rnd_545x39_AK 30Rnd_545x39_AKSD
PK
100Rnd_762x54_PK
SVD
10Rnd_762x54_SVD
Wae: Magazin:
AKS74PSO
30Rnd_545x39_AK
KSVK
5Rnd_127x108_KSVK
Wae: Magazin:
Makarov
8Rnd_9x18_Makarov 8Rnd_9x18_MakarovSD
MakarovSD
8Rnd_9x18_Makarov 8Rnd_9x18_MakarovSD
66
Wae: Magazin:
6G30
6Rnd_HE_6G30
RPG7V
PG7V
Strela
Strela
Wae: Magazin:
D30
30Rnd_122mmHE_D30
DSHKM
50Rnd_127x107_DSHKM
DSHkM_Mini_TriPod
50Rnd_127x107_DSHKM
Wae: Magazin:
TOW_TriPod_East
6Rnd_TOW_Tripod
Stinger_Pod_East
2Rnd_Stinger
AGS
29Rnd_30mm_AGS30
Ausrstung allgemein
Wae: Magazin:
LaserDesignator
LaserBatteries
NVGoggles
Binocular
Wae: Magazin:
Handgrenade
Handgrenade
HandGrenadeTimed
HandGrenadeTimed
Pipebomb
Pipebomb
Wae: Magazin:
Mine
Mine
MineE
MineE
SmokeShell
SmokeShell SmokeShellRed SmokeShellGreen
67
Bezeichnung
M16A2 M16A4 M16A4 - Zielfernrohr M 4 - Standard M 4 A1 - Standard M 4 - Schalldmpfer M4 - Aimpoint M 4 - Zielfernrohr Sturmgewehre mit Granatwerfer
Munition
Magazin: 20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD
Magazin:
20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 30Rnd_556x45_StanagSD 1Rnd_HE_M203 FlareWhite_M203 FlareGreen_M203 FlareRed_M203 FlareYellow_M203 20Rnd_556x45_Stanag 30Rnd_556x45_Stanag 200Rnd_556x45_M249 30Rnd_556x45_StanagSD 100Rnd_762x51_M240 30Rnd_556x45_G36
Granate: Flares:
M249
M249 SAW
Magazin:
M240 G36a G36C G36K M24 M107 MP5A5 MP5SD M9 M9SD M136 Javelin Stinger
M240 G 36 Standard G 36 - Kommando G 36 Kommando II Scharfschtzengewehr Scharfschtzengewehr MP5 - StandardMP5 Schalldmpfer Pistole Pistole - Schalldmpfer M136 - Panzerfaust Javelin - Panzerfaust Stinger - Fliegerfaust
Magazin: Magazin:
68
Munition
Magazin: Magazin: Granate: Flares: 30Rnd_545x39_AK 30Rnd_545x39_AK 1Rnd_HE_GP25 FlareWhite_GP25 FlareGreen_GP25 FlareRed_GP25 FlareYellow_GP25 30Rnd_545x39_AK 30Rnd_545x39_AKSD 30Rnd_545x39_AK AK74PSO 100Rnd_762x54_PK 5Rnd_127x108_KSVK 10Rnd_762x54_SVD 8Rnd_9x18_Makarov 8Rnd _9x18_MakarovSD 6Rnd_HE_6G30 RPG7V Strela
Kapitel 3
AKS74U AKS74UN AKS74PSO PK KSVK SVD Makarov MakarovSD 6G30 RPG7V Strela
AKS 74 U - Standard AKS74UN - Schalldmpfer AKS74 - Zielfernrohr MG Scharfschtzengewehr Scharfschtzengewehr Pistole Pistole - Schalldmpfer Granatwerfer Panzerfaust Fliegerabwehr
Ausrstung Waenklasse
Handgrenade HandGrenadeTimed Grenade TimeBomb PipeBomb SmokeShell SmokeShellRed SmokeShellGreen Mine MineE Binocular NVgoggles LaserDesignator CarHorn SportCarHorn TruckHorn BikeHorn
Bezeichnung
Handgranate Handgranate (zeitverzgert) Granate Zeitbombe Sprengsatz Weie Rauchgranate Rote Rauchgranate Grne Rauchgranate Panzermine Schtzenmine Fernglas Nachsichtgert Lasermarkiergert Autohupe Sportautohupe Lkw-Hupe Fahrradklingel
Munition
Handgrenade HandGrenadeTimed Grenade TimeBomb PipeBomb SmokeShell SmokeShellRed SmokeShellGreen Mine MineE Binocular NVgoggles LaserBatteries CarHorn SportCarHorn TruckHorn BikeHorn
69
Die Art der Wae Die Anzahl der Waen Die Art der Wae Die Anzahl der Waen
Die Art der Magazine Die Anzahl der Magazine Die Art der Magazine Die Anzahl der Magazine Die Art der Wae Die Anzahl der Magazine
Mchte man die Waenauswahl erweitern, fgt man lediglich die jeweilige Klasse der Wae und die Klasse der Magazine selbst in diesen Abschnitt der Description.ext ein. 72
Beschreibung Land
Kampfpanzer Schtzenpanzer Sanittsschtzenpanzer M113 - Mobiles Hauptquartier (Warfare) Flugabwehrpanzer Schtzenpanzer mit M2-Maschinengewehr Schtzenpanzer mit Granatwerfer Schtzenpanzer mit Panzerabwehrwae Hummer Hummer mit M2 Hummer mit Panzerabwehrwae Hummer mit Granatwerfer Lkw 5 Tonner Lkw 5 Tonner - oen Lkw 5 Tonner mit Maschinengewehr Lkw 5 Tonner - Reparaturfahrzeug Lkw 5 Tonner - Munitionsfahrzeug Lkw 5 Tonner - Tankfahrzeug Lkw 5 Tonner - Munitionsfahrzeug (Warfare) Lkw 5 Tonner - Transporter (Warfare) Lkw 5 Tonner - Bergungsfahrzeug(Warfare) Motorrad
Klassenname
M1Abrams M113 M113Ambul M113_MHQ Vulcan Stryker_ICV_M2 Stryker_ICV_MK19 Stryker_TOW HMMWV HMMWV50 HMMWVTOW HMMWVMK Truck5t Truck5tOpen Truck5tMG Truck5tRepair Truck5tReammo Truck5tRefuel WarfareTruck5tReammo WarfareWestSupplyTruck WarfareWestSalvageTruck M1030 AH1W AH6 AV8B2 AV8B A10 MH6 UH60MG UH60 Camel ParachuteWest Zodiac RHIB RHIB2Turret
Kapitel 3
Luft
Cobra-Kampfhubschrauber Little Bird Helikopter bewanet Harrier mit Raketen Harrier mit Bomben A10 mit Raketen und GAU12 Little Bird Helikopter unbewanet Blackhawk - Helikopter mit MG Blackhawk - Helikopter mit Raketenwerfer Doppeldecker Fallschirm
Wasser
Schlauchboot Patrouillenboot mit Maschinengewehr Patrouillenboot mit MG und Granatwerfer
73
OSTEN Fahrzeug
T72 BMP2 BMP2Ambulance BMP2 Mobile HQ ZSU BRDM2 BRDM2_ATGM UAZ UAZMG Ural Ural Open Ural Repair Ural Reammo Ural Refuel Ural Ammo Ural Supply Ural Salvage Motorcycle Datsun DshKm - 1 Datsun DshKm - 2 Datsun Pk -1 Datsun Pk -2 Hilux DshKm - 1 Hilux DshKm - 2 Hilux Pk -1 Hilux Pk -2 SU 34 SU 34B Mi 17 Mi 17 KA-50 Camel E Parachute PBX Boat
Beschreibung Land
Kampfpanzer Schtzenpanzer Sanittsschtzenpanzer BMP2 - Mobiles Hauptquartier (Warfare) Shilka Flugabwehrpanzer Schtzenpanzer Schtzenpanzer mit Panzerabwehrwae Jeep Jeep mit Maschinengewehr Lkw Lkw - oen Lkw - Reparaturfahrzeug Lkw - Munitionsfahrzeug Lkw - Tankfahrzeug Lkw - Munitionsfahrzeug (Warfare) Lkw - Transporter (Warfare) Lkw - Bergungsfahrzeug (Warfare) Motorrad Pick-up mit schwerem MG Pick-up mit schwerem MG Pick-up mit MG Pick-up mit MG Pick-up mit schwerem MG Pick-up mit schwerem MG Pick-up mit MG Pick-up mit MG
Klassenname
T72 BMP2 BMP2Ambul
BMP2_MHQ
ZSU BRDM2 BRDM2_ATGM UAZ UAZMG Ural UralOpen UralRepair UralReammo UralRefuel WarfareUralReammo WarfareEastSupplyTruck WarfareEastSalvageTruck TT650G DATSUN_DSHKM1 DATSUN_DSHKM2 DATSUN_PK1 DATSUN_PK2 HILUX_DSHKM1 HILUX_DSHKM2 HILUX_PK1 HILUX_PK2 SU34 SU34B Mi17_MG Mi17 KA50 Camel2 ParachuteEast PBX
Luft
SU 34 mit Raketen, FFAR, Bordkanone SU 34 mit Raketen und Bordkanone Helikopter mit Maschinengewehr Helikopter mit Raketenwerfer Kampfhubschrauber Doppeldecker Fallschirm
Wasser
Schlauchboot
74
WIDERSTAND Fahrzeug
T72 RACS M113 RACS Vulkan RACS 4x4 4x4 MG 4x4 Open AH6 RACS MH6 RACS UH60 (FFAR) RACS UH-60 RACS Parachute CRRC
Beschreibung Land
Kampfpanzer Schtzenpanzer Flugabwehrpanzer Jeep geschlossen Jeep mit Maschinengewehr M2 Jeep oen
Klassenname
T72_RACS M113_RACS Vulcan_RACS Landrover LandroverMG Landrover_Closed AH6_RACS MH6_RACS UH60RACS UH60MGRACS ParachuteG Zodiac2
Luft
Kampfhubschrauber Little Bird UH-60 (FFAR) RACS UH-60 RACS Fallschirm
Kapitel 3
Wasser
Schlauchboot
ZIVILISTEN Fahrzeug
Pick-Up Pick-Up 2 Pick-Up 3 Oroad Oroad2 Oroad3 Sedan Hatchback Skoda Skoda (Blue) Skoda (Red) Skoda (Green) Policecar HMMWV (Civil) Bus UralCivil UralCivil 2 Traktor Motorcycle Parachute Parachute DC3
Bemerkung Land
Pick-Up blau Pick-Up rot geschlossen Pick-Up grn Gelndewagen grau oen Gelndewagen rotes Verdeck Gelndewagen wei oen Auto wei Auto rot Skoda wei Skoda blau Skoda rot Skoda grn Polizeijeep HMMWV (Zivil) Stadtbus Lkw gelb geschlossen Lkw blau genet Traktor Motorrad
Klassenname
Datsun1_civil_1_open Datsun1_civil_2_covered Datsun1_civil_3_open Hilux1_civil_1_open Hilux1_civil_3_open Hilux1_civil_2_covered Car_sedan Car_hatchback Skoda SkodaBlue SkodaRed SkodaGreen Landrover_Police HMMWV_civil Bus_city UralCivil UralCivil2 Tractor TT650C ParachuteC Parachute DC3
Luft
Fallschirm Leerer Fallschirm DC3
75
Wae
M134 FFARLauncher HellreLauncher FFARLauncher M197 TwinM134 FFARLauncher GAU12 SidewinderLauncher BombLauncher GAU12 MaverickLauncher GAU8 TwinVickers CamelGrenades 2A42 80mmLauncher VikhrLauncher PKT 57mmLauncher R73Launcher S8Launcher GSh301 Ch29Launcher GSh301
Magazin
200Rnd_762x51_134 38Rnd_FFAR 8Rnd_Hellre 38Rnd_FFAR 750Rnd_M197_AH1 4000Rnd_762x51_M134 14Rnd_FFAR 300Rnd_25mm_Gau12 4Rnd_Sidewinder_AV8B 5Rnd_GBU12_AV8B 300Rnd_25mm_Gau12 5Rnd_Maverick_A10 1350Rnd_30mmAP_A10 500Rnd_TwinVickers 6Rnd_Grenade_Camel 230Rnd_30mmHE_2A42 230Rnd_30mmAP_2A42 40Rnd_80mm 12Rnd_Vikhr_KA50 2000Rnd_762x54_PKT 96Rnd_57mm 4Rnd_R73 42Rnd_S8T 180Rnd_30mm_GSh301 6Rnd_Ch29 180Rnd_30mm_GSh301 250Rnd_30mmHE_2A42 250Rnd_30mmAP_2A42 2000Rnd_762x54_PKT 8Rnd_AT5_BMP2 500Rnd_145x115_KPVT 150Rnd_762x54_PKT 5Rnd_AT5_BRDM2 100Rnd_127x99_M2 2100Rnd_20mm_M168 20Rnd_120mmSABOT_M1A2 20Rnd_120mmHE_M1A2 1200Rnd_762x51_M240 23Rnd_125mmSABOT_T72 23Rnd_125mmHE_T72 2000Rnd_23mm_AZP85 2Rnd_TOW 100Rnd_127x99_M2 48Rnd_40mm_MK19 6Rnd_TOW_HMMWV 48Rnd_40mm_MK19 100Rnd_127x99_M2 29Rnd_30mm_AGS30 50Rnd_127x107_DSHKM 100Rnd_127x99_M2 100Rnd_127x99_M2
Land/Wasser
BMP 2 2A42 PKT AT5Launcher KPVT PKT AT5Launcher M2 M168 M256 M240_Veh D81 AZP85 TOWLauncher M2 MK19 TOWLauncherSingle MK19 M2 AGS30 DSHKM M2 M2
T72, T72Racs Shilka Stryker ATGM Stryker ICV MG Stryker MK19 HMMWV TOW HMMWV MK19 5to LKW MG UAZ AGS 30 UAZ MG Army 4x4 M2 RHIB
76
Beschreibung
Klassenname
Fliegerabwehrsoldat mit Stinger SoldierWAA Panzerabwehrsoldat mit M136 SoldierWAT MG-Schtze mit M249 SoldierWAR Doppeldecker Pilot mit M9 BISCamelPilot Fahrzeugbesatzung mit M4A1 SoldierWCrew Pionier mit M4 AIM SoldierWMiner Grenadier mit M4 203 SoldierWG MG-Schtze mit M240 SoldierWMG Sanittssoldat mit M4 AIM SoldierWMedic Ozier mit M9 OcerW Pilot mit M4A1 SoldierWPilot Schtze mit M4AIM SoldierWB Schtze mit M4AIM SoldierWNOG Special Forces mit M4A1GL SoldierWSaboteurAssault Special Forces mit M4 SPR SoldierWSaboteurMarksman Special Forces mit M4 A1 SD SoldierWSaboteurRecon Special Forces mit M4 A1 SD SoldierWSaboteurPipe Special Forces mit MP 5 SD SoldierWSaboteurPipe2 Scharfschtze mit M24 SoldierWSniper Zugfhrer mit M4 AIM SquadLeaderW Gruppenfhrer mit M4 AIM TeamLeaderW Gefangener ohne Wae SoldierWCaptive Gruppenfhrer M16A4 ACOG GL USMCD_Soldier_TL MG-Schtze mit M240 USMCD_Soldier_MG Fliegerabwehrsoldat mit Stinger USMCD_Soldier_AA Schtze mit M16A4 USMCD_Soldier_R Schtze mit M16A4 ACOG GL USMCD_Soldier_GL Schtze mit M16A4 und Minen USMCD_Soldier_Engineer Panzerabwehrsoldat mit M136 USMCD_Soldier_AT Sanittssoldat mit M4 AIM USMCD_Soldier_Med Zugfhrer mit M16A4 ACOG USMCD_Soldier_SL MG-Schtze mit M249 USMCD_Soldier_AR Panzerabwehrsoldat mit Javeline USMCD_Soldier_HAT Scharfschtze mit M24 USMCD_Soldier_Sniper Schtze mit M16A4 ACOG USMCD_Soldier_Spotter Schtze mit M16A4 (WDL) US_Soldier_WDL Sanitter mit M16A4 (WDL) US_Soldier_WDL_Med Schtze mit M16A4 RCO GL (WDL) US_Soldier_WDL_GL Panzerabwehrsoldat mit M136 (WDL) US_Soldier_WDL_AT Fliegerabwehrsoldat mit Stinger (WDL) US_Soldier_WDL_AA MG-Schtze mit M240 (WDL) US_Soldier_WDL_MG Schtze mit M16A4 und Minen (WDL) US_Soldier_WDL_Engineer Scharfschtze mit M24 (WDL) US_Soldier_WDL_Sniper MG-Schtze mit M249 (WDL) US_Soldier_WDL_AR Gruppenfhrer mit M4 AIM (WDL) US_Soldier_WDL_TL Zugfhrer mit M16A4 ACOG (WDL) US_Soldier_WDL_SL Sldner Anfhrer SoldierMTeamLeader Sldner Grenadier SoldierMG Sldner MG SoldierMMG Sldner Reparatur SoldierMR Sldner Sniper SoldierMS Sldner Sprengcommando SoldierMD
Kapitel 3 77
OSTEN Einheit
Beschreibung
Klassenname
SoldierEAA SoldierEAT BISCamelPilot2 SoldierECrew SoldierEMiner SoldierESaboteurPipe SoldierESaboteurMarksman SoldierESaboteurBizon SoldierEG SoldierEMG SoldierEMedic SoldierEB SoldierENOG OcerE SoldierEPilot SoldierESniper SquadLeaderE TeamLeaderE SoldierECaptive SoldierPTeamLeader SoldierPAT SoldierPSaboteur SoldierPMG SoldierPMedic SoldierPB
AA Specialist Fliegerabwehrsoldat mit Strela AT Specialist Panzerabwehrsoldat mit RPG 7 V Camel Pilot Doppeldecker Pilot Crewman Fahrzeugbesatzung Engineer Pionier Especas Speznaz mit AKS 74 U Especas Marksman Speznaz mit AKS74PSO Especas Saboteur Speznaz mit AKS 74 UN Grenadier Grenadier Machinegunner Soldat mit Maschinengewehr PK Medic Sanittssoldat Rieman Soldat mit AK-74 Rieman Soldat mit AK-74 Ocer Ozier Pilot Pilot Sniper Scharfschtze mit Dragunov (SVD) Squad Leader Zugfhrer Team Leader Gruppenfhrer Prisoner Gefangener Partisan Team Leader Partisane Anfhrer Partisan AT Specialist Partisane PzAbw Partisan Saboteur Partisane Saboteur Partisan Machinegunner Partisane MG Partisan Medic Partisane Sanitter Partisan Rieman Partisane Schtze
WIDERSTAND Einheit
AA Specialist AT Specialist Crewman Engineer Grenadier Machinegunner Medic Ocer Pilot Rieman Rieman Royal Commando Royal Guard Royal Marksman Sniper Squad Leader Team Leader Prisoner Spy
Beschreibung
Fliegerabwehrsoldat mit Stinger Panzerabwehrsoldat mit M136 Fahrzeugbesatzung Pionier Grenadier Soldat mit Maschinengewehr M240 Sanittssoldat Ozier Pilot Soldat mit M16 A2 Soldat mit M16 A2 Knigliches Kommando mit MP 5 SD Knigliche Garde mit G36c Kniglicher Scharfschtze mit G36a Scharfschtze mit M24 Zugfhrer Gruppenfhrer Gefangener Spion
Klassenname
SoldierGAA SoldierGAT SoldierGCrew SoldierGMiner SoldierGG SoldierGMG SoldierGMedic Ocer G SoldierGPilot SoldierGB SoldierGNOG SoldierGCommando SoldierGGuard SoldierGMarksman SoldierGSniper SquadLeader TeamLeader SoldierGCaptive SoldierSpy
78
ZIVILISTEN Einheiten, die hier mit N/A angegeben sind, sind im Editor selbst nicht verfgbar. Diese kann man, wie in Kapitel 5.45 erlutert, mit dem CreateVehicle-Befehl erzeugen. Einheit
Civilian bis Civilian21
Beschreibung
Klassenname
Nhere Beschreibung nicht erforderlich. Civilian Durchnummeriert von Civilian bis Civilian21
Civilian Man Civilian Man King War Correspondent Bodyguard Prime Minister Reporter (Female) Reporter (Female) Reporter (Female) Reporter (Female) Zombie Zombie Zombie Zombie Prisoner 1 Prisoner 2 Prisoner 3 Prisoner 4 Prisoner 5 Prince (civil) Prince (Army) Prince (Partisan) Chancellor Adjutant (Uniform) Adjutant (Prisoner) Arms trader SLA President SLA President
Zivilist mit roter Mtze Zivilist mit Rockershirt Knig Kriegsberichterstatter Leibwchter Premierminister Reporterin Reporterin Reporterin Reporterin Zombie Zombie Zombie Zombie Gefangener 1 Gefangener 2 Gefangener 3 Gefangener 4 Gefangener 5 Prinz(Zivil) Prinz(Armee) Prinz(Partisane) Kanzler Adjutant(Uniform) Adjutant(Gefangener) Waenhndler SLA Prsident SLA Prsident
D2_RCM03_Civilian1 D2_RCM03_Civilian2 King FieldReporter Anchorman NorthPrimeMinister MarianQuandt MarianQuandt02 MarianQuandt03 MarianQuandt04 Civil_Undead_1 Civil_Undead_2 Civil_Undead_3 Civil_Undead_4 Prisoner01 Prisoner02 Prisoner03 Prisoner04 Prisoner05 Prince_civil Prince_army Prince_resistance Chancellor AdjutantUniform AdjutantPrisoner ArmsTrader civil_nprem2 civil_nprem2_NoGeom
Kapitel 3
INSEKTEN
Typ
N/A N/A N/A N/A N/A N/A
Beschreibung
Mwe Libelle Hausiege Honigbiene Mosquito Schmetterling
Klassenname
Seagull Dragony HouseFly Honeybee Mosquito Buttery
79
80
Beschreibung
Zelt (klein) Bmp2 Wrack Fsser Fass rot Fass brown Fass gelb Fass grn rostig Fass grn rostig Fass wei-lila Leiche Hubschrauber Wrack Kamera auf Dreibein Zelt (oen) Zelt (oen) Zelt Ost (oen) Zelt Ost (oen) Computer Warnschild Warnschild Westen Warnschild Unabhngig (RACS) Warnschild Ost (SLA) Jeepwrack (Zivil) Jeepwrack (Zivil) Ecksandsack Feuer Feuer (angezndet) Fahnenmast WEST Fahnenmast OST (SLA) Fahnenmast Unabhngig (RACS) Festung 1 (klein) Festung 2 (gro) Sandsackmauer Sandsackmauer mit Palette Jeep Wrack 1 Jeep Wrack 2 Jeep Wrack 3 Grabhgel Grab mit Kreuz Grab mit Kreuz Grab mit Kreuz u. Helm Heli-H Heli-H Unsichtbar Heli-HZivil Heli-H Rettung Jeep Wrack (Zivil) Leiter Radar Hindernis bung bung 2 bung 3 Karussell
Klassenname
ACamp Bmp2Wreck Barrels Barrel1 Barrel2 Barrel3 Barrel4 Barrel5 Barrel6 Body BlackhawkWreck Camera1 Camp CampEmpty CampEast CampEastC Computer Danger DangerWest DangerGUE DangerEAST Datsun01Wreck Datsun02Wreck Fence Fire FireLit FlagCarrierWest FlagCarrierNorth FlagCarrierSouth Fortress1 Fortress2 FenceWood FenceWoodPalet JeepWreck1 JeepWreck2 JeepWreck3 Grave GraveCross1 GraveCross2 GraveCrossHelmet Heli HeliHEmpty Heli_H_Civil Heli_H_rescue HiluxWreck Land_ladder Land_radar Land_obihacka Land_podlejzacka Land_prolejzacka Land_prebehlavka Land_kolotoc
Kapitel 3 81
Typ
Carousel small Swing Prolezacka SandPit Obstakle Fuel Tank Small Fuel Tank Big Fuel Tank Letter Land Water Tank Land Water Tank MASH M113 Wreck Paleta1 Paleta2 Radio Shed Shed Small Shed Big TargetE TargetEpopup Wood tank TV Studio TV Studio (Building) TV Radio Tower TV Radio Tower Gangway Ural Wreck Bale Of Straw Closet Vysilacka Wall Map RahmadiMap Sleeping Bag Wire Wire Fence Barrier AmmoBoxWest SpecialBoxWest WeaponBoxWest AmmoBoxEast SpecialBoxEast WeaponBoxEast AmmoBoxGuer SpecialBoxGuer WeaponBoxGuer Little Church Big Church Middle Church Mexican Church Church House House House House House House House House House House
Beschreibung
Kleines Karussell Swing Klettergerst Sandkasten 3-Bein Hindernis Kleiner Treibstotank Groer Treibstotank Groer Treibstotank mit Leiter Wassertank Wassertank Feldlazarett M113 Wrack Palette Paletten Radio Tarnnetz (klein) Tarnnetz (gro) Unterstand (gro) Zielscheibendummy Zielscheibendummy (Popup) Holzpanzer Fernsehstudio Fernsehstudio (Gebude) TV-Sendeturm TV-Sendeturmverbindung Ural Wrack Strohballen Dixiklo Funkgert Landkarte Landkarte Rahmadi Schlafsack Stacheldraht Drahtzaun Schranke Munitionskiste West Gemischte Kiste West Waenkiste West Munitionskiste Ost Gemischte Kiste Ost Waenkiste Ost Munitionskiste Racs Gemischte Kiste Racs Waenkiste Racs Kleine Kirche Groe Kirche Mittlere Kirche Kirche (mexikanisch) Kapelle Hafenhaus Hafenhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus (begehbar)
Klassenname
Land_maly_kolotoc Land_houpacka Land_kulata_prolezacka Land_Piskoviste Land_jezekbeton Land_fuel_tank_small Land_fuel_tank_big Land_fuel_tank_stairs Land_water_tank Land_water_tank2 MASH M113Wreck Paleta1 Paleta2 Radio Shed ShedSmall ShedBig TargetE TargetEpopup TargetGrenade TVStudio Land_Vysilac_budova Land_Vysilac_vez Land_Vysilac_chodba UralWreck Vec03 Land_Toilet Vysilacka WallMap RahmadiMap Land_SleepingBag Wire WireFence ZavoraAnim AmmoBoxWest SpecialBoxWest WeaponBoxWest AmmoBoxEast SpecialBoxEast WeaponBoxEast AmmoBoxGuer SpecialBoxGuer WeaponBoxGuer Land_kostel Land_kostel2 Land_kostel3 Land_kostel_mexico Land_kostelik Land_sara_domek01 Land_sara_domek02 Land_sara_domek05 Land_sara_zluty_statek_in Land_sara_Domek_sedy Land_dum_mesto2 Land_sara_domek_sedy_bez Land_sara_domek_rosa Land_sara_zluty_statek Land_sara_domek_zluty
82
Typ
House House Houseblock (small) Houseblock (middle) Houseblock (big) Hotel Hotelruin Holiday-In Holiday-In Holiday-In-Ruin Holiday-In-Ruin Weekend Flat House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) House House House House House House House House (Classic) Little House Old House Red House Red House Red House City House (yellow) House House House House House House House House House House Houseblock (small) Houseblock (middle)
Beschreibung
Wohnhaus Wohnhaus Wohnblock (klein) Wohnblock (mittel) Wohnblock (gro) Hotel Hotelruine Ferienanlage Ferienanlage Ferienanlagenschutthaufen Ferienanlagenschutthaufen Wochenendhaus Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch /begehbar) Haus (orientalisch) Wohnanlage (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Haus Haus Haus Haus Haus Haus Haus Haus (klassisch) Kleines Haus Altes Haus Backsteinhaus Backsteinhaus Backsteinhaus Stadthaus (gelb) Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus Wohnhaus (begehbar) Wohnhaus Wohnhaus Wohnblock (klein) Wohnblock (mittel)
Klassenname
Land_sara_domek_zluty_bez Land_OrlHot Land_Panelak Land_Panelak2 Land_Panelak3 Land_Hotel Land_Hotel_ruins Land_hotel_riviera1 Land_hotel_riviera2 Land_hotel_riviera1_ruins Land_hotel_riviera2_ruins Land_house_y Land_dum_olez_istan1 Land_dum_olez_istan2 Land_dum_olez_istan2_maly Land_dum_olez_istan2_maly2 Land_dum_istan2 Land_dum_istan2b Land_dum_istan2_01 Land_dum_istan2_02 Land_dum_istan2_03 Land_dum_istan2_03a Land_dum_istan2_04a Land_dum_istan3 Land_dum_istan3_hromada Land_dum_istan3_hromada2 Land_dum_istan3_pumpa Land_dum_mesto3_istan Land_dum_istan4 Land_dum_istan4_big Land_dum_istan4_big_inverse Land_dum_istan4_detaily1 Land_dum_istan4_inverse Land_dumruina Land_dumruina_mini Land_sara_domek_kovarna Land_dum_rasovna Land_Statek_kulna Land_stanice Land_ryb_domek Land_statek_hl_bud Land_bouda1 Land_sara_domek_ruina Land_cihlovej_dum Land_cihlovej_dum_in Land_cihlovej_dum_mini Land_kasarna_rohova Land_sara_domek05 Land_sara_zluty_statek_in Land_sara_Domek_sedy Land_dum_mesto2 Land_sara_domek_sedy_bez Land_sara_domek_rosa Land_sara_zluty_statek Land_sara_domek_zluty Land_sara_domek_zluty_bez Land_OrlHot Land_Panelak Land_Panelak2
Kapitel 3 83
Typ
Houseblock (big) Hotel Hotelruin Holiday-In Holiday-In Holiday-In-Ruin Holiday-In-Ruin Weekend Flat House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental) House (Oriental/Open) House (Oriental) House (Oriental) House (Oriental) House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) Tall House (Oriental) House House House House House House House House (Classic) Little House Old House Red House Red House Red House City House (yellow) City House (yellow) City House (yellow) City House (yellow) Pub Building Landhouse Landhouse Landhouse Landhouse City House (Classic) City House (Classic) House with House House (long) House (at) Big House
Beschreibung
Wohnblock (gro) Hotel Hotelruine Ferienanlage Ferienanlage Ferienanlagenschutthaufen Ferienanlagenschutthaufen Wochenendhaus Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch /begehbar) Haus (orientalisch) Wohnanlage (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch/begehbar) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Haus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Hochhaus (orientalisch) Haus Haus Haus Haus Haus Haus Haus Haus (klassisch) Kleines Haus Altes Haus Backsteinhaus Backsteinhaus Backsteinhaus Stadthaus (gelb) Stadthaus (gelb) Stadthaus (gelb) Stadthaus (gelb) Gaststtte Amtsgebude Landhaus Landhaus Landhaus Landhaus Stadthaus (klassisch) Stadthaus (klassisch) Eckhaus Haus mit Tor Haus (lang) Haus (ach) Groes Haus
Klassenname
Land_Panelak3 Land_Hotel Land_Hotel_ruins Land_hotel_riviera1 Land_hotel_riviera2 Land_hotel_riviera1_ruins Land_hotel_riviera2_ruins Land_house_y Land_dum_olez_istan1 Land_dum_olez_istan2 Land_dum_olez_istan2_maly Land_dum_olez_istan2_maly2 Land_dum_istan2 Land_dum_istan2b Land_dum_istan2_01 Land_dum_istan2_02 Land_dum_istan2_03 Land_dum_istan2_03a Land_dum_istan2_04a Land_dum_istan3 Land_dum_istan3_hromada Land_dum_istan3_hromada2 Land_dum_istan3_pumpa Land_dum_mesto3_istan Land_dum_istan4 Land_dum_istan4_big Land_dum_istan4_big_inverse Land_dum_istan4_detaily1 Land_dum_istan4_inverse Land_dumruina Land_dumruina_mini Land_sara_domek_kovarna Land_dum_rasovna Land_Statek_kulna Land_stanice Land_ryb_domek Land_statek_hl_bud Land_bouda1 Land_sara_domek_ruina Land_cihlovej_dum Land_cihlovej_dum_in Land_cihlovej_dum_mini Land_kasarna_rohova Land_kasarna_brana Land_kasarna Land_kasarna_prujezd Land_hospoda_mesto Land_skola Land_deutshe Land_deutshe_mini Land_domek_rosa Land_dum_m2 Land_dum_mesto Land_dum_mesto_in Land_dum_mesto2l Land_dum_mesto3 Land_dum_olezlina Land_dum01 Land_dum02
84
Typ
House with House with Villa Convent Building (Corner) Convent Building Garage Garage Garage Beach Hut Beach Hut Beach Hut (open) Beach Hut Beach Hut Holiday Hut Little Hut Little Shanty Shelter (little) Shanty Latrine Big Barn (closed) Big Barn (open) Barn Barn (open) Barn (Closed) Barn (open) Old Barn Building (burned) Houseruin (burned) Houseruin (burned) Houseruin (burned) Pubruin (burned) Houseruin Houseruin Houseruin Houseruin (open) Churchruin Bus Stop Bus Stop 2 Market Stall Market Stall 1 Market Stall 2 Military Shelter Military Building (open) Military Building (little) Military Building (open) Military Building (closed) Military Building (open) Bus Stop Ammunition Bunker Ammunition Bunker Ammunition Bunker Metal Tower Wood Tower Metal Tower Airport Tower Military Building Military Building Military Building Military Building
Beschreibung
Haus mit Vordach Haus mit Vordach Villa Klostergebude (Eckhaus) Klostergebude Garage ohne Tor Garage (lang) Garage (kurz) Strandhtte Strandhtte Strandhtte (oene Seiten) Strandhtte Strandhtte Ferienhtte Hundehtte Kleine Holzhtte Schuppen (mini) Holzschuppen Latrine Groe Scheune (geschlossen) Groe Scheune (begehbar) Scheune Holzscheune (begehbar) Holzscheune (oene Seiten) Holzscheune (geschlossen) Alte Scheune (begehbar) Wohnblock (abgebrannt) Hausruine (abgebrannt) Hausruine (abgebrannt) Hausruine (abgebrannt) Gaststtte (abgebrannt) Hausruine Hausruine Hausruine Hausruine (begehbar) Kirchenruine Bushaltestelle Bushaltestelle2 Marktstand Marktstand 1 Marktstand 3 Unterstand (Garagenart) Militrunterkunft (begehbar) Militrgebude (klein) Militrgebude (begehbar) Militrgebude (geschlossen) Militrgebude (begehbar) Bushaltestelle Munitionsbunker (oen) Munitionsbunker Munitionsbunker Metallwachturm (gro) Holzwachturm (gro/Dach) Wachturm (klein/Dach) Flugplatztower Kasernengebude Kasernengebude Kasernengebude Kasernengebude
Klassenname
Land_sara_domek_hospoda Land_sara_domek_podhradi_1 Land_sara_domek_vilka Land_sara_dum_podloubi03klaster Land_sara_dum_podloubi03rovny Land_sara_hasic_zbroj Land_garaz Land_garaz_mala Land_hut01 Land_hut02 Land_hut03 Land_hut04 Land_hut06 Land_ZalChata Land_psi_bouda Land_bouda2_vnitrek Land_kulna Land_bouda3 Land_KBud Land_stodola_old Land_stodola_old_open Land_strazni_vez Land_sara_stodola Land_sara_stodola2 Land_sara_stodola3 Land_hut_old02 Land_afbarabizna Land_afdum_mesto2 Land_afdum_mesto2L Land_afdum_mesto3 Land_afhospoda_mesto Land_dulni_bs Land_dum_zboreny Land_dum_zboreny_total Land_hruzdum Land_kostel_trosky Land_zastavka_jih Land_zastavka_sever Land_stanek_1 Land_stanek_1B Land_stanek_1C Land_army_hut_storrage Land_army_hut_int Land_army_hut2 Land_army_hut2_int Land_army_hut3_long Land_army_hut3_long_int Land_aut_zast Land_garaz_s_tankem Land_garaz_bez_tanku Land_ammostore2 Land_hlaska Land_posed Land_vez Land_letistni_hala Land_budova1 Land_budova2 Land_budova3 Land_budova4
Kapitel 3 85
Typ
Military Building Guardhouse Military Hospital Repair Center Hangar (green) Hangar (grey) Hangar Hangar ruin Fuelstop (small) Fuelstop (small) Fuelstop (big) Fuelstop (Military) Factory Factory Tall Tower Metall Hut Little Metal Hut Glass Tower Transformer Station Transformer Station Radiotower Radiotower Radiotower Water Tower Silo Lighthouse Lighthouse Lighthouse with podest Lighthousepodest Harbour piece Harbour piece Harbour piece Bridge with roof Bridge Bridge (end) Fence Fencegate Wall Stonegate Archway Archway Stonefence Woodfence Basefence (camo) Basefence (grey) Basefence (Desert) Stoplight Stoplight 2 Landeld light Landeld light Landeld light Landeld light Power supply line Electricity pylon Power supply line Power supply line Ladder (big) Scaold Scaold
Beschreibung
Kasernengebude Wachhuschen Kasernenhospital Werkstatt Hangar (grn) Hangar (grau) Lagerhalle (Hangar) Hangarschutthaufen Tankstelle (klein) Tankstelle (klein) Tankstelle (gro) Tankstelle (Militr) Fabrikgebude Fabrikgebude Hoher Schornstein Metallbude (Kontrollposten) Kleine Blechhtte Glas Aussichtsturm Trafostation Trafostation Sendeturm Sendeturm Sendeturm (gro) Wasserturm Hochsilo Leuchturm Leuchturm Leuchturm mit Podest Leuchturmpodest Hafenanlage Hafenanlage Hafenanlage Steg (berdacht) Steg Steg (Endstck) Zaun Zauntor (Stein) Mauer mit Loch Steintor Torbogen mit Tor Torbogen ohne Tor Steinzaun (kaputt) Holzzaun (kaputt) Kasernenzaun (tarn) Kasernenzaun (grau) Kasernenzaun (Wste) Ampel Ampel 2 Landebahnbeleuchtung Landebahnbeleuchtung Landebahnbeleuchtung Landebahnbeleuchtung Stromleitung (Trafostation) Strommast (gro) Stromleitung Stromleitung Leiter (gro) Gerst Gerst
Klassenname
Land_budova4_in Land_budova5 Land_hospital Land_repair_center Land_SS_hangar Land_SS_hangarD Land_hangar_2 Land_SS_hangar_ruins FuelStation Land_fuelstation Land_benzina_schnell Land_fuelstation_army Land_Tovarna1 Land_Tovarna2 Land_komin Land_Hlidac_budka Land_bouda_plech Land_strazni_vez Land_trafostanica_velka Land_trafostanica_mala Land_Vysilac_FM Land_vysilac_FM2 Land_telek1 Land_watertower1 Land_Nasypka Land_majak Land_majak2 Land_majak_v_celku Land_majak_podesta Land_molo_beton Land_molo_krychle Land_molo_krychle2 Land_molo_drevo Land_molo_drevo_bs Land_molo_drevo_end Land_pletivo_dira Land_plot_zed_drevo1_branka Land_plot_istan1b_hole Land_plot_istan1_rovny_gate Land_brana02 Land_brana02nodoor Land_plot_zboreny Land_Plot_Ohrada_Pruchozi Land_zed_dira Land_zed_dira_desert Land_zed_dira_civil Land_Stoplight01 Land_Stoplight02 Land_Runway_PAPI Land_Runway_PAPI_2 Land_Runway_PAPI_3 Land_Runway_PAPI_4 Land_trafostanica_velka_draty Land_sloup_vn Land_sloup_vn_dratZ Land_sloup_vn_drat Land_ladder Land_leseni2x Land_leseni4x
86
Typ
Castletower Castlewall Castlewall Castlewall Castlewall Wall with door Wall ruin Wall ruin Wall with gate (closed) Wall with gate (open) Fountain Oil pump Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Citywall Stoned area Stoned area Scrapheap Scrapheap Scrapheap Minaret Old Silo Bam - Sawmill Old Silo Bam - Sawmill Big Carport Big Carport with camo net Tower with searchlight Camouaged water tower Aircraft Factory Aircraft Factory (West) Aircraft Factory (SLA) Airport Barracks Barracks (West) Barracks (East) Camp Contruction Site (West) Contruction Site (West) Contruction Site (East) Contruction Site (East) Crate Depot Headquarters (West) Headquarters (East) HeavyFactory HeavyFactory (West) HeavyFactory (East) LightFactory LightFactory (West) LightFactory (East) Mobile HQ (West) M113 Mobile HQ (East) BMP2
Beschreibung
Burgturm Burgmauer Burgmauer Burgmauer Burgmauer Mauer mit Durchgang Mauerruine Mauerruine Mauer mit Tor (geschlossen) Mauer mit Tor (oen) Brunnen (Handpumpe) lpumpe Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Podest) Stadtmauer (Treppen) Stadtmauer (Treppen) Stadtmauer (Treppen) Stadtmauer (Treppen) Gepasterte Flche Gepasterte Flche Schutthaufen Schutthaufen Schutthaufen Minarett Alte Siloscheune - Sgewerk Alte Siloscheune - Sgewerk Groes Carport Groes Carport (Tarnnetz) Wachturm mit Scheinwerfern Getarnter Wasserturm Flugzeug Fabrik Flugzeug Fabrik (Westen) Flugzeug Fabrik (Osten) Hangar Zelt mit Sandscken Zelt mit Sandscken (Westen) Zelt mit Sandscken (Osten) Sandsackstellung Container (Westen) Container (Westen) Container (Osten) Container (Osten) Holzkiste Groer Sandsackbunker (2-Stock) Hauptquartier (Westen) Hauptquartier (Osten) Groe Fabrik Groe Fabrik (Westen) Groe Fabrik (Osten) Kleine Fabrik Kleine Fabrik (Westen) Kleine Fabrik (Osten) Mobiles Hauptquartier (Westen) Mobiles Hauptquartier (Osten)
Klassenname
Land_helfenburk Land_helfenburk_brana Land_helfenburk_budova2 Land_helfenburk_cimburi Land_helfenburk_zed Land_zidka_branka Wallend Land_zidka03 Land_statek_brana Land_statek_brana_open Land_pumpa Land_vez_ropa Land_podesta_1_cube Land_podesta_1_cube_long Land_podesta_1_cornl Land_podesta_1_cornp Land_podesta_1_mid_cornl Land_podesta_1_mid_cornp Land_podesta_1_mid Land_podesta_1_stairs Land_podesta_1_stairs2 Land_podesta_1_stairs3 Land_podesta_1_stairs4 Land_podesta_5 Land_podesta_10 Land_AFbarabizna_ruins Land_AFDum_mesto2_ruins Land_AFDum_mesto2L_ruins Land_R_Minaret Land_Kamenolom_budova Land_pila Land_pristresek Land_pristresek_camo Land_Vez_svetla Land_vodni_vez WarfareBAircraftFactory WarfareBWestAircraftFactory WarfareBEastAircraftFactory WarfareBAirport WarfareBBarracks WarfareBWestBarracks WarfareBEastBarracks WarfareBCamp WarfareBWestContructionSite WarfareBWestContructionSite1 WarfareBEastContructionSite WarfareBEastContructionSite1 WarfareBCrate WarfareBDepot WarfareBWestHeadquarters WarfareBEastHeadquarters WarfareBHeavyFactory WarfareBWestHeavyFactory WarfareBEastHeavyFactory WarfareBLightFactory WarfareBWestLightFactory WarfareBEastLightFactory M113_MHQ_unfolded BMP2_MHQ_unfolded
Kapitel 3 87
Typ
Hesco Site Hesco 5x Hesco 10x Hesco 10x Tall Sandbag Site Nest Low Nest MG Nest M240 (West) MG Nest PK (SLA) MG Nest_M240 (Resistance) MG Static M2 (Resistance)
Beschreibung
Sandsackmauer Kleine Sandsackmauer Groe Sandsackmauer Hohe Sandsackmauer Sandsackmauer Kleines Schtzennest (knien) Kleines Schtzennest (liegen) Schtzennest mit M240 (Westen) Schtzennest mit PK (Osten) Schtzennest mit M240 (Widerstand) Maschinengewehr M2 (Widerstand)
Klassenname
WarfareBHescoSite WarfareBHesco5x WarfareBHesco10x WarfareBHesco10xTall WarfareBSandbagSite WarfareBNest WarfareBLowNest WarfareBWestMGNest_M240 WarfareBEastMGNest_PK WarfareBResistanceMGNest_M240 WarfareBResistanceM2StaticMG
Beschreibung
Baum (blattlos) Bananenbaum Bananenbaum Bananenbaum Bananenbaum Disteln Hohe Grser Steinpilz Blumen Farne Wstengras Grasblumen Gras Langes Gras Weie Blumen Gras Gelbe Blumen Pilz Fliegenpilz Fliegenpilz Pilz Blumen Gras Weie Grasblumen Hoher Nadelbaum Hoher Nadelbaum Busch Busch Wstengras Gemischtes Gras Laubbaum Laubbaum Laub (liegend) Busch (klein) Busch (mittel) Busch (klein) Busch (mini) Grasbusch Doppelgras
Klassenname
AAPL000 AAPL001 AAPL002 AAPL003 AAPL004 AAPL005 AAPL006 AAPL007 AAPL008 AAPL009 AAPL010 AAPL011 AAPL012 AAPL013 AAPL014 AAPL015 AAPL016 AAPL017 AAPL018 AAPL019 AAPL020 AAPL021 AAPL022 AAPL023 AAPL024 AAPL025 AAPL026 AAPL027 AAPL028 AAPL029 AAPL030 AAPL031 AAPL032 AAPL033 AAPL034 AAPL035 AAPL036 AAPL037 AAPL038
88
Typ
Stocks of a trees Stocks of a trees Stock of a tree Grass Middle bush Tall bush Long bush Small bush Long bush Big tree Big tree Big tree Middle tree Tall conifer Tall conifer Big leave grass Bush tree Middle palm tree Middle palm tree Middle palm tree Middle palm tree Double palm tree Palm bush Tall palm tree Middle palm tree Tree stump Tree stump Conifer bush Small conifer Broad conifer Tall conifer Birch tree Tree Tree Tree Small tree Middle decoration tree Small tree Small tree Tree Small tree Tree Small tree Small bush Willow Birch tree Birch tree Bush tree Tree Bush tree Small bush Tall decoration tree Avenue tree Avenue tree Branchwood Branchwood Branchwood Branchwood
Beschreibung
Holzstmme (liegend) Holzstmme (liegend) Holzstamm (liegend) Grserbschel Busch (mittel) Busch (hoch) Busch (lang) Busch (klein) Busch (lang) Laubbaum (gro) Laubbaum (gro) Laubbaum (gro) Laubbaum (mittel) Nadelbaum (hoch) Nadelbaum (hoch) Groblattgras Buschartiger Baum Palme (mittel) Palme (mittel) Palme (mittel) Palme (mittel) Doppelpalme Palmenbusch Palme (gro) Palme (mittel) Baumstumpf Baumstumpf Nadelbusch Nadelbaum (klein) Nadelbaum (breit) Nadelbaum (gro) Birke Laubbaum Laubbaum Laubbaum Laubbaum (schmal) Zierbaum (mittel) Laubbaum (klein) Laubbaum (schmal) Laubbaum Laubbaum (schmal) Laubbaum Laubbaum (klein) Busch (schmal) Weide Birke Birke Buschbaum Laubbaum Buschbaum Busch (schmal) Zierbaum (gro) Alleebaum Alleebaum Gest (liegend) Gest (liegend) Gest (liegend) Gest (liegend)
Klassenname
AAPL039 AAPL040 AAPL041 AAPL042 AAPL043 AAPL044 AAPL045 AAPL046 AAPL047 AAPL048 AAPL049 AAPL050 AAPL051 AAPL052 AAPL053 AAPL054 AAPL055 AAPL056 AAPL057 AAPL058 AAPL059 AAPL060 AAPL061 AAPL062 AAPL063 AAPL064 AAPL065 AAPL066 AAPL067 AAPL068 AAPL069 AAPL070 AAPL071 AAPL072 AAPL073 AAPL074 AAPL075 AAPL076 AAPL077 AAPL078 AAPL079 AAPL080 AAPL081 AAPL082 AAPL083 AAPL084 AAPL085 AAPL086 AAPL087 AAPL088 AAPL089 AAPL090 AAPL091 AAPL092 AAPL093 AAPL094 AAPL095 AAPL096
Kapitel 3 89
Beschreibung
Kieselsteine Granitstein Sandstein (gro) Sandstein (gro) Kalkstein (gro) Kalkstein (gro) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (mittel) Kalkstein (mittel) Kalkstein (mittel) Sandstein (klein) Granitsteine Granitsteine Kalkstein Felsen (klein) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (mittel) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Sandstein (mittel) Kalkstein Felsen (gro) Kalkstein Felsen (gro) Sandstein (klein) Kalkstein (klein) Sandsteine (klein) Sandstein (klein) Sandstein (klein) Sandstein (klein)
Klassenname
AARO000 AARO001 AARO002 AARO003 AARO004 AARO005 AARO006 AARO007 AARO008 AARO009 AARO010 AARO011 AARO012 AARO013 AARO014 AARO015 AARO016 AARO017 AARO018 AARO019 AARO020 AARO021 AARO022 AARO023 AARO024 AARO025 AARO026 AARO027 AARO028 AARO029 AARO030 AARO031 AARO032 AARO033 AARO034 AARO035 AARO036 AARO037 AARO038 AARO039 AARO040 AARO041 AARO042 AARO043 AARO044 AARO045 AARO046 AARO047 AARO048 AARO049 AARO050
90
Beschreibung
Achtung Fahrradfahrer! Achtung Fussgnger! Achtung Fussgnger! (alt) Achtung S-Kurve L! (alt) Achtung S-Kurve L! Achtung S-Kurve R! (alt) Achtung S-Kurve R! Vorfahrt (alt) Vorfahrt Ende (alt) Vorfahrt Ende Vorfahrt Militrschild (SLA/RACS) Militrschild (SLA) Militrschild (RACS) Rastplatz Campingplatz Achtung nicht befestigter Seitenstreifen! Achtung Viehaustrieb! (alt) Achtung Viehaustrieb! Achtung Kreuzung! (alt) Achtung Vorfahrts-Kreuzung! (alt) Achtung Vorfahrts-Kreuzung! Achtung Kreuzung! Achtung Flugverkehr! (alt) Achtung Flugverkehr! Achtung! Erste Hilfe (alt) Erste Hilfe Achtung Schotter! Pannenhilfe (alt) Pannenhilfe Achtung Steinschlag (alt) Achtung Steinschlag Parkplatz (alt) Parkplatz Gefahrenstelle! Richtungstafel L Richtungstafel R Achtung Baustelle! Achtung Fussgngerberweg! Vorfahrt achten! (alt) Vorfahrt achten! Tankstelle (alt) Tankstelle Geradeaus Straenhtchen Straensperre Rampe
Klassenname
AASI012 AASI015 AASI016 AASI019 AASI020 AASI021 AASI022 AASI025 AASI026 AASI027 AASI028 AASI169 AASI181 AASI186 AASI189 AASI190 AASI195 AASI196 AASI197 AASI198 AASI199 AASI200 AASI201 AASI204 AASI205 AASI259 AASI260 AASI261 AASI268 AASI273 AASI274 AASI275 AASI276 AASI277 AASI278 AASI283 AASI284 AASI285 AASI286 AASI287 AASI288 AASI289 AASI290 AASI291 AASI292 RoadCone RoadBarrier_long RampConcrete
Kapitel 3 91
Dazu macht man sich einen Eventhandler zu Nutze, mit welchem die Syntax in der Initzeile einer Einheit, wie im folgenden Beispiel, angelegt wird: this addEventHandler ["Fired", {hint format ["%1", _this]}] Das Ganze geht natrlich auch namenbezogen fr externe Aktionen: Name addEventHandler ["Fired", {hint format ["%1", _this]}]
Als kleines Beispiel nun nochmal zwei Beispiel Syntaxes: ?! (Player hasWeapon "M4") : hint "Der Spieler hat sein M4 verloren!" ? (Player hasWeapon "M4") : hint "Der Spieler hat sein M4 wieder!" Bei der ersten Syntax kommt nun eine Meldung, dass der Spieler sein M4 verloren hat und bei der zweiten eine Meldung, dass er sein M4 zurck hat.
Kapitel 3
94
Kapitel 3 95
Kapitel 4
- Die Mission Nachdem du in den ersten drei Kapiteln die Oberche, die Dateien und die Waen kennen gelernt hast, kommen wir nun zu den etwas spezielleren Bereichen des Missionsdesigns. Hier wirst du lernen, wie man eine Mission startet, die Ziele festlegt, die Erfllung angemessen bewertet und am Ende die Mission ordentlich beendet.
Der Missionsname Der Missionsstart Das Missionszubehr Die Missionswertung Die Missionsziele Mission beenden Mission speichern
97 97 98 99 99 101 103
96
Bei Beispielmission wurde bei Info unter Name auch der Text Beispielmission eingetragen. Bei Beispielmission2 war das nicht der Fall und deshalb steht dort Beispielmission2.Intro. Kapitel 4
Zum Vordenieren des Textes und der Uhrzeit trgt man im Kopf der Description.ext etwa folgendes ein:
onLoadIntro = Mr-Murray proudly presents onLoadMission = Convoy Attack onLoadIntroTime = true bzw. false onLoadMissionTime = false
oder
bzw.
Mchte man keines von Beiden anzeigen lassen, setzt man den Wert dazu lediglich auf 0 oder schreibt stattdessen die Wortform false hinter das Gleichheitszeichen und schon werden der Text und die Uhrzeit nicht angezeigt. 97
Als Text kann man hier natrlich auch die Adresse zur Stringtable.csv denieren. Das sieht dann etwa so aus: onLoadIntro = $STR_Missionsstart Mehr Informationen zum Thema Stringtable.csv sind im Kapitel 2.4 zu nden.
ShowDebrieng = 1; - Abschlussbrieng
Seit Version 1.08 ist es nun auch mglich diese Komponenten ganz ohne Description.extEintrag whrend des Spielverlaufes ein- oder gar auszublenden, was in den ersten ArmAVersionen und frher in OFP nicht so ohne Weiteres mglich war. Dazu setzt man den Wert lediglich auf true oder false. ShowMap true 98
Der Spieler bekommt bereits im Spiel automatisch fr jede gettete Einheit Punkte zugewiesen. Wenn man aber nun machen mchte, dass der Spieler fr das Erfllen eines gewissen Missionziels eine gewisse Wertung erhlt, macht man das mit folgender Syntax: Player addRating Wert Natrlich kann man dem Spieler auch Punkte abziehen. Dann, wenn zum Beispiel etwas zerstrt oder gettet wurde, was nicht htte passieren drfen. Dazu msste dann bei obiger Syntax ein Minuswert verwendet werden. Player addRating -Wert Mchte man eine Abfrage starten dass, wenn der Spieler eine gewisse Punktzahl erreicht hat, die Mission zum Beispiel beendet wird, erstellt man einen Auslser mit der Gre (Achse a/b) 0 und schreibt in die Bedingungszeile: Rating Player > Wert oder Rating Player >= Wert Bei Typ whlt man nun einfach Ende1 aus. Wenn der Spieler nun den Wert erreicht oder berschritten hat, wird die Mission beendet und das Brieng wird mit der jeweiligen Wertung angezeigt. Kapitel 4
99
Beispielmission Der Spieler sieht im Brieng den Auftrag Erobern Sie diese Ortschaft. Der zweite Auftrag Zerstren Sie den Munitionstruck wird zunchst durch den Eintrag in der Init.sqs verdeckt. Wenn der Ort von Feinden befreit wurde, soll das erste Ziel abgehakt und das zweite Ziel sichtbar gemacht werden. Dazu setzt man ber die Ortschaft einen Auslser mit der Beispielgre 300 (bei Achse a/b), whlt bei Aktivierung die Seite aus, die den Ort bewachen soll und whlt bei Art der Aktivierung Nicht vorhanden aus. Der Auslser wrde also ausgelst werden, wenn die jeweilig ausgewhlte Seite nicht mehr im Auslserbereich vorhanden ist. In der Aktivierungszeile gibt man nun die Befehle an, die ausgefhrt werden sollen, wenn der Auslserbereich von Feinden befreit wurde. Dazu gehrten Ziel 1 abhaken und Ziel 2 sichtbar machen. Als kleinen Infotext fgt man ggf. noch einen Hint hinzu. Das Ganze schaut dann so aus: "1" ObjStatus "Done"; "2" ObjStatus "Visible"; hint "Missionsplan aktualisiert" Auf der Karte setzt man ber der Ortschaft, wie in der folgenden Brieng.html schon deniert, einen Marker namens ZielX, welchen das Briengfadenkreuz ansteuert, wenn der Spieler im Brieng auf den Link diese Ortschaft klickt. Beispielabschnitt der dazugehrigen Brieng.html:
<p> <a name="OBJ_1"></a> Erobern Sie <a href="marker:ZielX">diese Ortschaft </a> </p> <hr> <p><a name="OBJ_2"></a> Zerstren Sie den Munitionstruck! </p> <hr>
Der dazugehrige Eintrag in der Init.sqs, der das zweite Missionsziel zunchst verdeckt, muss hierbei "2" ObjStatus "Hidden" lauten. Nun folgend die unterschiedlichen Befehle, die fr den jeweiligen Missionszielstatus gebraucht werden: Hidden Visible Active Done Failed 100 - Missionsziel wird verdeckt - Missionsziel wieder sichtbar - Missionsziel wird wieder aktiviert - Missionsziel wird abgehakt - Missionsziel fehlgeschlagen
Wird der Panzer nun zerstrt oder verlsst er den Auslserbereich, wird die Mission beendet. Da der Panzer aber auf jeden Fall zerstrt werden soll und die Mission nicht beendet werden soll, wenn dieser den Bereich verlsst kommen wir zur globalen Sichtweise.
Einheitsbezogen aus globaler Sicht Dazu setzt man ebenfalls einen Auslser, aber legt keinen Auslserbereich fest, und stellt diesen wie folgt ein: Achse a/b: Typ: Bedingung:
! (alive Panzer1)
0 Ende #1
Der Panzer wurde nun Panzer1 benannt und der Auslserwirkungsbereich mit dem Wert 0 auf globales Prfen geschaltet. Man kann den Auslser nun frei auf der Map platzieren, da er global prft, ob Panzer1 noch lebt. Als Bedingung der Auslsung wurde ja bei Bedingung die Syntax ! (alive Panzer1) angegeben. 101
Der Panzer kann sich nun frei auf der Karte bewegen und die Mission wird erst beendet, wenn dieser zerstrt ist. Natrlich knnte man bei der lokalen Sichtweise die Prfweite auf 5000 oder so stellen , dann wrde der Panzer den Bereich auch nicht verlassen knnen, aber der bersicht halber ist die globale Sichtweise zu bevorzugen. Je weniger Auslserkreise auf einer Karte, desto besser die bersicht beim Editieren. Einheitsbezogen aus globaler Sicht mit mehreren Einheiten Hierzu gelten die gleichen Vorgaben wie bei Einheitsbezogen aus globaler Sicht, nur werden in der Bedingungszeile, noch weitere Bedingungen angegeben. ! (alive Panzer1) AND ! (alive MG1) AND ! (alive Soldat1) Das AND steht fr UND und verbindet somit diese Bedingungen zu einer. Die Mission wird nun erst beendet, wenn die Objekte namens Panzer1, MG1 und Soldat1 tot sind.
Mission wird beendet, wenn der Auslserbereich feindleer ist Auf dem unteren Bild sind mehrere Einheiten zu sehen. Ziel soll es sein die Ortschaft (Auslserbereich) vom Feind zu befreien. Dabei ist es egal, ob diese eliminiert oder aus dem Auslserbereich vertrieben werden. Der Auslser wird hierbei wie folgt deniert:
Ab der Version 1.05 gibt es auch die Mglichkeit einen Auslser so zu kongurieren, dass der Auslser erst auslst, wenn alle Feindeinheiten eliminiert bzw. nicht prsent sind und mindestens eine befreundete Einheit im Auslserbereich ist. Dazu deniert man beim Auslser unter Aktivierung einfach, von welcher Seite (Erobert durch...) dieser Bereich erobert werden soll. Die verfeindete Gegenseite ist dabei egal.
102
Variablenbezogene Beendung der Mission Die variablenbezogene Auslsung einer Mission ist nicht unbedingt schwerer, aber je nach Ausma ein klein wenig aufwendiger. Als Beispiel knnte nun folgendes dienen. Drei unterschiedliche Auslserbereiche sollen vom Feind befreit werden. Erst wenn diese 3 Bereiche, als Beispiel 3 Ortschaften, befreit sind, soll die Mission beendet werden. Das Ganze kann man nun wie folgt lsen: Auslser 1 (Bereich 1): Achse a/b: 100 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel1=true Auslser 2 (Bereich 2): Achse a/b: 150 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel2=true Auslser 3 (Bereich 3): Achse a/b: 100 Aktivierung: OSTEN (nicht vorhanden) bei Aktivierung: Ziel3=true Auslser 4 (Prfer): Achse a/b: Typ: Bedingung: 0 Ende #1 Ziel1 AND Ziel2 AND Ziel3
Kapitel 4
Wie man nun oben sehen kann, wird bei jedem der drei Auslser bei der Auslsung eine Variable (Ziel1, Ziel2, Ziel3) auf true geschaltet. Beim Auslser 4 wurden diese 3 Variablen als Bedingung angegeben, um diesen auszulsen. Sind diese nun erfllt, wird die Mission beendet. Es bietet sich an bei Timeout noch ein paar Werte anzugeben, um die Beendungszeit etwas exibel zu gestalten.
Savegame
Whlt man spter im Men Neuer Versuch, beginnt der Spieler wieder an der Stelle, an welcher das Spiel gespeichert wurde. Mchte man Speichern komplett verbieten, schreibt man in die Description.ext lediglich: saving = 0; 103
Kapitel 5
- Missionszubehr In diesem Kapitel ist alles erlutert, was in einer Mission zu gebrauchen ist. Hier solltest du Antworten auf deine oenen Fragen und zudem noch eine Menge Anregungen fr deine Mission bekommen. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 5.25 5.26 5.27 5.28 5.29 5.30 5.31 5.32 5.33 5.34 5.35 5.36 5.37 5.38 5.39 104 Leeres oder verschlossenes Fahrzeug Fahrer/Beifahrer eines Fahrzeugs Einheit hat Fahrzeugverbot Einheit in Fahrzeug? Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Gruppe zu Missionsbeginn im Fahrzeug Ein- und Aussteigen lassen Geschwindigkeit einer Einheit Geschwindigkeit ausgeben lassen Einheit bleibt stehen Einheiten starten bzw. stoppen Einheit bewegt sich zum Bestimmungsort Streife laufen, fahren oder iegen Fluchtverhalten einer Einheit oder Gruppe Einheiten, Objekte, Auslser u. Marker versetzen Objekte versenken oder hher setzen Flughhe einer Einheit Punktgenaue Helikopterlandung Einheit begibt sich in ein Gebude Einheit verlsst eine Gruppe oder tritt anderer bei Einheit ein Ziel zuweisen Einheit wendet sich anderer zu Einheit whlt Wae Einer Einheit Schaden zufgen bzw. heilen Einrichten einer Todeszone Das Prfen eines Bereiches Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Bekanntheitsgrad einer Einheit Freundlicher Feind Befreundete Parteien Der Alarm Tod als Bedingung Distanz zweier Einheiten oder Objekte Einem Fahnenmast eine Fahne zuweisen Brennende Feuerstelle Spielbare Einheit hinzufgen oder entfernen Spielerseite, -namen, -typ auslesen bzw. ausgeben Spielereingabe unterdrcken 106 106 106 107 107 108 108 108 108 109 109 110 110 110 111 111 112 112 112 113 113 114 114 114 115 115 115 116 117 117 118 119 120 120 120 121 121 121 121
5.40 5.41 5.42 5.43 5.44 5.45 5.46 5.47 5.48 5.49 5.50 5.51 5.52 5.53 5.54 5.55 5.56 5.57 5.58 5.59 5.60 5.61 5.62 5.63 5.64 5.65 5.66 5.67 5.68 5.69 5.70 5.71 5.72 5.73 5.74 5.75 5.76 5.77 5.78 5.79 5.80 5.81 5.82 5.83 5.84 5.85 5.86
Karte auf den Monitor erzwingen Sichtweite ndern Wetter einstellen Datum und Uhrzeit einstellen Zeitlupe oder Zeitsprint Einheiten und Objekte erzeugen Flares, Rauch und Explosionen erzeugen Einheiten und Objekte lschen Funkmen verndern Einer Gruppe ein Rufzeichen zuweisen Funkspruch abgeben Sound erstellen Eigenen Sound einbinden Identitt festlegen Mimiken Der Actionbefehl Der Animationsbefehl KI abschalten SetVelocity Der Informationstext Einheit bleibt liegen, kniet oder steht IDs verwenden Einheiten in Gebuden platzieren Einheit begibt sich zu Gebudeposition Position auslesen Der Eventhandler Texteinblendarten Stringtable Grundwerte Wegpunkte erzeugen Auslser erzeugen Marker erzeugen Rund ums Vehikel Lichtquellen erzeugen Staub erzeugen Rauch erzeugen Feuer erzeugen Dienstgrad vergeben Einheit benutzt Fernglas Einheit einen Fahrzeugplatz zuweisen Einheit ein Team zuweisen Einheit gibt Befehle Hat Einheit Schaden erhalten? Der Flugverkehr Grasdetails heruntersetzen Objekte schrg platzieren Mission verschlsseln bzw. freischalten Leerer Scheinwerfer mit Licht
121 122 122 123 123 124 126 127 127 128 129 129 130 134 135 136 139 144 144 144 144 145 148 153 153 155 157 158 159 160 162 165 167 167 168 169 171 172 172 173 174 174 175 176 176 177 177 105
Kapitel 5
[Name1, Name2, Name3] allowGetIn false [Name1, Name2, Name3] allowGetIn true
106
Kapitel 5
Name in Fahrzeugname
oder
Gruppenbezogen Natrlich geht das Ganze auch gruppenbezogen. Das Fahrzeug soll warten, bis die Gruppe eingestiegen ist. Dazu wird bei der folgenden Syntax auch der Fahrer mitgezhlt, der schon im Truck sitzt. Man muss also die Gre der Gruppe plus den Fahrer rechnen. Dazu gibt man in der Bedingungszeile folgendes an:
oder
oder
{_x moveInCargo Heli1} forEach units group this {_x moveInCargo Heli1} forEach units Group1
Kapitel 5
109
Mchte man eine Gruppe zu einer dort oben aufgefhrten Position schicken, lsst man das do von doMove weg, da sich sonst zunchst nur der Leader zu der angegebenen Position bewegen wird und die Gruppe erst folgt, wenn er sein Ziel erreicht hat. Hier ein Syntaxbeispiel fr Objektbezogen: Name move getPos Name oder Leader Name move getPos Name Sehr interessante Beispiele ndet man im Kapitel 6.6 unter -Der Mapclick- und Kapitel 6.2 -Das GPS-System-.
Ein weiterer Befehl mit Hhenangabe, hier mit dem Wert 10 deniert, wre: Name1 setPos [(getPos Name2 select 0),(getPos Name2 select 1),10] Name1 wrde nun an die Position von Name2 in 10 Meter Hhe versetzt werden. Eine Gruppe versetzt man hierbei mit dem jeweiligen Befehl von oben zum Ziel: {_x setpos getPos Name} foreach units Group1 Folgende Syntax ermglicht es, eine Einheit oder ein Objekt an eine Zufallsposition zu versetzen. Dabei setzt sich die Syntax aus XYZ-Koordinaten und Markern zusammen, woraus die Engine dann automatisch eine der Zufallspositionen auswhlt. Name setVehiclePosition [[1000,2000], ["Marker1", "Marker2", "Marker3"], 0]
Der Inhalt des Arrays [ ] wird wie folgt deniert. Die erste ( ) stellt den Erhalt der XPosition, die zweite ( ) den Erhalt des Y-Position und die Zahl nach den Klammern die Z-Position des Objektes dar. Ersetzt man die beiden this, also das this vor der Klammer, welches fr das Objekt welches zu this, also dem this in der [] versetzt werden soll, durch einen Namen, wird es auch dieser Satz verstndlicher. Name1 soll zu Name2 versetzt werden: Name1 setPos [(getPos Name2 select 0),(getPos Name2 select 1),10]; bersetzt heit das: Name1 setze zu erhaltener X-Position und zu erhaltener Y-Position von Name2 auf Hhe 10 Meter. Neben dem setPos- und getPos-Befehlen gibt es noch setPosASL und getPosASL Befehle, welche die Hhe des Objektes ber dem Meeresspiegel wiedergeben.
doTarget Name2 commandTarget Name2 doFire Name2 doFire ObjNull fire "Waffentyp commandFire Name2
Name1 wendet sich Name2 zu Name1 beehlt einer Einheit auf Name2 zu zielen
Name1 schiet auf Name2 Name1 schiet auf nichts mehr Name1 feuert die Wae blind ab Name1 beehlt einer Einheit auf Name2 zu schieen
113
Kapitel 5
116
Kapitel 5
118
Kapitel 5
Der Auslser prft nun durch Achse 0/0 global, ob Name noch lebt und lst bei Tod die bei Aktivierung oder Eekte gesetzten Aktionen aus.
Russland rus_vlajka_co.paa
SLA sever_vlajka.paa
120
Kapitel 5
Kapitel 5
Zeitsprint: So, wie man die Zeit verlangsamen kann, kann man sie auch beschleunigen, wofr es aber eigentlich im Missionsbereich selbst keine richtige Verwendung geben sollte. Hierbei gelten alle Werte zwischen 1 und 8, welche der KI und dem Spieler schnelle Fe verleihen. 123
Gruppenbezogen: Neben einzelnen Einheiten lassen sich auch Gruppen erstellen. Dazu kann man die Gruppen gleich individuell mit Namen versehen und sie so dann spter ganz einfach ansprechen. Als Beispiel soll hier folgendes Skript dienen, bei welchem eine Gruppe an der Position des Markers "GrpM" erstellt wird, den man zuvor auf die Karte gesetzt hat.
Grp1 = Creategroup EAST; _Leader="SquadLeaderE" createUnit [getMarkerPos "GrpM", Grp1, "Grp1=this", 1, "Sergeant"]; _Unit2="SoldierEB" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit3="SoldierEB" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit4="SoldierEG" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit5="SoldierEMG" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit6="SoldierEAT" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; _Unit7="SoldierESniper" createUnit [getMarkerPos "GrpM", Grp1, "", 1, "Corporal"]; exit
Wie man sieht, wurde hier der ersten Einheit, die lokal Leader benannt wurde, ein hherer Dienstgrad zugewiesen, was sie automatisch zum Leader der Gruppe macht. Der Name der Gruppe ist nun, wie am Anfang des Skriptes deniert, GrpOne. Damit diese Gruppe nun auch in der Mission richtig agiert, muss man noch einen weiteren, sehr wichtigen Punkt beachten. Merke: Erstellt man feindliche Einheiten erst im Laufe der Mission, ohne dass zuvor irgendwelche Einheiten dieser Seite auf der Karte platziert waren, muss man der Seite ein Center zuweisen, damit diese Einheiten miteinander kommunizieren knnen. Danach verwendet man den SetFriend-Befehl und verfeindet die Seiten miteinander. Macht man das nicht, wird die KI nicht auf gegnerische Einheiten feuern. Es bietet sich hierbei an, das Center und den SetFriend-Befehl in der Init.sqs zu initialisieren. Hat man jedoch von Anfang an Einheiten aller Kriegsparteien auf der Karte, so werden diese Center beim Missionsstart automatisch von der Engine erstellt. Folgend die Eintrge in einer Beispiel-Init.sqs: Init.sqs
Createcenter EAST Createcenter WEST WEST setFriend [EAST,0] EAST setFriend [WEST,0]
Kapitel 5
Center So wie man ein Center erstellen kann, kann man es mit deleteCenter SEITE auch wieder lschen, was aber eher unsinnig und unwirksam ist. 125
und folgende Rauch- und Gewehrgranaten zur Auswahl: Smokeshell SmokeshellGreen SmokeshellRed B_40mm_HE
Natrlich kann man statt einer Flare oder einer Rauchgranate auch ganz andere Arten erzeugen. Zum Beispiel eine SH_125_HE oder hnliches fr eine Explosion. Dazu bitte im Kapitel 3.10 nachschlagen. Unter den Shellklassen sind diverse Explosionskrper aufgelistet.
126
Standardmig stehen folgende Werte fr Gruppenname und -farbe zur Auswahl: Gruppennamen: "Alpha" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" Gruppenfarben: 0 keine Farbe 1 Schwarz 2 Rot 3 Grn 4 Blau 5 Gelb 6 Orange 7 Rosa "Golf" "Hotel" "Kilo" "Yankee" "Zulu" "Bualo" "Convoy" "Guardian" "November" "Two" "Three"
Tipp: Seitens des Spiels gibt es ab und dann Probleme, dass die Farbe nicht ausgegeben wird, was aber schon seit Operation Flashpoint bekannt ist. Dies umgehen wir einfach, indem wir beides in eine Zeile schreiben. Die Farbe gibt man dabei manuell an und lsst den hinteren Part, wo man diese normalerweise angibt, einfach oen. Bei folgendem Beispiel heit das Team Assault-Team-Alpha und hat die Farbe Red bekommen. Name setGroupID ["Assault-Team-Alpha - Red",""] 128
Mchte man einen Funkspruch durch das Hauptquartier abgeben lassen: [Seite,"HQ"] sideChat "Move to your position and wait for further orders!"
Der Befehl enableRadio false blendet die Funksprche aus und macht sie unsichtbar.
Kapitel 5
// === Radio/Funk ============================================> class CfgRadio { sounds[] = {Funk1}; class Funk1 { name = "Funk1"; sound[] = {"sound\funk1.ogg", db+5, 1.0}; title = Das ist ein Funkspruck!; }; }; // === Umgebung ============================================> class CfgSFX { sounds[] = {}; }; class CfgEnvSounds { sounds[] = {}; };
Kapitel 5
Wie man oben sehen kann, sind dann noch Bereiche wie Funk (Radio) und zwei verschiedene Umgebungssoundklassen deniert.
class CfgMusic { tracks[]= { Track1,Track2 }; class Track1 { name = "Track1"; sound[] = {\music\track1.ogg, db+0, 1.0};
- Klasse CfgMusic - Trackliste - Klasse Track1 - Name Track1 - Quelle, db = Laustrke, 1.0 = Geschwindigkeit - Texteinblendung zum Sound
titles[] = { }; }; };
Mit db hat man die Mglichkeit die Lautstrke der Sounddatei festzulegen. Dabei kann man kann gut zu laute oder zu leise Dateien entsprechend anpassen. Die Geschwindigkeit, welche oben mit 1.0 festgelegt ist, bestimmt die Geschwindigkeit mit der die Sounddatei abgespielt wird. Somit kann man Sprachsamples hher oder tiefer klingen lassen. Doch sollte man den Wert nicht zu hoch setzen, sonst hat man schnell den M-Mouse Eekt. 131
Mchte man dann eine Sounddatei im Editor abspielen, so whlt man die im Wegpunkt oder einem Auslser im Untermen Eekte aus. Dazu muss man die Mission erst neu geladen oder gespeichert haben, damit ArmA die Description neu einlesen kann. Die nun denierten Sounds lassen sich natrlich auch per Syntax starten. playMusic "Track1" playMusic ["Track1", 30] (Spielt Track1 ab Sekunde 30) playSound "Artillerie" Name say "Soundname" Die lassen sich natrlich auch, wie schon erwhnt in der Laustrke herunterfaden. 10 Fadesound 0.5 10 Fademusic 1 0 FadeRadio 0.1
Der erste Wert steht fr die Zeit in der das geschehen soll und der zweite Wert fr den jeweiligen Lautstrkenwert, den der Sound erhalten soll. Der Befehl preLoadSound ermglicht es, den Sound vorab in den Speicher zu laden. preLoadSound "Track1" Sounds mit Text verknpfen Sounds lassen sich ohne Weiteres mit Text verknpfen. Dabei kann man auf einen Stringtablewert zurckgreifen oder einen eigenen Text direkt in der Description.ext mit angeben. Der Text wird dann beim Abspielen des Sounds mit angezeigt. Im Normalfall nutzt man das bei der Wiedergabe von Sprach- oder Funksounds. In der Description.ext sieht das dann etwa wie folgt aus:
// === Radio ================================================> class CfgRadio { sounds[] = {RadioMsg1, RadioMsg2}; class RadioMsg1 { name = "RadioMsg2"; sound[] = {"\sound\ radiosound1.ogg", db+10, 1.0}; title = "Its done. Now Im ready for further orders."; }; class RadioMsg2 { name = "RadioMsg2"; sound[] = {"\sound\radiosound2.ogg", db+10, 1.0}; title = {$STR_RADIO_2}; }; };
132
Zufallssound aus einem Array abspielen Auch im Soundbereich ist es durchaus mglich so einiges per Zufall zu bestimmen. Eine beliebte Methode ist dabei, die Sounds in einem Array zu denieren und diese dann spter per Zufall auswhlen zu lassen. Dies wird in folgendem Beispiel mal mit einem Skript umgesetzt, wobei die eingetragenen Musikstcke keine Description.ext erfordern, weil sie direkt in der Engine deniert sind. Dieses von uns angelegte Script kann nun ganz normal mit [] exec scripts\music.sqs aufgerufen werden. Hierbei wird nun bei jedem Skriptaufruf ein Sound per Zufall aus dem vordenierten Array ausgewhlt und abgespielt. _music = ["ATrack1","ATrack6", "ATrack10", "ATrack11", "ATrack12", "ATrack13", "ATrack14", "ATrack15", "ATrack19", "ATrack22"]; playMusic ( _music select oor(random((count _music) - 0.5 ))); exit; Zufallssound ohne Skript aufrufen Eine weitere sehr gute Methode der Sounddynamic wre das nun folgende Syntaxbeispiel, wobei man bei diesem aber die Auswahl der Sounds weniger gut selbst bestimmen kann. Wichtig ist hierbei, dass die Sounds, alle den gleichen Namen haben und am Ende eine Zahl. Also zum Beispiel: Track1, Track2, u.s.w.. Hierbei werden nun wieder armainterne Sounds verwendet, welche nach dem gleichen Prinzip von ATrack1 bis ATrack27 deniert sind. Die Namen der Queens Gambit Tracks gehen von QGTrack1 bis QGTrack9. Bei der nun folgenden Sytax steht statt der eigentlichen Zahl nur %1, welches in dem Fall als Platzhalter fr die Zahl steht. Im hinteren Teil der Syntax wird festgelegt aus welchem Wert von 0 bis, in diesem Fall 27, die Zahl generiert werden soll und fr %1 eingesetzt. playMusic format ["ATrack%1",ceil random 27]; Tipp: Folgende Tracks bentigen ebenfalls keine Description.ext-Eintrge: WithCare_Smile - WithCare_Suicide - WithCare_War - WithCare_What Selbstverstndlich kann man statt der Musik eben auch ganz andere Soundarten verwenden. Wenn diese nicht in der Engine defniert sind, muss man sie eben selbst in seiner eigenen Description.ext denieren. Folgendes Syntaxbeispiel zeigt das Ganze nochmal mit dem Befehl Say. Name1 say format ["Hilfe%1",ceil random 3]; Da die generierten Zufallswerte nie genau rund sind, werden sie mit dem Ceil-Befehl aufoder abgerundet, damit es einen runden Wert ergibt und die Engine wei, welcher Sound abgespielt werden soll. 133
Kapitel 5
Wie man erkennen kann, kann man die Namen frei vergeben. Lediglich die Gesichter und der Sprecher sind hierbei vorgegeben. Bitte auch wieder auf die Einhaltung der Klammern in der Description.ext achten! Mchte man im Spiel dann die Identitt der jeweiligen Einheit zuweisen, schreibt man lediglich den vordenierten Namen mit der Syntax in die Initzeile: Name setIdentity "DeinName" oder this setIdentity "Mr-Murray" 134
Diese Indentitt lsst sich in Verbindung mit einer Kampagne auch speichern und spter wieder laden. Der Wert wird dabei direkt in der Objects.sav der Kampagne gespeichert und kann mit deleteIdentity "xyz" ganz leicht wieder gelscht werden. Name saveIdentity "Name1Save" oder Name loadIdentity "Name1Save" Man kann einer Einheit auch nur ein Gesicht zuweisen, das geht dann hiermit: Name setFace "Face33" oder this setFace "Face33"
In Armed Assault stehen 57 Faces, die mit Face1 bis Face53 und FaceR01 bis FaceR04 durchnummeriert sind, zur Auswahl. Hat man eine eigene Facedatei im Missions- bzw. Userordner: Name setFace "MeinBild.jpg" Mgliche Gren: 1024*1024; 512*512; 256*256 Optimale Gre: 512*512; Dateigre 100 Kb Brille (Glasses): Hier eine bersicht der Brillenarten, die man in ArmA vergeben kann: glasses = "spectacles"; glasses = "sunglasses"; glasses = "none"; Normale Brille Sonnenbrille Keine Brille Kapitel 5
Sprecher: Folgende Sprecher stehen bis jetzt in ArmA zur Auswahl: Amy Dan Howard Robert Brian Dusan Mathew Russell
Ryan
Pitch: Mit dem Pitchwert (pitch = 1.00) wird hierbei die Sprachhhe oder -tiefe deniert.
5.54 - Mimiken
Mit folgenden Befehlen kann man den Einheiten Mimiken zuweisen. Das bedeutet, dass man ihnen verschiedene Stimmungen wie frhlich, ernst oder traurig zuweisen kann. Name setMimic "Smile" Normal - Surprised - Agresive - Hurt - Ironic - Smile - Cynic - Angry - Sad - Default Folgende Animation verndert die Gesichtszge mit den Werten 0 bis 1. Name setFaceAnimation 0.5 135
Syntaxformen: Hier die verschiedenen Syntaxformen, die dafr in Frage kommen knnen: Name action [<type>] Name action [<type>, <target>] Name action [<type>, <target>, zustzliche Parameter] Fr zustzliche Parameter trgt man beispielsweise die Wae oder die Magazine ein, wie es in der Liste beschrieben ist. Neben Action gibt es noch Fire, was sich aber auf die wenigsten Befehle bezieht. Folgend nun mal ein paar Beispiele: Name re ["PipebombMuzzle", "PipebombMuzzle", Pipebomb] - legt Sprengsatz ["M203Muzzle", "M203Muzzle", "1Rnd_HE_M203"] - schiet Granate ["M203Muzzle", "M203Muzzle", "FlareGreen_M203"] - schiet Flare ["HandGrenadeMuzzle", "HandGrenadeMuzzle", "HandGrenade"] - wirft Granate ["SmokeShellRedMuzzle", "SmokeShellRedMuzzle", "SmokeShellRed"] - Wirft Rauch ["bombLauncher", "BombLauncher", "6Rnd_GBU12_AV8B"] - Harrier wirft Bombe ab Name action ["TouchO",Name] ["Eject",Heli1] ["Hidebody", Name2] ["CancelAction", Name] 136 - lst Sprengsatz aus - steigt aus - versteckt Leiche - bricht Aktion ab
Actionbefehlsbersicht Folgend nun eine Befehlsbersicht ber die wichtigsten Aktionbefehle. Einige funktionieren von Haus aus nicht bzw. sind von Haus aus noch nicht aktiviert worden. ["None", <target>] ["GetInCommander", <target>] ["GetInDriver", <target>] ["GetInGunner", <target>] ["GetInCargo", <target>] ["Heal", <target>] ["Repair", <target>] ["Refuel", <target>] ["Rearm", <target>] ["GetOut", <target>] ["LightOn", <target>] ["LightO", <target>] ["EngineOn", <target>] ["EngineO", <target>] ["SwitchWeapon", <target>, <weapon index>] ["UseWeapon", <target>, <weapon index>] ["TakeWeapon", <target>, <weapon name>] ["TakeMagazine", <target>, <magazine type name>] ["TakeFlag", <target>] ["ReturnFlag", <target>] ["TurnIn", <target>] ["TurnOut", <target>] ["WeaponInHand", <target>, <weapon name>] ["WeaponOnBack", <target>, <weapon name>] ["SitDown", <target>] ["Land", <target>] ["CancelLand", <target>] ["Eject", <target>] ["MoveToDriver", <target>] ["MoveToGunner", <target>] ["MoveToCommander", <target>] ["MoveToCargo", <target>] ["HideBody", <target>] ["TouchO", <target>] ["SetTimer", <target>]
Kapitel 5 137
["Deactivate", <target>] ["NVGoggles", <target>] ["ManualFire", <target>] ["AutoHover", <target>] ["StrokeFist", <target>] ["StrokeGun", <target>] ["LadderUp", <target>, <ladder index>, <ladder position>] ["LadderDown", <target>, <ladder index>, <ladder position>] ["LadderOnDown", <target>, <ladder index>, <ladder position>] ["LadderOnUp", <target>, <ladder index>, <ladder position>] ["LadderO", <target>, <ladder index>] ["FireIname", <target>] ["FirePutDown", <target>] ["LandGear", <target>] ["FlapsDown", <target>] ["FlapsUp", <target>] ["Salute", <target>] ["ScudLaunch", <target>] ["ScudStart", <target>] ["ScudCancel", <target>] ["User", <target>, <action index>] ["DropWeapon", <target>, <weapon name>] ["DropMagazine", <target>, <magazine type name>] ["UserType", <target>, <action index>] ["HandGunOn", <target>, <weapon name>] ["HandGunO", <target>, <weapon name>] ["TakeMine", <target>] ["DeactivateMine", <target>] ["UseMagazine", <target>, <magazine creator>, <magazine id>] ["IngameMenu", <target>] ["CancelTakeFlag", <target>] ["CancelAction", <target>] ["MarkEntity", <target>] ["Talk", <target>] ["Diary", <target>] ["LoadMagazine", <target>, <magazine creator>, <magazine id>, <weapon name>, <muzzle name>]
138
Gruppenbezogen Neben den Standartbefehlen gibt es natrlich wieder die verschiedensten Mglichkeiten per Zufall zu bestimmen wer eine solche Animation ausfhren soll oder welche Animation einer bestimmten Sorte ausgefhrt werden soll. Fr das Erstere gibt es zum Beispiel folgende Mglichkeit: (Units group Grp1 select 2) playMove "Animation" Hier wrde jetzt die Einheit 3 der Grp1 die Animation ausfhren. Aber wieso eigentlich die Einheit 3, wenn dort select 2 steht? Das erklrt sich wie folgt: select 0 select 1 select 2 Leader Einheit 2 Einheit 3
Gruppenzufalls-Variante Das Ganze ist natrlich auch wieder per Zufall. mglich. Das sieht dann wie folgt aus: ((Units group Grp1) select ceil random 5) playMove "AnimationsName" Hierbei wrde nun mit ceil random 5 ein Zufallswert zwischen 0 und 5 erzeugt, welcher nun die jeweilige, per Zufall ausgewhlte Einheit der Gruppe Grp1, die Animation ausfhren lsst. Die Gruppe sollte hierbei natrlich auch die richtige Gre von mindestens 6 haben.
139
Zufallsanimation Hierbei gibt es verschiedene Varianten, wobei wir uns hier jetzt mal auf zwei beschrnken. Zunchst gibt es die Variante, bei der die Animationen nummeriert sind, wie zum Beispiel die Panik-Animation, die von ActsPercMstpSnonWnonDnon_Panicking1 bis 7 durchnummeriert ist. Wichtig ist hierbei, dass der Name der Animation exakt gleich ist und nur der angehangene Wert, in Form einer Zahl, von einer anderen Animation unterscheidet. Name playMove format ["Animation%1",ceil random 7]; Zufallsanimation aus einem Array beziehen Die andere Variante whlt eine Animation aus einem Array aus. Der Vorteil daran ist, dass man in diesem Array diverse verschiedene Animationen festlegen kann. Dies macht man gewhnlich mit einem Skript, welches dabei wie folgt aussehen kann: [Name] exec "scripts\animation.sqs" _Unit = _this select 0 _Anim = ["Anim1", "Anim2", "Anim3", "Anim4", "Anim5", "Anim6"]; _Unit playMove ( _Anim select oor(random((count _Anim) -0.5 ))); exit; Animationsstatus Der Animationsstatus gibt wieder, ob die Animation noch luft oder schon beendet ist. Dies lsst sich nun natrlich wieder fr diverse Dinge zu Nutze machen. ? animationState _Unit == "Anim1" : hint Anim luft Animationswechsel verhindern Wer kennt das nicht, dass eine Einheit nach einer gewissen Zeit die Animation abbricht und wieder in die Ausgangshaltung wechselt. Dies tut sie genau dann, wenn die Animation beendet ist. Mchte man aber, dass die Einheit in jedem Fall in der gegebenen Animation verharren soll, muss man sich den DisableAI-Befehl zu Nutze machen. Dazu gibt man der Einheit zunchst den Befehl die Animation auszufhren und direkt im Anschluss verwendet man den Befehl DisableAI, was wie folgt aussieht: Name playMove "Animationsbefehl" Name disableAI "Anim" Mchte man, dass die Einheit irgendwann wieder aus der gehaltenen Animation auftaut und wieder in die normale Haltung wechselt, ruft man einfach folgende Syntax auf: Name enableAI "Anim" Eine weitere Mglichkeit einer Animationsschleife ist die Vergabe eines Eventhandlers. Name switchMove "Animation"; Name addEventHandler ["AnimDone", {Name switchMove "Animation"}]; 140
Bezeichnung
Setzt sich hin AmovPsitMstpSlowWrDnon Sitzt ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop1 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop2 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop3 Sitzt und redet ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop4 ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_LoopLong Sitzt und redet Steht rum ActsPercMstpSnonWnonDnon_MarianQ_WarReporter Wirft liegend Granate AwopPpneMstpSgthWnonDnon_throw Wirft Granate AwopPercMstpSgthWrDnon_Throw1 Schwimmt AswmPercMrunSnonWnonDf_AswmPercMstpSnonWnonDnon Stirbt DeadState SprintBaseDf (SprintBaseDfL=rennt links / SprintBaseDfR rennt rechts) Rennt mit Wae SprintCivilBaseDf (SprintCivilBaseDfL=links / SprintCivilBaseDfR=rechts) Rennt ohne Wae Benutzt Fernglas AmovPercMstpSnonWnonDnon_AwopPercMstpSoptWbinDnon Nimmt Haltung an AmovPercMstpSnonWnonDnon_Ease AmovPercMstpSnonWnonDnon_AmovPknlMstpSnonWnonDnon Kniet auf einem Knie Hnde hinter Kopf AmovPercMstpSsurWnonDnon Legt etwas hin (Pipebomb) AmovPercMstpSnonWnonDnon_AinvPknlMstpSnonWnonDnon Setzt sich auf Boden AmovPercMstpSlowWrDnon_AmovPsitMstpSlowWrDnon Kniet nieder und keucht AinvPknlMstpSnonWnonDnon_AmovPknlMstpSrasWpstDnon Kniet nieder und keucht AinvPknlMstpSlayWrDnon_AmovPknlMstpSrasWrDnon Heilanimation AinvPknlMstpSlayWrDnon_healed Heilanimation AinvPknlMstpSlayWrDnon_healed2 Heilanimation AinvPknlMstpSnonWnonDnon_healed_1 Heilanimation AinvPknlMstpSnonWnonDnon_healed_2 Verarztet Opfer AinvPknlMstpSlayWrDnon_medic Verarztet Opfer AinvPknlMstpSnonWnonDnon_medic_1 Verarztet Opfer AinvPknlMstpSnonWnonDnon_medic_2 Schultert Wae AidlPercMstpSnonWnonDnon08 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_1 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_2 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_3 Kniet nieder (Waenkiste) AinvPknlMstpSnonWnonDnon_4 Geht in Stellung AmovPercMrunSlowWrDf_AmovPpneMstpSrasWrDnon Fahrzeugkontrolle AmovPercMstpSnonWnonDnon_carCheckPush Fahrzeugkontrolle AmovPercMstpSnonWnonDnon_carCheckWheel Wscht Fahrzeug AmovPercMstpSnonWnonDnon_carCheckWash Macht Kampfsport AmovPercMstpSnonWnonDnon_exerciseKata Kniebeugen lang. AmovPercMstpSnonWnonDnon_exercisekneeBendA Kniebeugen schell AmovPercMstpSnonWnonDnon_exercisekneeBendB Liegesttze AmovPercMstpSnonWnonDnon_exercisePushup Wird am Bein getroen AmovPercMwlkSlowWrDf_ActsPercMstpSlowWrDnon_HitLeg AmovPercMstpSlowWrDnon_ActsPercMstpSlowWrDr_HideFromFire Weicht Beschuss aus ActsPpneMstpSnonWnonDnon_AmovPercMstpSnonWnonDnon_Injured3 Lehnt getroen an etwas an Vorwrts Mnner AsigPercMstpSlowWrDnon_AmovPercMrunSlowWrDnon_GoGo
Kapitel 5
141
Animation
AmovPercMstpSlowWrDnon_Salute AmovPercMstpSnonWnonDnon_seeWatch AmovPercMstpSnonWnonDnon_talking AmovPercMstpSlowWrDnon_talking ActsPercMstpSnonWnonDnon_MarianQ_shot1man ActsPercMstpSnonWnonDnon_MarianQ_shot3man ActsPercMstpSnonWnonDnon_MarianQ_shot4man ActsPercMstpSnonWnonDnon_MarianQ_shot5man ActsPercMstpSnonWnonDnon_MarianQ_TVstudioMan_Loop1 AmovPsitMstpSlowWrDnon_Smoking AmovPsitMstpSlowWrDnon_WeaponCheck1 (Gilt von 1-2) AmovPsitMstpSnonWnonDnon_ground AmovPsitMstpSlowWrDnon ActsPercMstpSnonWpstDnon_InterrogationSoldier ActsPercMstpSnonWnonDnon_InterrogationVictim ActsPercMstpSnonWrDnon_ArrestingSoldier ActsPercMstpSnonWnonDnon_ArrestingMan ActsPercMstpSnonWnonDnon_ArrestingManLoop AmovPlieMstpSnonWnonDnon ActsPknlMstpSnonWnonDnon_TreatingInjured ActsPpneMstpSnonWnonDnon_Injured1 (Zahl gilt von 1-2) ActsPknlMstpSnonWrDnon_TreatingSoldier AsigPercMstpSlowWrDnon_SendMenInAction ActsPercMstpSlowWrDnon_listeningOrdersUnderFire ActsPknlMstpSnonWnonDnon_ThingPassingStill ActsPercMrunSlowWrDf_FlipFlopPara AsigPercMstpSlowWrDnon_GoGo ActsPercMstpSnonWnonDnon_ThingPassingStill ActsPercMstpSlowWrDnon_ThingPassingMoving ActsPercMwlkSlowWrDnon_PatrolingBase1 (Zahl gilt von 1-4) ActsPercMstpSlowWrDnon_Lolling ActsPercMstpSnonWnonDnon_DancingDuoIvan ActsPercMstpSnonWnonDnon_DancingDuoStefan ActsPercMstpSnonWnonDnon_DancingStefan ActsPpneMstpSnonWnonDnon_Panicking ActsPercMstpSnonWnonDnon_Panicking1 (Gilt von 1 bis 7) ActsPercMrunSlowWrDf_TumbleOver ActsPknlMstpSlowWrDnon_ThingPassingMoving ActsPercMstpSlowWrDnon_Listening ActsPercMstpSnonWnonDnon_Listening ActsPercMstpSnonWnonDnon_Talking1 (Zahl gilt von 1-2) ActsPercMstpSlowWrDnon_Talking1 (Zahl gilt von 1-2) m2s1kancler m2s2kancler m2s1pobocnik m2s2Zoldak1
Bezeichnung
Soldat grt Schaut auf die Uhr Unterhlt sich Unterhlt sich Unterhlt sich Unterhlt sich Sicherung Sicherung 2 Sitzt Sitzt und raucht Sitzt, checkt Wae Sitzt/Hnde hinten Sitzt / Wae auf dem Scho Verhr Verhropfer Verhaftung einer Person Verhaftungsopfer Liegt gefesselt Legt sich getroen auf Boden Windet sich vor Schmerzen Windet sich vor Schmerzen Behandelt Verletzten im Kampf Gibt geduckt Anweisungen Hrt Anweisungen geduckt zu Kniet auf Boden und redet Luft und mach Vorwrtsrolle Vorwrts Mnner Ausweiskontrolle Ausweiskontrolle Langweilige Wache Ghnt und streckt sich Tanzt frhlich Tanzt frhlich Tanzt frhlich Panikanimation Panikanimation Stoplert, rennt weiter Luft geduckt und sichert Hrt sich Ansprache an Hrt sich Ansprache an Steht ohne Wae und redet Steht mit Wae und redet Luft/ gibt Zeichen Steht und hrt zu Steht und erzhlt Steht und ziehlt
142
Animation
m2s2Zoldak2 m2s2Orlando_centered m2s2Wicks_centered m2s2Lamb_centered m2s2kancler_centered m2s2bodyguard_centered XOutroZoldak1 XOutroZoldak2 XOutroLamb XOutroOrlando m1s1Wicks m1s2Wicks m2s1wicks m2s2Wicks m2s3Wicks x01Wicks m5s1orlando m2s2Orlando m2s3Orlando m6aS1Orlando m6aS2Orlando x03Orlando x04Orlando m5s1Gonzales m6aS1Gonzales m6aS2Gonzales M6bs2Gonzales M6bs3Gonzales x04Gonzales x05s1Gonzales x05s2Gonzales x05s4Gonzales x05s5bGonzales m1s1Pedros x05s1Lamb x05s2Lamb x05s3Lamb x05s4Lamb x05s5aLamb x05s5bLamb M6bs2Lamb M6bs3Lamb x01Lamb x03Lamb m1s2lamb m5s1Lamb
Bezeichnung
Steht / ziehlt aus Hfte Hebt Hnde / schtzt sich Steht mit Gewehr in Hfte Hlt Wae nach oben Luft panisch umher Steht mit erhobenen. Hnden und fllt Steht nach vorn gebeugt Leht sich an jemanden an Wae in Hfte und nickt Steht mit verschrnkten Armen Hlt Wae am Tragegri Hlt Wae auf Hfte hoch/gibt Zeichen Hlt Wae auf Hfte hoch Hlt Wae in Vorhalte Liegt getroen am Boden Hlt Wae am Tragegri/gibt Zeichen Luft mit gesch. Wae umher/gestikuliert Hebt Hnde, luft umher und schtzt sich Steht mit geschulteter Wae Steht mit verschrnkten Armen Steht mit verschrnkten Armen Luft herum Luft herum und gestikuliert Luft herum und gestikuliert Steht und hrt zu Luft herum und gestikuliert Luft herum und gestikuliert Steht, gestikuliert und verschrnkt Arme Schaut auf Boden und luft umher Steht mit Hand am Kinn Steht mit Hand am Kinn und gestikuliert Joggt nach vorne und erzhlt Faltet Hnde und erklrt Ruft um Hilfe und zeigt auf etwas Steht mit erhobener Wae Steht mit erhobener Wae Steht mit erhobener Wae u. gestikuliert Steht mit erhobener Wae und luft Steht mit erhobener Wae u. gestikuliert Steht mit erhobener Wae u. gestikuliert Luft mit Wae unterm Arm und gestikuliert Steht mit Wae unterm Arm Luft mit erhobener Wae Luft mit Wae in Vorhalte Hlt Wae hoch und Hand auf den Rcken Hlt Wae hoch und Hand auf Magazin
Kapitel 5 143
5.57 - KI abschalten
Mit folgenden Befehlen lassen sich KIs abschalten. Das bedeutet, dass sie dann nicht mehr schieen oder auch sich nicht mehr bewegen. Hierbei gibt es folgende Formen: Name disableAI "Move" Name disableAI "Target" Name disableAI "Autotarget" Name disableAI "Anim" Name disableAI "Watch" - Einheit bewegt sich nicht mehr - Einheit lsst von Ziel ab - Einheit verfolgt und beobachtet nichts - KI kann Animation nicht mehr wechseln - Einheit schaut sich nicht mehr um
Mit enableAI macht man das Ganze am Ende wieder rckgngig und die Einheit wird sich wieder normal verhalten.
5.58 - SetVelocity
Mit dem setVelocity-Befehl hat man die Mglichkeit, ein Objekt in eine Richtung gleiten zu lassen. Dabei iegt das Objekt in die angegebene Richtung, welche mit XYZ-Werten bestimmt wird. Die Syntax dafr schaut wie folgt aus: Name setVelocity [0,100,100]
Nachdem man nun dem Objekt bzw. der ID einen Namen (oben: House) zugewiesen hat, kann man es auf verschiedene Weise ansprechen. Auf der folgenden Seite sind ein paar Mglichkeiten zur Auswahl, welche unter anderem mglich sind. Objekt Schaden zuweisen: Nachdem man nun das Objekt mit einem Namen versehen hat, kann man ihm Schaden zufgen oder es ganz normal heilen. Dies erfolgt dann wie folgt mit der gewohnten SetDamage-Syntax: House setDamage 1 145
Objektschaden auslesen: Mit Hilfe der folgend aufgefhrten Syntax hat man die Mglichkeit, den Schaden eines Objektes auszulesen und diesen dann fr andere Zwecke zu verwenden. getDammage House Diese Syntax knnte man zum Beispiel jetzt fr die Verwendung einer Bedingung nutzen, um zu prfen, ob das Gebude bzw. Objekt einer Schaden grer als Wert hat. In einem Prfauslser knnte das wie folgt aussehen: Prfauslser: Achse a/b: Bedingung: bei Aktivierung: 0 getdammage House > 0.7 hint Das Haus ist stark beschdigt!
Zerstrung als Bedingung oder Missionsziel: Wie auf der Vorseite bereits erwhnt, gibt es nun die Mglichkeit die Zerstrung eines Objektes als Bedingung oder Missionsziel zu denieren. Mchte man beispielsweise eine Bedingung haben, setzt man diese in die Bedingungszeile eines Auslsers oder Wegpunktes ein. Bedingung: ! (alive House) oder not alive House
Mchte man das zerstrte Objekt als Missionsziel denieren, geht das unter anderem, indem man einen Prfauslser auf die Map setzt und diesen als Ende 1 deniert. Prfauslser: Typ: Achse a/b: Text: Bedingung: Ende 1 Einmal 0 Missionsziel ! (alive House)
Hier bietet es sich wieder an den Countdown zu verwenden, damit Ende 1 nicht gleich bei Zerstrung, sondern erst ein wenig spter ausgelst wird. Ich verweise hier zustzlich auf das Kapitel 4.6, in welchem das Beenden einer Mission sehr gut erlutert ist.
146
Unzerstrbares Objekt: Mchte man in seiner Mission Objekte haben, die absolut nicht zerstrbar sein sollen, hat man unter anderem folgende Mglichkeit. Zunchst weist man, wie in Kapitel 5.61 bereits erklrt, dem Objekt einen Namen zu und setzt dann einen Prfauslser mit folgenden Einstellungen: Prfauslser: Typ: Achse a/b: Bedingung: bei Aktivierung: Mehrfach 0 getDammage House > 0.1 House setdamage 0
Wenn das Objekt nun einen greren Schaden als 0.1 ausweist, wird der Schaden wieder auf 0 gesetzt. Da der Auslser auf Mehrfach steht, wird das Objekt also nie zerstrt werden knnen. Tren eines Objektes nen/schlieen: Einige Objekte verfgen ber eine animierte Tr, welche man per Actionmen nen bzw. schlieen kann. Diese kann man nun auch steuern, wenn man das Objekt zuvor, wie in Kapitel 5.61 erlutert, mit einem Namen versehen hat. Die Syntax hierfr lautet: House animate ["Dvere1",1] Dvere1ist Tr 1. Fr jede weitere Tr dann eben Dvere2, Dvere3 usw. Mit 0 schliet man sie in der Regel und mit 1 net man sie dann wieder. Weiter Mglichkeiten sind: Schranke animate ["Bargate",1] Ziel animate ["Terc",1] - zum Bedienen der Schranke - zum Bedienen der Zielscheibe
Kapitel 5
Laternen bzw. Lichter ausschalten: Mit Hilfe der IDs hat man auch die Mglichkeit Lampen oder Lichter auszuschalten. Hierzu muss man dem Objekt zunchst erstmal mittels dieser Syntax einen Namen zuweisen: Lampe1=nearestObject this Dazu also einen Logikpunkt neben die Lampe setzen, die obige Syntax in die Initzeile eintragen und danach von wo aus auch immer ansprechen (Wegpunkt, Auslser, etc.). Dafr bentigt man nun noch diesen Befehl: Lampe1 switchLight "O" Trgt man die beiden Befehlszeilen komplett in die Logikinit ein, ist die Lampe gleich von Beginn an ausgeschaltet. Lampe1=nearestObject this; Lampe1 switchLight "O" 147
148
Kapitel 5
149
150
151
152
Textausgabe einer Position: Hierzu macht man sich die Hint format oder der Titletext format Syntax zunutze, welche verschieden und je nach Bedarf deniert werden kann. Man kann sich hier einen einzelnen Wert oder auch alle drei Werte gleichzeitig ausgeben lassen. Die folgende Syntax gibt alle drei Werte in der XYZ-Reihenfolge mit exakter Hhe ber dem Meeresspiegel aus. GetPosASL ist bei X und Y uninteressant. hint format ["%1", getPosASL Name] oder hint format ["%1", position Name] Mchte man nur einen einzelnen Wert haben, deniert man die Syntax mit dem entsprechenden Select-Wert. Hier als Beispiel die Ermittlung der Hhe . Meer. hint format ["%1", getPosASL Name select 2] hint format ["Ihre Flughhe betrgt %1", getPosASL Name select 2] titleText [format["%1 Meter", getPosASL Name select 2],"plain down"] 153
Natrlich sollte man es mit den Positionen ausgeben lassen auch nicht bertreiben.
Position als Bedingung: Die Position kann man nun auch als Bedingung fr etwas verwenden. Zum Beispiel soll ein Auslser ausgelst werden, wenn Heli1 hher als 100 Meter iegt oder der Spieler gewarnt wird, wenn er in einen greren Y-Wert erreicht, als er darf. Also zu weit nach Norden oder Sden gelaufen, gefahren oder geogen ist. Man kann so eine Spielche ganz einfach beschrnken. Fr die Flughhe sieht die Syntax hierbei wie folgt aus: ? getPosASL Heli select 2 > 100 Oder als Beispiel die Prfung ob die Einheit den Y-Wert schon berschritten hat. ? getPosASL Name select 1 > 10600
154
Eventhandler-bersicht: Hier eine bersicht mit verschiedenen Syntaxbeispielen zu den Eventhandlern. Eventhandler Beispiel
AnimChanged Syntax: Name addEventHandler ["AnimChanged", {[Einheit, Animation]}] Wird immer ausgelst, wenn die denierte Animation gestartet wird. AnimDone Syntax: Name addEventHandler ["AnimDone", {[Einheit, Animation]}] Wird immer ausgelst, wenn die denierte Animation beendet wird. Dammaged Syntax: Name addEventHandler ["Dammaged", {hint str (_this)}] Wird ausgelst, wenn die Einheit beschdigt wird und zeigt an was an der Einheit beschdigt bzw. getroen wurde. Engine Syntax: Name addEventHandler ["Engine", {hint str (_this)}] Wird ausgelst, wenn das Fahrzeug angeschaltet wird. Fired Syntax: Name addEventHandler ["Fired", {hint "Feuer einstellen"}] Dieser Eventhandler wird aktiviert, wenn die Einheit ihre Wae abfeuert. Fuel Syntax: Name addEventHandler ["Fuel", {hint str (_this)}] Wird ausgelst, wenn sich der Tankstatus ndert. (1=voll/0=leer) Gear Syntax: Name addEventHandler ["Gear", GearState] GearState: TRUE - Fahrwerk ausgefahren / FALSE Fahrwerk drin GetIn Syntax: Name addEventHandler [Name, Fahrzeugposition, Fahrzeugname] Wird ausgelst, wenn die Einheit in das Fahrzeug einsteigt. Positionen: Driver, Gunner, Commander, Cargo GetOut Syntax: Name addEventHandler [Name, Fahrzeugposition, Fahrzeugname] Wird ausgelst, wenn die Einheit aus dem Fahrzeug aussteigt. Hit Syntax: Name addEventHandler ["Hit", {hint "Diese Einheit wurde getroen"}] Diese Aktion lst nicht immer aus. Init Syntax: Name addEventHandler [] Macht nur in einer Cong Sinn! Wird beim Missionsstart ausgefhrt, aber eher unfunktionell und unwichtig. IncomingMissile Syntax: Name addEventHandler ["IncomingMissile", {hint "Treer"}] Wird ausgelst, wenn Einheit mit einer Rakete beschossen wird. Killed Syntax: Name addEventHandler ["Killed", {_this exec "script.sqs"}] Wird ausgelst, wenn die Einheit gettet wurde.
156
5.66 - Texteinblendarten
Texteinblendungen sind, wie sicher schon festgestellt, nicht nur wichtig fr eine Mission, sondern vor allem auch fr das Editing oder Scripting. Man hat hiermit die Mglichkeit sich Informationen ausgeben zu lassen, um spter darauf aufbauen zu knnen oder diese fr andere Bereiche verwenden zu knnen. Folgend nun eine Zusammenfassung der Texteinblendarten in Armed Assault. Hierbei wird auch nochmal erlutert, wie welche Texteinblendung gemacht wird und wie Textvariablen mit eingebunden werden knnen. Die Hint-Variante Zunchst gibt es da die Hint-Variante, mit welcher man oben links am Bildschirmrand eine Meldung bekommt. Diese kann man nun auf seine Bedrfnisse anpassen. Standard: hint "Mein Text"
Hier die Ausgabe der Koordinaten des Spielers ber Meeresspiegel: hint format ["Koordinaten: %1", getPosASL Player] hint format ["Ihre Flughhe betrgt %1", getPosASL Player select 2] Oder die Ausgabe der Waen bzw. Munitionstypen oder der Seite dieser Einheit: Kapitel 5 hint format ["%1", weapons Name]; hint format ["%1", magazines this]; hint format ["%1", side Name]; hint format ["%1 gegen %2", side Name1, side Name2]; Hier in Verbindung mit einem Eventhandler: Name addEventHandler ["Fired", {hint format ["%1", _this]}] Und hier mit Zugri auf einen Stringtablewert: hint localize "STR_MP_04" Die TitleText-Variante Die TitleText-Variante funktioniert vom Prinzip her genauso, wie die der Hint-Variante. Hier erfolgt die Einblendung nur eben dort, wo man sie deniert. Also zum Beispiel mitten auf dem Bildschirm oder am unteren Rand. Standard: titleText ["Paraiso\nOne day later","Plain",4]
Variante zum Ausgeben einer Entfernung zweier Einheiten bzw. Position Spieler: titleText [format["%1 Meter", Name1 distance Name2],"Plain Down"] titleText [format["%1 Meter", getPosASL Player select 2],"Plain Down"] Und hier mit Zugri auf einen Stringtablewert: titleText [format [localize "STR_ART_H7"], "Plain Down"]; 157
Text
Armed Assault ARMED ASSAULT Prsentiert Sahrani Island Sahrani Das Knigreich Sd-Sahrani Demokratische Republik Sahrani Einsatz abgeschlossen Einsatz fehlgeschlagen Einsatz erfolgreich Feindliche Truppen besiegt Einsatz gescheitert. Sie haben die Befehle nicht befolgt. Zerstren Sie die feindlichen Ziele Finden und retten Sie die Piloten. Kehren Sie lebend zurck! Entkommen Sie im Hubschrauber von der Insel! Eine groangelegte Operation: Befreien Sie die Stadt. Erobern und verteidigen Sie die Stadt. Klicken Sie auf die Karte ZUERST GLTIGE ZIELKOORDINATEN EINGEBEN! ZIELKOORDINATEN AKZEPTIERT FEUERMISSION WIRD GESTARTET AUSSER REICHWEITE! NEUE ZIELPOSITION WHLEN! FEUERMISSION VORBEI KANN NICHT FEUERN Inltrationspunkt Position halten Basis Feindliche Basis Trepunkt Abholpunkt Suchen und zerstren Angreifen Zerstren STR_WP_DESTROYTARGET Ziel zerstren STR_WP_SEIZEANDHOLD Erobern und verteidigen STR_WP_EXTRACT Exltrationspunkt STR_MP_GAME_DESC_HUNTING Transportieren Sie unter Beschuss strategische Ressourcen
158
Kapitel 5
[Group1, 2] setWaypointBehaviour "AWARE" Wegpunktname setWaypointBehaviour "AWARE" setWaypointCombatMode [Group1, 2] setWaypointCombatMode "RED" setWaypointDescription [Group1, 2] setWaypointDescription "Beziehen Sie Stellung" setWaypointFormation [Group1, 2] setWaypointFormation "LINE" setWaypointHousePosition [Group1, 2] setWaypointHousePosition 1 setWaypointPosition [Group1, 2] setWaypointPosition [position player, 0] setWaypointScript [Group1, 2] setWaypointScript "target.sqs player" setWaypointSpeed [Group1, 2] setWaypointSpeed "FULL" setWaypointStatements [Group1, 2] setWaypointStatements ["true", ""] setWaypointTimeout [Group1, 2] setWaypointTimeout [5, 10, 6] setWaypointType [Group1, 2] setWaypointType "HOLD" showWaypoint [Group1, 2] showWaypoint "ALWAYS" [Group1, 2] setWpPos [x, y, z] setWpPos _Pos = getWpPos [Group1,1] getWpPos
Wegpunkte entfernen So wie sich Wegpunkte erstellen lassen, kann man sie auch wieder entfernen. Dazu verwendet man folgende Syntax: deleteWaypoint [Name, Wegpunktnummer] deleteWaypoint Wegpunktname 159
160
SetTriggerType Zustzlich kann fr den Auslser ASL1 noch ein Typ festgelegt werden. Diese Typen sind ganz normal wie im Editor vordeniert. ASL1 setTriggerType "WIN" Typenbersicht: "NONE" "WEST G" "EAST G" "GUER G" "SWITCH" "END1" "END2" "END3" "END4" "END5" "END6" "LOOSE" "WIN" "WEST SEIZED" "EAST SEIZED" "GUER SEIZED" Keine Von West bewacht Von Ost bewacht Von Widerstand bewacht Schalter Ende 1 Ende 2 Ende 3 Ende 4 Ende 5 Ende 6 Verlieren Gewinnen Erobert durch Westen Erobert durch Osten Erobert durch Widerstand
Kapitel 5
SetTriggerActivation Hiermit deniert man die Art der Aktivierung, also ob der Auslser durch West, Ost, per Funk oder wie auch immer ausgelst werden soll. Die Syntax dafr lautet: ASL1 setTriggerActivation ["WEST", "EAST D", true] Dieser Auslser wurde nun wie folgt deniert: Aktivierung durch West // von Osten entdeckt // Mehrfach Erster Arrayteil: Seite: Funk: Sonstige: "NONE", "EAST", "WEST", "GUER", "CIV", "LOGIC", "ANY" "ALPHA", "BRAVO", "CHARLIE", "DELTA", "ECHO", "FOXTROT", "GOLF", "HOTEL", "INDIA", "JULIET", "STATIC", "VEHICLE", "GROUP", "LEADER", "MEMBER".
Zweiter Arrayteil: "PRESENT", "NOT PRESENT", "WEST D", "EAST D", "GUER D", "CIV D". Dritter Arrayteil: True steht hierbei fr Mehrfach- und False fr Einmal-Auslsung des Auslsers. 161
SetTriggerStatements Hiermit deniert man nun die Bedingungszeile, die Aktivierungszeile und die Deaktivierungszeile des zuvor erstellten Auslsers. Hier bitte auch die richtige Schreibweise im Array achten! ASL1 setTriggerStatements [Bedingung, Aktivierung, Deaktivierung] ASL1 setTriggerStatements ["this", "Wert = true", "Wert = False"] SetMusicEect Mit diesem Befehl wird der Musikeekt des Auslsers festgelegt. ASL1 setMusicEect "ATrack1" Die originalen Musikstcke erfordern keine Description.ext und lauten ATrack1 bis ATrack27. Die Namen der Queens Gambit Tracks gehen von QGTrack1 bis QGTrack9. SetSoundEect Mit diesem Befehl versieht man den Auslser oder mit einem Soundeect. ASL1 setSoundEect [Anonym, Stimme, Umgebung, Auslser] ASL1 setSoundEect ["Alarm, , , ] Hier nochmal eine kleine bersicht einiger Soundarten: Stream, Alarm, BadDog, BirdSinging, Chicken, Cock, Cow, Crow, Crickets1, Crickets2, Crickets3, Crickets4, Dog, Frog, Frogs, LittleDog, Music, Owl, Wolf
162
SetMarkerType Mit SetMarkerType legt man, wie der Name schon sagt, den Typ des Markers fest. "M1" setMarkerType "Arrow" Hier eine bersicht der verfgbaren Icon-Typen:
Objective Flag1 Dot Destroy Start End Warning Join PickUp Unknown Marker - Ziel (Flag) - Fahne - Punkt - Zerstren - Start - Ende - Achtung - Beitreten - Auesen - Unbekannt - Markierung Arrow Empty Select Vehicle Defend Move Attack Headquarters Depot Camp Town - Pfeil - Leer - Leerer Kreis - Vehikel - Verteidigen - Bewegen - Angreifen - Stab - Depot - Lager - Stadt SalvageVehicle - Bergungs Fhz RepairVehicle - Reparatur Fhz SupplyVehicle - VersorgungsFhz DestroyedVehicle - Zerstrtes Fhz MaintenanceTeam - Reparatur CommandTeam - Fhrungsstab SupplyTeam - Versorger InfantryTeam - Infanterie LightTeam - Leichte Inf. HeavyTeam - Schwere Inf. AirTeam - Luftabwehr FireMission - Firemission
SetMarkerText Hiermit legt man den Text fr den Marker fest. "M1" setMarkerText "Hold Position" SetMarkerShape Hier deniert man die Form des Markers. Also ob es ein Icon, Rechteck, oder Kreis sein soll. Bei Icons ist es nicht unbedingt ntig die Gre des Markers festzulegen, weil die normal angezeigt werden. Nicht aber bei Rechteck oder Kreis, da ist es wichtig dem Marker noch eine Gre zuzuweisen. "M1" setMarkerShape "ELLIPSE" Hierbei hat man die Auswahl zwischen: "RECTANGLE" "ELLIPSE" "ICON" SetMarkerBrush Mit dem SetMarkerBrush-Befehl kann man das Aussehen eines Marker mit dem MarkerShape Rectangle oder Ellipse bestimmen. "M1" setMarkerBrush "FDiagonal" Dabei stehen folgende Designs zur Verfgung: Horizontal - Horizontale Linien Vertical - Vertikale Linien Grid - Horizontales Raster DiagGrid - Schrges Raster FDiagonal - Schrge Linien BDiagonal - Schrge Linien Cross - Kreuz-Raster 163
Kapitel 5
SetMarkerColor Hiermit erfolgt die Festlegung der Farbe. Standardmig werden diese in rot erstellt was, wenn man diese Farbe behalten mchte, diesen berssig macht. "M1" setMarkerColor "ColorBlue" Hierbei stehen folgende Farben zur Auswahl: "ColorRed" "ColorRedAlpha" "ColorBlack" "ColorGreen" "ColorGreenAlpha" "ColorWhite" "ColorBlue" "ColorYellow" "Default"
SetMarkerSize Denition der Gre des Markers. Die Syntax dafr schaut wie folgt aus: "M1" setMarkerSize [100, 200] SetMarkerDir Mit SetMarkerDir erfolgt die Ausrichtung des Markers in Angabe von Grad. "M1" setMarkerDir 90 Marker lschen Fr das Lschen eines Marker gilt der altbewhrte Befehl: deleteMarker "M1" Lokale Marker erzeugen Das Erzeugen und Denieren der Eigenschaften eines lokalen Markers erfolgt genauso, wie auch bei den Globalen, nur dass der Befehl eben nur lokal gilt. Hierbei gelten genau die gleichen Befehle, welche nur die Erweiterung Local tragen. Ansonsten ist das Verfahren genau das Gleiche. Hier trotzdem nochmal die bersicht der Befehle fr lokale Marker: CreateMarkerLocal SetMarkerSizeLocal SetMarkerTextLocal DeleteMarkerLocal SetMarkerTypeLocal SetMarkerShapeLocal SetMarkerDirLocal SetMarkerColorLocal SetMarkerBrushLocal SetMarkerPosLocal
Weitere wichtige und vor allem grundlegende Informationen ndet man im Kapitel 1.7 unter Markierungen einfgen.
164
Steigt jetzt ein Spieler mit einem anderen Einheitstyp in das Fahrzeug ein, lst der Auslser aus und der Spieler mit dem Actionbefehl Eject wieder aus dem Fahrzeug entfernt.
Fahrzeug fr Name sperren Mchte man ein Fahrzeug oder eine Fahrzeugposition fr den Spieler oder fr Einheit Name1 sperren, kann man dies unter anderem mit den nun folgenden Syntaxes machen. Als Beispiele sind ein Prfauslser und die Skriptvarianten angegeben. Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Skriptsyntaxes: ? vehicle Name1 == Fahrzeug1 : Name1 action ["Eject",Fahrzeug1] ? driver Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] ? gunner Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] ? commander Fahrzeug1 == Name1 : Name1 action ["Eject",Fahrzeug1] Geschwindigkeit eines Fahrzeugs abfragen/setzen Um die Geschwindigkeit eines Fahrzeugs als Bedigung fr etwas zu nutzen gilt: speed Fahrzeug1 > 30 und zum Festlegen einer Geschwindigkeit (Full,Normal,Limited,Auto): Fahrzeug1 setSpeedMode "Full" Fahrzeug1 forceSpeed 120 - Wert in km/h Fahrzeug1 limitSpeed 60 - Wert in km/h Fahrer oder Gunner vorhanden? Der Befehl isNull prft, ob die Position im Fahrzeug leer ist. Als Bedingungsabfrage gilt: isNull driver Fahrzeug1 - Ist Position Fahrer leer, dann... ! isNull driver Fahrzeug1 - Ist Position Fahrer besetzt, dann... Laufendes Fahrzeug Der Befehl isEngineOn prft, ob der Motor des Fahrzeugs eingeschaltet ist. isEngineOn Fahrzeug1 - Ist Motor von Fahrzeug1 an, dann... Tankstatus Folgende Befehle werden fr Tankstatus eines Fahrzeugs verwendet: Fuel Fahrzeug1 == 0.5 Fahrzeug1 setFuel 0.8 Fahrzeug1 setFuelCargo 1 166 - Ist Tankfllung gleich Wert, dann... - Setzt einen Tankfllwert - Setzt Tankwert fr Tankfahrzeug Mehrfach 0 Vehicle Name1 == Fahrzeug1 Name1 action [Eject, Fahrzeug1]
Hierbei hat man nun ganz einfach die Mglichkeit das Licht farblich frei zu gestalten. Dabei kommen, je nach Einstellung, die skurrilsten Farben zum Vorschein. Man muss dazu lediglich die Werte im jeweiligen Array ndern, was sich dann bei der nchsten Vorschau dann sofort bemerkbar macht. Die Nutzung der Dezimalwerte macht den Eekt aus! _light setLightColor [0, 0, 1] _light setLightAmbient [0, 0, 1] _light setLightBrightness (0.1 / 0.1) - Festlegung der Lichtfarbe - Festlegung des Umgebungslichts - Festlegung der Helligkeit Kapitel 5
Ein solches Licht lsst sich natrlich auch nur lokal erzeugen. Das macht man dann mit dem lokalen Createbefehl, der wie folgt lautet: _light = "#lightpoint" createVehiclelocal _pos
167
Des Weiteren kann man noch die Position um das Objekt oder Fahrzeug bestimmen. Hierzu werden wieder die XYZ-Werte benutzt, welche im Array festgelegt sind. _position = [0, 0, 0] 168
? _i<=3: goto "Loop2" _Smoke=3; _s=(2.2-(random 0.1)); ; Die Folgende Zeile stellt eine Zeile dar, was hier nicht mglich ist: drop [["\ca\data\ParticleEects\FireAndSmokeAnim\SmokeAnim",8, _Smoke,32], "", "Billboard", 9, (2.5+(random 0.5)), [_x,_y,_z], [_vx,_vy,_vz], 0, _s, 2, 2, [0.2,5],[[0,0,0,0],[1,1,1,0.8],[1,1,1,0]],[0], 0,0,"","",logic]; _i=0; #Loop2 ~_delay _i=_i+1 _timecheck=_timecheck+_delay ? _time>=_timecheck: goto "Loop" deleteVehicle _light exit Dieses Skript enthlt unter anderem eine Lichtquelle, einen Feuerdropbefehl und dazu einen Rauchdropbefehl und fast damit die Unterkapitel 5.73, 5.74 und 5.75 zu einer Aktion zusammen. Die Dropbefehle mssen logischerweise wieder in einer Zeile stehen! Das folgende Bild simuliert einen Motorbrand.
170
Diese Dienstgrade lassen sich jetzt mit folgender Syntax vergeben: Name1 setRank "Major" oder Player setRank "Major" Kapitel 5 Anwendungsbeispiel Der Spieler soll befrdert werden, wenn er eine gewisse Punktezahl berschritten hat. Das knnte man jetzt auf verschiedene Art und Weise machen. Hier soll mal die Variante mit einem Prfauslser als Beispiel dienen. Prfauslser: Aktivierung: Achse a/b: Bedingung: bei Aktivierung: Einfach 0 Rating Player >= Wert Player setRank "Major"; hint format ["Sie wurden soeben zum %1 befrdert",rank Player]
Der Spieler wird nun befrdert, wenn er die Punktzahl erreicht hat. Als Bedingung Den Rang einer Einheit kann man jetzt auch als Bedingung fr etwas verwenden. Zum Beispiel bei der Vergabe von Waen oder dem Nutzen von Fahrzeugen. Zum Beispiel knnte man dem Spieler so das Nutzen von Fahrzeugen oder bestimmten Waensorten zunchst verbieten. Da Leistung gerne belohnt wird, wird er sich nun mehr anstrengen und versuchen Punkte zu sammeln, um mglichst schnell befrdert zu werden. ? rank player == "Major" : exit ? rank Name1 != "Major" : exit 171
Mit unAssignVehicle Name, verweist man die Einheit wieder eines Fahrzeugs. Sie wei dann, dass das unassigned Vehikel nicht mehr ihr Fahrzeug ist und steigt nach dem Aussteigebefehl auch nicht automatisch wieder ein. Nachdem man der Einheit ein Fahrzeug zugewiesen hat kann man ihr Befehlen ihren Platz darin einzunehmen. Dafr gilt folgende Syntax: [Name] orderGetIn true [Name] orderGetIn false - Einheit steigt ein - Einheit steigt aus
Fr mehrere Einheiten gilt folgende Syntaxform: [Name1, Name2, Name3] orderGetIn true 172
Es besteht auch die Mglichkeit sich ausgeben zu lassen welches Fahrzeug der Einheit zugewiesen wurde oder welchen Platz sie darin gerade bezogen hat. Gerade ein Spieler kann ja mehrere oder gar alle Positionen im Fahrzeug beziehen. Diese kann man dann als Bedigung fr etwas verwenden (siehe Kapitel 5.71). Zugewiesenes Fahrzeug ausgeben lassen: hint format ["Zugewiesenes Fahrzeug: %1", assignedVehicle Player] Gegenwrtige Position im Fahrzeug ausgeben lassen: hint format ["Position im Fahrzeug: %1", assignedVehicleRole Player]
Kapitel 5
173
- Name1 schiet auf Name2 - Name1 bekommt als Ziel Name2 - Name1 begibt sich zu Name2 - Name1 bleibt stehen
Das Ganze kann man natrlich noch gruppenbezogen aufhren. Jetzt kommt auch der Sinn des Command... etwas hervor. Wenn man nun dem Leader und den Einheiten den Befehl gibt, spricht der Leader oder die angegebene Einheit dieser Gruppe den Befehl hrbar aus, worauf die Untergebenen dann auch reagieren und den Befehl ausfhren. (units group Name1) commandFire Name2
Mchte man nun einen Flieger einen Flugplatz zuweisen, macht man dies mit: Flieger1 assignToAirport 1 Diesem Flieger1 kann man nun auch befehlen auf einem der Flugpltze zu landen. Flieger1 landAt 1 Nachdem nun bekannt ist, dass die Flupltze eine festen Index haben und dass man seinen Flugzeugen und Hubschraubern einen Flugplatz zuweisen und diese dort landen lassen kann, fehlt eigentlich nur noch eines. Der Flugplatz braucht noch eine Seite. Diese vergibt man mit folgender Syntax: 0 setAirportSide WEST WEST EAST GUER CIV LOGIC
Kapitel 5 175
176
Nach erfolgreicher Beendigung der Mission, gibt man nun folgende Syntax an: activateKey "Key1" Mehr zu diesem Thema ndet sich im Kapitel 11.2 - Die ArmA-Cheats -.
177
Kapitel 6
- Missions Specials Nachdem du nun alle Kapitel aufmerksam durchgelesen haben solltest, kommen hier ein paar Besonderheiten fr deine Mission, die sich mit ein klein wenig mehr Aufwand schnell realisieren lassen. Deine Mission wird Dank dieser Zustze um einiges interessanter und spannender werden. All die Features dieses Kapitels sind zwar auf Skriptbasis aufgebaut, sind deshalb aber keineswegs weniger funktionell oder weniger gut als Funktionen. Die Scripte sind teiweise so aufgebaut, dass du sie verstehen kannst, um besser in die Thematik einsteigen zu knnen. Verbesserungs- oder Erweiterungsmglichkeiten gibt es bei jedem dieser Skripte. Da diese Beispiele teilweise sehr umfangreich sind und ein Abtippen oft zu Fehlern fhrt, werden diese auch in Foren wie www.forum.german-gamers-club.de oder www.mapfact.net von mir, mit geeigneter Beispielmission, zum Download angeboten. 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 6.12 6.13 6.14 6.15 6.16 6.17 6.18 6.19 6.20 6.21 6.22 6.23 6.24 6.25 Die Fallschirmspringer Das GPS-System Der Actionmeneintrag Der Rucksack Zufallspositionen Der Mapclick Die Artillerie Tote Einheiten bzw. Fahrzeuge lschen Spielbeschleunigung dauerhaft unterdrcken Der Bullet Mode Das Feindmeldeskript Der Airstrike Der Airvehiclecreator Der Scheinwerfer Der Zeitzhler Das House-Patrol-Script Das Minen-Skript Das Vehikeltransportskript Das Mwenkript Das Insektenskript Der Bombenleger Der Aufklrer Einheit ergibt sich Der Teleport Das Verfolgungsskript 179 180 181 181 185 187 189 194 195 196 197 198 201 203 204 205 208 209 213 215 216 217 218 221 222
178
Das Skript kann man dann beispielsweise am Absprungpunkt per Wegpunkt oder Auslser mit der Syntax this exec "skripte\heli.sqs" starten. Eine weitere Mglichkeit, ohne ein eigenes Skript anlegen zu mssen wre die Verwendung eines im Spiel integrierten Skriptes, welches wie folgt ausgelst wird: [Gruppe,Heliname] exec "para.sqs" 179
Beispiel 2: Dies lsst sich natrlich auch per If-Then-Else-Syntax realisieren, welche in einer Zeile stehen sollte, was hier leider aus Platzgrnden nicht mglich ist. Diese Variante ist krzer, da man alles in wenige Befehlszeile packen kann.
#Start If(alive Soldat1)Then{"S1-Symbol" setMarkerPos getpos Soldat1} Else{"S1-Symbol" setMarkerType "Empty";exit}; ~0.5 Goto Start ;
Erklrung: Wenn (If) Soldat1 lebt dann (Then) setze S1-Symbol auf Soldat1 ansonsten (Else) lsche S1-Symbol und verlasse Skript (Exit). Anmerkung: Ein weiteres beliebtes GPS-Verfahren, welches hier nicht erklrt wird ist, die Marker fr die jeweilige Einheit erst mit dem Skript zu erstellen und an sie zu heften. Wer aber dieses Buch sogfltig durcharbeitet, ist im Anschluss selbst in der Lage so etwas zu skripten. 180
Zum Testen luft man nun ein paar Mal in den Bereich und wieder raus. Das Ergebnis wird sein, dass der Eintrag beim Betreten erscheint und beim Verlassen wieder verschwindet.
Rucksack.sqs Hier wird zunchst der Eintrag -Rucksack nen- entfernt und erst dann werden die anderen Eintrge hinzugefgt. Die Besonderheit hierbei ist, dass man nur drei Mal die Mglichkeit hat sich zu heilen. Damit nun immer der richtige Eintrag erscheint, wird bei jedem Heilen eine Variable auf true gesetzt und beim Wideraufruf des Skriptes bercksichtigt. Angenommen man htte jetzt schon 3 Mal gespeichert (siehe: ? verband3 : goto "Close), wre die Variable Verband3 schon true und somit springt das Skript zum Label #Close ber und fhrt die Close.sqs aus. Das Skript wre somit beendet.
; Eintrag wird entfernt Player RemoveAction RID Playsound "Rucksackauf" ; Eintrge werden hinzugefgt RIID = Player AddAction ["- Speichern","backpack\save.sqs"]; #Verband ? verband3 : goto "Close"; ? verband2 : goto "Verband3"; ? verband1 : goto "Verband2"; #Verband1 RIIID = Player AddAction ["- First aid (3)","backpack\rstaid.sqs"]; goto"Close"; #Verband2 RIIID = Player AddAction ["- First aid (2)","backpack\rstaid.sqs"]; goto"Close"; #Verband3 RIIID = Player AddAction ["- First aid (1)","backpack\rstaid.sqs"]; #Close RIIIID = Player AddAction ["- Close Backpack","backpack\close.sqs"]; exit;
Eine weitere Besonderheit bei diesen Skripten ist, dass hier fr die jeweiligen Aktionen Sounds angegeben wurden. Siehe: Playsound "Rucksackauf". Diese, welche natrlich nicht unbedingt wichtig sind und daher auch wegfallen knnten, mssen natrlich zuvor in der Description.ext deniert werden. Ein zweites Feature hierbei ist, dass der Spieler bei der jeweilig durchgefhrten Aktion eine Animation ausfhren soll, um es etwas realistischer zu gestalten. Als Beispiel hierfr dient die nun folgende FirstAid.sqs, bei der der Spieler, wenn er sich heilt, auf dem Boden liegen soll. Achtung! Diese vier Skripte sind miteinander verschachtelt!
182
Firstaid.sqs Hier sieht man nun, dass das Skript zunchst prft, ob und wie oft schon gespeichert wurde. Wrde man zum ersten Mal speichern, wre noch keine Variable auf true geschaltet. Das Skript wrde zum Label #Verband1 durchlaufen, die Variable Verband1 auf true setzen und von dort aus auf das Label #Heilen springen, wo alle Untereintrge wieder gelscht werden, der Spieler wieder den Eintrag Open Backpack bekommt und die Aktionen durchgefhrt werden, die zur Heilung fhren. Beim zweiten Speichern wrde das Skript beim Prfen zum Label #Verband2 springen, da ja Verband1 bereits true ist. Beim dritten Speichern wrde es gleich von der zweiten Zeile aus zu Label #Verband3 springen. Jetzt wre auch Verband3 true und das Skript wrde beim nochmaligen Ausfhren sofort beendet (? verband3 : exit).
? verband3 : exit; ? verband2 : goto "Verband3"; ? verband1 : goto "Verband2"; #Verband1 verband1=true; goto "Heilen"; #Verband2 verband2=true; goto "Heilen"; #Verband3 verband3=true; goto "Heilen"; #Heilen RID = Player AddAction ["Open Backpack","backpack\rucksack.sqs"]; Player RemoveAction RIID; Player RemoveAction RIIID; Player RemoveAction RIIIID; ~0.2 Player playmove "AinvPknlMstpSlayWrDnon_healed"; ~1 Playsound "Sanipack"; ~2 Player switchmove "AinvPknlMstpSlayWrDnon_healed"; ~5 Playsound "Schmerz"; ~1 Player setdammage 0; exit;
Kapitel 6 183
Save.sqs Hier kommt nun die Save.sqs, mit welcher das Spiel gespeichert wird. Zunchst werden wieder alle Eintrge gelscht, in dem von hier aus die Close.sqs gestartet wird und dann das Spiel gespeichert.
[] exec " backpack\close.sqs"; Savegame; exit;
Close.sqs Und hier natrlich noch die letzte Datei, die gebraucht wird, wenn man den Eintrag Close Backpack bettigt.
Playsound "Rucksackzu"; Player RemoveAction RIID; Player RemoveAction RIIID; Player RemoveAction RIIIID; RID = Player AddAction ["Open Backpack","backpack\rucksack.sqs"]; exit;
Jetzt nur nochmal eine nhere kurze Beschreibung der vergebenen Eintrags-namen, dann kann der Rucksack erfolgreich gepackt werden. Name: RID Der Eintrag, der fr das nen des Rucksackes zustndig ist. RID = Player addAction ["Open Backpack","backpack\rucksack.sqs"] Name: RIID Der Name, der fr das Speichern festgelegt wurde. RIID = Player addAction ["- Speichern","backpack\save.sqs"] Name: RIIID Wurde fr alle Firstaid-Eintrge deniert, da ja immer nur einer aktiv ist. RIIID = Player addAction ["- First aid (1)","backpack\rstaid.sqs"] RIIID = Player addAction ["- First aid (2)","backpack\rstaid.sqs"] RIIID = Player addAction ["- First aid (3)","backpack\rstaid.sqs"] Name: RIIIID Ist der Name, der fr das Schlieen des Rucksacks deniert wurde. RIIIID = Player addAction ["- Close Backpack","backpack\close.sqs"] 184
6.5 - Zufallspositionen
Eine Mission, die immer gleich abluft, kann mit der Zeit sehr langweilig werden und wird daher schnell zur Seite gelegt oder gelscht. Hat man aber eine Mission geschaen, welche eine Menge berraschungen aufweist und man nie genau wei woher die Feinde kommen werden, ist doch da schon mal ein wenig mehr Spannung vorhanden. Gerade im Mehrspielerbereich kann es sehr anstrengend sein, wenn man dauernd gesagt bekommt, wo was steht und von wo der Feind kommt. Dazu kann man noch verschiedene Startpunkte fr den Spieler oder auch verschiedene Zielpunkte denieren. Natrlich hat man ja im Editor bei jeder Einheit die Mglichkeit den Radius der Platzierung festzulegen, was ja auch eine Menge Dynamik bringt. Diese nun erluterte Variante ist aber eher fr feste Punkte bestimmt, die zuvor deniert wurden. Dieses Skript startet man von der Initzeile des Spielers oder der Init.sqs, um ganz zu Anfang die Positionen festzulegen. Beispiel: Dynamische Startpunkte Hierbei macht man sich den Random-Befehl zunutze. Das Ganze kann dann in Skriptform etwa wie folgt aufgefhrt aussehen: Hier wurde ein Randomwert von 3 verwendet. Beim Starten des Skriptes wird ein Wert ausgelost und danach geprft wie gro dieser Wert ist. Dann folgt der nchste Schritt. Kapitel 6 Ist er kleiner als 1 springt das Skript zu #P1 Ist er kleiner als 2 springt das Skript zu #P2 Ist er kleiner als 3 springt das Skript zu #P3 Hinter dem jeweiligen Label, also beispielsweise #P1, kann man nun die Position angeben. Bei #P1 und #P2 wurde jeweils eine XYZ-Position deniert, whrend der Spieler bei #P3 auf ein unsichtbares Heli-H namens HP1 gesetzt wird, was auch eine Mglichkeit ist.
_start = random 3; ? _start < 1 : goto "P1"; ? _start < 2 : goto "P2"; ? _start < 3 : goto "P3"; #P1 Player setpos [x,y,z]; exit; #P2 Player setpos [x,y,z]; exit; #P3 Player setpos getpos HP1; exit;
Man spart sich dann den Aufwand die XYZ-Positionen zu ermitteln und setzt stattdessen lediglich ein paar unsichtbare Heli-Hs auf die Karte und benennt sie entsprechend. Hierbei bietet sich zustzlich an, den Radius der Platzierung des einzelnen Heli-Hs auszunutzen und ihm einen groen Radius zu geben. Jetzt htte man zum Einen die Dynamik, dass man nicht wei, an welche Position (P1,P2,P3) der Spieler gesetzt wird und zum Anderen, dass das jeweilige Heli-H ja auch noch einen Platzierungsradius hat, so dass der jeweilige Punkt auch nicht genau deniert werden kann. 185
Beispiel: Dynamische Startpunkte Koordinatenbezogen In dem folgend erluterten Beispiel wird ein XYZ-Punkt bestimmt, welcher mit einem zustzlichen variablen Platzierungsradius (_radius = 500) versehen wird. Zunchst wird die Position _pos mit [0,0,0] deniert, der Radius bestimmt und fr _start ein Randomwert von 3 deniert, welchen das Skript beim Start zufllig bestimmt. Danach prft das Skript, wie gro dieser Wert ist und springt an die jeweilige Position. _pos bekommt dann einen der drei XYZ-Werte zugewiesen (_pos = [X,Y,Z]), welche man vorher rausgesucht und deniert hat. Nun hat _pos eine feste XYZ-Position erhalten und bekommt jetzt noch einen zustzlichen Radius (_radius = 500) um diese Position zugewiesen, in welchem die Einheit, hier der Spieler, dann per Zufall gesetzt wird.
_pos = [0,0,0] ; _radius = 500; _start = random 3; ? _start < 1 : _pos = [X,Y,Z]; ? _start < 2 : _pos = [X,Y,Z]; ? _start < 3 : _pos = [X,Y,Z]; ; Diese Zeile sollte in einer Zeile deniert werden, was hier nicht mglich ist: _pos = [(_pos select 0) + _radius/2 - random _radius, (_pos select 1) + _radius/2 - random _radius, _pos select 2]; Player setPos _pos; exit;
Auf eine Karte kann man sich das etwa so vorstellen, wobei die grnen Marker die Startpunkte des Spielers oder der Einheit darstellen.
186
Gruppe Alpha 1: Name: Initzeile: Gruppengre: Funkauslser: Aktivierung: Achse a/b: Text: bei Aktivierung: Marker: Name: Text: Symbol: Achse a/b:
Kapitel 6
187
Alpha.sqs Bei dem Skript geschieht nun folgendes. Zunchst wird die Variable alphaclick auf true gesetzt und auf dem Monitor erscheint ein Text, der den Spieler auordert auf die Karte zu klicken. Danach merkt sich ArmA, was bei onMapSingleClick festgelegt wurde und das Skript pausiert bei @!alphaclick, bis der Spieler auf die Karte geklickt hat und damit alle Befehle nach OnMapSingleClick in den " " ausgefhrt werden. Unter anderem wird dort die Variable alphaclick wieder auf false gesetzt. Jetzt wird der Einblendtext wieder gelscht und ein Soundsample namens Roger abgespielt. Nach einer Pause von 20 Sekunden, wird der Marker AmoveP zu einer nicht sichtbaren Position gebeamt und verschwindet somit bis zum nchsten Klick wieder.
alphaclick=true; titletext ["Klicke auf die Karte!","plain down"]; ;Die folgende Zeile muss in einer Reihe stehen, was hier nicht mglich ist. onMapSingleClick "Leader Alpha1 move _pos; alphaclick=false;""AMoveP"" setMarkerPos _pos"; @!alphaclick; onMapSingleClick ""; titleText ["","plain down"]; ~1 playSound "Roger"; ~20 "AMoveP" setMarkerPos [0,0] ; exit;
188
Kapitel 6
Unsichtbares Heli H: Name: Position: Die Geschtze: Dieses Beispiel ist mit 6 Geschtzen der Seite BLUEFOR und dem Geschtztyp M119 deniert. Diese setzt man auf die Karte und benennt diese wie folgt: Namen: W1, W2, W3, W4, W5, W6 ATarget Irgendwo auf die Karte
Ein anderer Geschtztyp funktioniert bei diesem Beispiel nicht! Erklrung folgt. 189
Setre.sqs Beim Benutzen des Funkauslsers, wird das nun folgende Skript gestartet. Dabei wird die Variable setre auf true gesetzt und es erscheint ein Text (titleText), der den Spieler auordert auf die Karte zu klicken, um so den Feuerpunkt zu bestimmen. In der darauf folgenden Zeile wird die Denition des Mapclicks gestartet und das Skript pausiert an der Position @!setre und wartet darauf, dass der Spieler auf die Karte klickt. Beim Klicken wird das unsichtbare Heli-H namens ATarget an die angeklickte Position _pos gebeamt, die Variable setre wieder auf false gesetzt und somit die Bedingung !setre (not setre) erfllt. Das Skript kann nun weiterlaufen. Als nchstes wird der Marker Firepoint an die Position des Heli-Hs ATarget gesetzt und der onMapSingleClick deaktiviert. Danach wird das Skript ari.sqs aufgerufen und der Text, der den Spieler auordert auf die Karte zu klicken wieder entfernt.
setre=true; titletext ["Click on the map to set your redirection","plain down"]; onMapSingleClick "ATarget setPos _pos;setre=false"; @!setre; "Firepoint" setMarkerPos getPos ATarget; onMapSingleClick ""; [] exec "artillerie\ari.sqs"; titleText ["","plain down"]; ~15 "Firepoint" setMarkerPos [0,0] ; exit;
Ari.sqs Nachdem dieses Skript durch den Mapklick aktiviert wurde, wird zunchst ein Funksound mit einer Lnge von 10 Sekunden abgespielt, den man natrlich erst in der Description.ext denieren muss und erst nach dem Delay von ~10 wird das Skript re.sqs durch das jeweilige Geschtz und dem ATarget gestartet. Dies wre jetzt nur eine Schussfolge!
playsound "Firedirection"; ~10 ;Feuer {[_x, ATarget] exec "Artillerie\Fire.sqs"} foreach [W1,W2,W3,W4,W5,W6] exit;
Mchte man mehrere Schussfolgen haben, kopiert man den Abschnitt Feuer einschlielich dem Delay und fgt ihn zwischen dem letzten Feueraufruf (W6) und Exit ein. Die Geschtze wrden dann nach einer Nachladepause nochmal feuern. 190
Fire.sqs Nachdem dieses Skript durch die Objekte, also Geschtz und ATarget, dieses Arrays [_x,ATarget] in der Ari.sqs aufgerufen wurde, richten sich die Geschtze aus und schieen auf die angeklickte Position. Dabei wird das erste Objekt des Arrays, also beispielsweise W1, mit der lokalen Variable _K und das zweite Objekt des Arrays, also das ATarget mit der lokalen Variable _Z belegt. Danach bekommt die lokale Variable _X die X-Position vom ATarget(also _Z) und die lokale Variable _Y den Y-Wert von ATarget zugewiesen. Mit dem Befehl _K doWatch [_X,_Y,5000] sagt das Skript zu W1(also _K), dass dieser zu ATarget und in Hhe 5000 schauen soll. Nach einem kurzen Delay von 5 Sekunden bekommt W1 mit _K re "M119" den Befehl zu schieen. Kurz darauf werden die Granaten in einem bestimmten Randombereich _X+((random 80)-40) und _Y = _Y+((random 80)-40), welcher variabel denierbar ist, einschlagen. Mit dem Befehl _H say "Ari" wird ein Artilleriesound, welcher zunchst auch in der Description.ext deniert werden muss, mit dem Gerusch eines aniegenden Artilleriegeschosses abgespielt. Diesen hrt man auch nur, wenn man sich in der Nhe des Einschlagbereiches bendet.
_K = _this select 0; _Z = _this select 1; _X = getPos _Z select 0; _Y = getPos _Z select 1; _K doWatch [_X,_Y,5000] ; _A =_K Ammo "M119"; ~5 _K re "M119"; @ _A > _K Ammo "M119"; ~2 _N = nearestObject [_K,"HeatM119"]; _X = _X+((random 80)-40) ; _Y = _Y+((random 80)-40) ; _H = "HeliHEmpty" createVehicle [_X,_Y] ; ~1 _H say "Ari"; ~1 _N setPos [_X,_Y,0]; "SH_125_HE" createVehicle [_X,_Y,0] ; deleteVehicle _H; exit
Kapitel 6 191
Dieses Beispiel funktioniert nur mit dem Geschtz M119, da es in diesem Skript so deniert wurde. Mchte man ein Geschtz eines anderen Typs verwenden, muss man die Klasse des Geschtzes (hier: M119) und der Munition (hier: HeatM119) dementsprechend angeben. Die Klassen der Geschtze ndet man im Kapitel 3.2 in der Waenbezeichnungsliste. Feindbezogen: Der Spieler oder befreundete Einheiten sollen in einem denierten Auslserbereich, wenn sie durch die Gegnerseite entdeckt werden, mit Artillerie beschossen werden. Das Verfahren ist das Gleiche, wie bei der der zuvor erklrten Variante, nur dass die Skripte nun im Unterordner Feindartillerie liegen und eine Setre.sqs nicht bentigt wird. Auch einen Marker, der die Beschusszone zeigt, und ein Heli-H wird es nicht geben. Variante 1: Man msste jetzt noch nicht mal stliche Artillerie verwenden, sondern setzt lediglich einen Auslser mit folgenden Einstellungen auf die Karte: Auslser: Aktivierung: Westen Mehrfach Von Osten entdeckt 2000 (den Bereich festlegen!) [thislist] exec Feindartillerie\Ari.sqs"
und ndert die Ari.sqs im Unterordner, wie auf der nchsten Seite erlutert wird, dementsprechend ab. Lediglich die Ari.sqs wrde hierbei abgendert werden. Die Fire.sqs bleibt dabei auf den Geschtztyp M119 eingestellt! Alle Westeinheiten, die nun in diesem Bereich durch Osteinheiten entdeckt werden, werden mit Artillerie beschossen. Dass dies die eigene Artillerie ist, merkt man dabei nicht. Variante 2: Mchte man aber fr die Ostseite extra Artillerie anlegen, deniert man das wie folgt: Auslser: Aktivierung: Westen Mehrfach Von Osten entdeckt 2000 (den Bereich festlegen!) [thislist] exec Feindartillerie\Ari.sqs"
Die Geschtze: Dieses Beispiel ist mit 6 Geschtzen der Seite Ost und dem Geschtztyp D30 deniert. Diese setzt man auf die Karte und benennt sie wie folgt: Namen: E1, E2, E3, E4, E5, E6 Ari.sqs Die Besonderheit dieser Ari.sqs ergibt sich aus der festgelegten Auslsesyntax im Auslser, welche ja wie folgt deniert wurde: [thislist] exec " ". Das bedeutet, dass jede Westeinheit, die durch die Ostseite entdeckt wird, im Skript die lokale Variable _Ziel zugewiesen bekommt und somit die Zielkoordinate darstellt. Das jeweilige Geschtz und _Ziel wrden dann die Fire.sqs im Unterordner Feindartillerie aufrufen.
_Ziel = _this select 0; ;Feuer {[_x,_Ziel] exec "Feindartillerie\Feuer.sqs"} foreach [E1,E2,E3,E4,E5,E6] exit;
Fire.sqs Dieses Skript wird nun nur noch auf den Ost-Geschtztyp D30 abgestimmt. Dabei muss der Klassenname des Geschtzes, hier D30, und der Munitionsname, hier HeatD30, vergeben werden. Man knnte hier als Geschtz also auch einen Panzer o.. verwenden. Im Kapitel 3.16 wird erklrt, wie man sich den Waen- und Munitionstyp ausgeben lsst. Kapitel 6
_K = _this select 0; _Z = _this select 1; _X = getPos _Z select 0; _Y = getPos _Z select 1; _K doWatch [_X,_Y,5000]; _A =_K Ammo "D30"; ~5 _K re "D30"; @ _A > _K Ammo "D30"; ~3 _N = nearestObject [_K,"HeatD30"]; _X = _X+((random 80)-40); _Y = _Y+((random 80)-40); _H = "HeliHEmpty" createVehicle [_X,_Y] ; _H say "Ari"; ~1 _N setPos [_X,_Y,0]; "SH_125_HE" createVehicle [_X,_Y,0]; deleteVehicle _H; exit;
193
Mchte man, dass alle Einheiten egal welcher Seite gelscht werden sollen, whlt man bei Aktivierung einfach nur Jeder aus. Mchte man, das nur Westeinheiten gelscht werden sollen, eben Westen und so weiter. Fr dieses Skript wurde im Missionsordner ein Unterordner namens Skripte angelegt. Die Besonderheit an dem Skript ist, dass Soldaten bevor sie gelscht werden, dank dieser Zeile: (Gravedigger) action ["hidebody",_P] erst im Boden versinken. Dazu braucht man einen Dummy, der im Skript Gravedigger benannt wurde. Dieser macht es dann erst mglich, dass die toten Soldaten zunchst im Boden versinken, bevor sie gelscht werden. Diesen setzt man einfach irgendwo weit weg vom Geschehen auf eine Insel, damit ihm nichts passiert. Hierbei ist es egal, was es fr eine Einheit ist. Er kann jeder Seite angehren. Lediglich der Name muss mit dem im Skript bereinstimmen. Fahrzeuge werden dabei nicht im Boden versinken, sondern direkt gelscht! Soldatenbezogen: Dieses Skript ist auf die Typenklasse Man (_T="Man") festgelegt. Es lscht also nur Vehikel, die auch diese Typenklasse haben. Gibt man hier Land an, lscht es alle Typenklassen, die Land unterstellt sind. Da sich auer Flugzeuge und Boote alles andere auf Land bewegt, wird somit alles was diese Typenklasse besitzt und nicht mehr lebt, von der Karte gelscht.
194
Kapitel 6
Dieses Skript startet man gleich zu Beginn der Mission direkt aus der Init.sqs oder der Initzeile einer Einheit oder eines Objektes. Es setzt die Zeit immer wieder auf 1. Auch wenn der Spieler die Beschleunigung anklickt, wird sich nichts verndern. 195
Dem Spieler wird nach dem Auslsen des Bulletmodes der Eintrag Bullet-Mode ON entfernt und er bekommt den Eintrag Bullet-Mode OFF hinzugefgt. Alles luft jetzt, bis der Spieler den Bulletmode wieder ausschaltet, in Zeitlupe ab. Bei folgendem Skript wird das gleiche Verfahren wie oben verwendet, nur eben umgekehrt. Bulleto.sqs
;Eintrag wird entfernt Player removeAction IID; ;Eintrag wird hinzugefgt ID = Player addAction ["Bullet-Mode ON ", "bulleton.sqs"]; ;Zeitlupe wird zurckgenommen setAccTime 1.0; exit;
Ein nettes Zusatzfeature wre es, wenn man einen Musiktitel mit angibt, der abgespielt wird, wenn der Modus aktiviert und gestoppt wird, wenn der Modus wieder ausgeschaltet wird. 196
Achse a/b: bei Aktivierung: Marker: Name: Farbe: Achse a/b: Symbol:
197
Nach dem Aktivieren von Radio Alpha klickt der Spieler auf die Karte und dabei werden das Atarget und der Marker Firedirection auf diese Position gesetzt. Danach wird ein Flugzeug mit Pilot generiert, der dieses Ziel aniegt. Wenn es in einer gewissen Distanz zum Ziel ist, bekommt es den Bombenabwurfbefehl und wirft die gefhrliche Fracht ab. Danach iegt es weg und wird am Ende wieder gelscht.
198
Airstrike.sqs Die Logik und den Marker setzt man hierbei irgendwo an den Kartenrand, damit diese fr den Spieler nicht zu sehen sind und der Marker und das Ziel spter wieder an eine nicht sichtbare Position auf der Karte gebeamt werden knnen. Jetzt muss man nur noch folgendes Skript anfertigen und es kann losgehen.
setre=true; titleText ["Click on the map to set your redirection","plain down"]; onMapSingleClick "ASTarget setPos _pos; setre=false"; @!setre; "Firedirection" setmarkerpos getPos ASTarget; playSound "Firedirection"; onMapSingleClick ""; titleText ["", "plain down"]; ;=========DEFINE======================= _dropPosition = getpos ASTarget; ~0.5 _dropPosX = _dropPosition select 0; _dropPosY = _dropPosition select 1; _dropPosZ = _dropPosition select 2; ~0.1 _planespawnpos = [_dropPosX + 3000, _dropPosY, _dropPosZ + 1000]; _pilotspawnpos = [_dropPosX + 3000, _dropPosY, _dropPosZ + 1000]; ;=========CREATE======================= _PlaneG = creategroup WEST; _plane = createVehicle ["AV8B",_planespawnpos,[], 0, "FLY"]; _plane setPos [(getPos _plane select 0),(getPos _plane select 1),900] ; _pilot = "SoldierWPilot" createUnit [getMarkerPos "Firedirection", _PlaneG, "P1=this"]; _Plane setVelocity [100,0,0] ; ~0.4 P1 moveinDriver _plane; P1 setDamage 0; P1 action ["gear_up", vehicle P1] ; _plane yinHeight 100; _plane setSpeedMode "full"; #CHECK P1 doMove getPos ASTarget; P1 doTarget ASTarget; P1 doWatch ASTarget; ? (_plane distance ASTarget) < 1500 : goto "DROP" goto "CHECK"
Kapitel 6
;=========FIRE======================= #DROP _i = 0 _plane yInHeight 100; _plane setPos [(getPos _plane select 0),(getPos _plane select 1),100] ; ~13 #FIRE _i=_i+1 _plane re "BombLauncher"; ~0.2 ? _i <= 6 : goto "FIRE" ;=========FLY AWAY======================= ASTarget setPos [0,0,0]; "Firedirection" setMarkerPos [0,0]; _plane setSpeedMode Full ~4 _plane yInHeight 300; P1 doMove getPos ASTarget; #Check2 _plane setDamage 0; P1 setDamage 0; ? (_plane distance Player) > 2500 : goto "ENDE"; goto "Check2" ;=========DELETE======================== #ENDE; deleteVehicle _plane; deleteGroup _PlaneG deleteVehicle P1; exit
Wenn man die grn markierten Werte bei dem Label #Drop und #Check verndert, wirkt sich das auf die Treergenauigkeit aus. Je nach geographischer Gegebenheit ist diese besser oder eher schlechter, was ja in der Realitt auch so ist. Nachdem der Bomber das Ziel erreicht und seine Bomben abgeworfen hat, bekommt der den Befehl zum versetzten ASTarget zu iegen um, wenn er ausreichend weit vom Spieler entfernt ist, gelscht zu werden. Wrde man ihn sofort lschen, wrde der Sound sofort verschwinden, was ja nicht so realistisch ist. Am Anfang des Skriptes wurde ein Sound (Playsound "Firedirection") gestartet, der natrlich auch vorhanden sein muss und zuvor in der Description.ext deniert werden sollte. 200
Der Leader:
Der Skill:
Hier wird das Verhalten der Einheit festgelegt. Oben wurde hierbei "Combat" verwendet. Hier gibt man das Ziel an, welches oben mit ZielPos deniert wurde und ein Objekt auf der Karte ist, welches diesen Namen trgt. Hier knnte man auch Player oder hnliches angeben. Und zu guter letzt die Anzahl der Fahrzeuge, die erstellt werden sollen.
?!(local server):exit; _StartPos = _this select 0; _Airtyp= _this select 1; _Pilottyp = _this select 2; _Target = _this select 3; _Height = _this select 4; _Gunner = _this select 5; _skill = _this select 6; _behaviour = _this select 7; _Leader = _this select 8; _count = _this select 9; _counter = 0; #Start _counter = _counter +1; _Typ = createVehicle [_Airtyp,[(getPos _StartPos select 0)+ random 200,(getPos _StartPos select 1)+ random 200,_Height + random 150], [], 0, "FLY"]; _Typ FlyInHeight _Height; _Typ SetSpeedMode "full"; _Typ setDir getdir _StartPos; _pilot = _Pilottyp createUnit [[(getPos _StartPos select 0),(getPos _StartPos select 1), 2000], _Leader,"Pilot1=this"]; Pilot1 moveInDriver _Typ; Pilot1 setSkill _Skill; Pilot1 doMove getPos _Target; Pilot1 setBehaviour "_behaviour"; ? _gunner == 0 : goto "Next" _gunner = _Pilottyp createUnit [[(getPos _StartPos select 0),(getPos _StartPos select 1), 2000], _Leader,"Gunner1=this"]; Gunner1 moveInGunner _Typ; Gunner1 setSkill _Skill; Gunner1 setBehaviour "_behaviour"; #Next ? _counter >= _count : exit; ~0.5 goto "Start"
202
Kapitel 6 203
Known Bug Da in Armed Assault vom System her sehr zurckgefahren wird und Objekte, die weiter vom Spieler entfernt sind teilweise quasi abgeschaltet werden, kommt es vor, dass der Scheinwerfer erst anfngt sich zu bewegen, wenn irgendeine Einheit ihren Weg kreuzt. Dazu einfach eine Streife davor entlang laufen lassen oder kurz eine Einheit direkt vorm Scheinwerfer createn und dann wieder lschen (siehe Kapitel 5.45).
Und hier noch die Hint-Variante, bei welcher die Zahlen oben links am Bildschirmrand eingeblendet und langsam runtergezhlt werden.
_time = _this select 0; #Start ~1 _time = _time -1; Hint format["Noch %1 Sekunden", _time]; if (_time >= 1) then {goto "Start"} else {}; Titletext ["","plain down"]; exit;
Mchte man einen Wert hoch zhlen lassen, setzt man die Zeile _time = _time -1 statt dem - ein +, ndert (_time >= 1) auf (_time <= _time) und passt den Text entsprechend an (z.B.: %1 Sekunden). Die Syntax startet man dann mit [0] exec "Time.sqs" 204
Erklrung Name der Einheit Verhalten der Einheit Name des Gebudes (siehe Kapitel 5.61!) Logik auf das Gebude setzen und in die Initzeile: Hotel=nearestBuilding this Startposition _startpos Startposition der Einheit im Gebude Zufall _accident Zufallspositionen (1=an / 0=aus) Hier aktiviert man die Zufallspositionen fr zustzliche Wegpunkte im Gebude. Ist der Wert 0, werden Zufallspositionzahl und Zufallspositionanzahl berlesen. Zufallspositionzahl _accidentnr Zufallspositionszahl Hier gibt man den Wert an, aus dem eine Zufallsposition ermittelt werden soll. Zum Beispiel wie oben der Wert 160. Es wird jetzt eine Zufallsposition zwischen 0 und 160 ermittelt und als Wegpunkt vergeben. Zufallspositionanzahl _accidentcount Anzahl der Zufallspositionen Wie oft soll eine solche Position generiert werden. Oben sind 2 Ablufe deniert. Pause _rest Pause an Position (oben: 10) Wie lange soll die Einheit an der Position warten, bis sie zur nchsten weiterluft. Wegpunkt 1 _wp1 Erster Wegpunkt (oben: 100) Wegpunkt 2 _wp2 Zweiter Wegpunkt (oben: 200) Endwegpunkt _ende Endwegpunkt (oben: 250) Statisch/Dynamisch _form Start (Statisch=0/Dynamisch=1) Ist der Wert wie oben 0, dann wird die Einheit an die denierte Startposition im Haus gesetzt.
_man _behaviour _house Wiederholen _loop
Skript
Kapitel 6
Werte wie Pause oder Start-, Wegpunkt 1, Wegpunkt 2 oder Endwegpunkt kann man hervorragend zustzlich mit Random belegen und somit noch mehr Dynamik einbringen. Dazu einfach Random vor den Wert im Array schreiben. Dieser Array erfordert ein wenig Konzentration kongurieren, da dort eine Menge Zahlenwerte hintereinander folgen und man schnell durcheinander kommt. Deshalb muss man hier mal wieder ein wenig gewissenhaft und konzentriert vorgehen. HousePos.sqs
?!(Local Server): exit _man = _this select 0; _behaviour = _this select 1; _house = _this select 2; _startpos = _this select 3; _accident = _this select 4; _accidentnr = _this select 5; _accidentcount = _this select 6; _rest = _this select 7; _wp1 = _this select 8; _wp2 = _this select 9; _ende = _this select 10; _form = _this select 11; _loop = _this select 12; #LOOP _counter = 0; _man setbehaviour _behaviour; ;//Form of employment (Static=0/Dynamic=1) ? _form == 0 : {_x setpos (_house buildingPos _startpos)} foreach units _man; ;//First Waypoint (Enable=Buildingposition;Disable=0) #WP1 ? _wp1 == 0 : goto "WP2" Leader _man move (_house buildingPos _wp1); #WP1Dest ~1 ? Leader _man distance (_house buildingPos _wp1) > 2 : goto "WP1Dest"; ~ _rest ;//Second Waypoint (Enable=Buildingposition;Disable=0) #WP2 ? _wp2 == 0 : goto "AccidentPos"; Leader _man move (_house buildingPos _wp2);
#WP2Dest ~1 ? Leader _man distance (_house buildingPos _wp2) > 2 : goto "WP2Dest"; ~ _rest ;//Accidenpositions (Enable=1;Disable=0) #AccidentPos ? _accident == 0 : goto "EndP"; #Accident; _counter = _counter +1; _apos = random _accidentnr; ~1 Leader _man move (_house buildingPos _apos); #APosCheck ~1 ? Leader _man distance (_house buildingPos _apos) > 2 : goto "APosCheck" ? _counter >= _accidentcount : goto "EndP" ~ _rest goto "Accident" ;//End Waypoint (Enable=Buildingposition;Disable=0) #EndP ? _ende == 0 : goto "Ende" ~ _rest Leader _man move (_house buildingPos _ende);
Kapitel 6
#EndPDest ~1 ? Leader _man distance (_house buildingPos _ende) > 2 : goto "EndPDest" ;// LOOP (Enable=1;Disable=0) #Ende ? _loop == 1 : goto "Loop" exit;
Dieses Skript kann man nun sehr exibel einsetzen. Als Beispiel mal folgendes: Man mchte, dass Einheiten ein paar Wegpunkte um das Gebude ablaufen, dann an einem Wegpunkt das Skript aktivieren, diese Positionen ablaufen und danach wieder um das Gebude laufen. Dazu wrde man dynamisch/statisch auf 1, also auf dynamisch setzen. Somit wrde die Einheit zunchst den Befehl bekommen den Wegpunkt 1 anzusteuern. Loop setzt man dabei logischerweise auf 0! Generell sollte eine Gruppe nicht mehr als 1-3 Einheiten fr eine Streife in dem Gebude haben. Wobei wohl 1-2 Einheiten realistisch wren. In dem Hotel hat man schon die Mglichkeit mehrere Streifen laufen zu lassen. Zuzglich fest gesetzter Einheiten in dem Gebude hat es ein Spieler nicht leicht dort heil oder unbemerkt rein oder herauszukommen. 207
Der Vorteil hieran ist, dass man eine Mine mit dem denierten Auslser mit Copy & Paste in beliebiger Anzahl vervielfltigen kann, ohne noch irgendwas anderes denieren zu mssen. Ein Skript fr hunderte von Minen. Panzermine: Fr die Panzermine kann man das gleiche Verfahren verwenden, nur dass man eben im Skript einen strkeren Sprengkrper, also eine andere Shellklasse, verwendet. Diese gibts wie gewohnt im Kapitel 3.10. Das Skript benennt man dabei dann eben pzmine.sqs. Fr Panzerminen bietet es sich an den Radius des Auslsers ein wenig zu vergrern.
208
Kapitel 6 209
##Loop3 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? speed _TranspVeh < 1 : goto "Ende"; ~.01 goto "Loop3" ;/////////////////////////////UNLOADING////////////////////////////////// #Ende _Cargo setpos [(getpos _Cargo select 0),(getpos _Cargo select 1),0] _TranspVeh action ["CANCELACTION", _TranspVeh] _TranspVeh yinheight _Height _TranspVeh domove getpos _EndPos _TranspVeh setSpeedMode "Normal" exit
Spawn-Variante Zum Zweiten gibt es die Variante, mit der beide Vehikel an einem Startpunkt auf der Karte erzeugt werden, der Heli mit der Ladung zu dem Absetzpunkt iegt, dort die Ladung abgesetzt und dann weiter zum denierten Endpunkt iegt, wo er dann gelscht wird. Damit dies auch im Editor bersichtlich gestaltet werden kann, ist das Ganze mit drei unsichtbaren Heli-Hs mit Namen: StartPos Target EndPos
realisiert. Diese kann man nun frei auf der Karte platzieren. Das Besondere hieran ist, dass der Heli beim Start in die Blickrichtung des StartPos-Objektes ausgerichtet wird. So kann man durch drehen des StartPos-Objektes schon mal die Flugrichtung des Transporthubschraubers bestimmen. Natrlich hat man hier auch die Mglichkeit als Absetzpunkt den Spieler oder hnliches anzugeben. Dazu wrde man statt Target einfach Player oder den Namen der Einheit dort angeben, bei dem die Ladung abgesetzt werden soll. Als Leader fr den zu erstellenden Heli wurde eine Einheit mit Namen Dummy auf der Karte vordeniert. Dies hat den Grund, dass der Transporthubschrauber dann erfahrungsgem besser iegt und besser landet. Folgend die Syntax, mit der das Skript aufgerufen wird. ["UH60MG", "HMMWVMK", "SoldierWPilot", 70, StartPos, Target, EndPos, Dummy] exec "vehtrspcreate.sqs" Der Array erklrt sich hierbei wie folgt: ["HeliTyp", "Ladungstyp", "Pilottyp", Flughhe, Startposition, Absetzpunkt, Endposition, Leader] 210
VehTrspCreate.sqs
?!(Local Server): exit _AirVeh = _this select 0 _Vehicle = _this select 1 _Pilottyp = _this select 2 _Height = _this select 3 _StartPos = _this select 4 _Place = _this select 5 _EndPos = _this select 6 _Leader = _this select 7 ;/////////////////////////////CREATE//////////////////////////////////// _TranspVeh = createVehicle [_AirVeh,[(getpos _StartPos select 0),(getpos _StartPos select 1),_Height], [], 0, "FLY"]; _TranspVeh setdir getdir _StartPos _Cargo = _Vehicle createVehicle getpos _TranspVeh _pilot = _Pilottyp createUnit [[(getpos _StartPos select 0),(getpos _StartPos select 1),2000], _Leader,"Pilot1=this"] Pilot1 moveinDriver _TranspVeh _TranspVeh yinheight _Height ;/////////////////////////////TRANSPORT///////////////////////////////// #Loop Pilot1 domove getpos _Place _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? _TranspVeh distance _Place < 90 + random 50 : goto "Next" ~.01 goto "Loop" ;/////////////////////////////LANDING/////////////////////////////////// #Next _TranspVeh yinheight 13; _TranspVeh setSpeedMode "Limited"; _TranspVeh action ["AUTOHOVER", _TranspVeh]; #Loop2 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh);
Kapitel 6 211
? (getPos _Cargo select 2) < 1.5 : goto "Loop3" ~.01 goto "Loop2" #Loop3 _xPos = (getPos _TranspVeh) select 0 _yPos = (getPos _TranspVeh) select 1 _zPos = (getPos _TranspVeh) select 2 _Cargo setPos [_xPos, _yPos, _zPos -10]; _Cargo setDir (getDir _TranspVeh); ? speed _TranspVeh < 0.7 : goto "Ende"; ~.01 goto "Loop3" ;/////////////////////////////UNLOADING////////////////////////////////// #Ende _Cargo setpos [(getpos _Cargo select 0),(getpos _Cargo select 1),0] _TranspVeh action ["CANCELACTION", _TranspVeh] _TranspVeh yinheight _Height _TranspVeh domove getpos _EndPos _TranspVeh setSpeedMode "Full" ;/////////////////////////////DELETE//////////////////////////////////// @ _TranspVeh distance _EndPos < 100 deleteVehicle _TranspVeh deleteVehicle Pilot1 exit
212
Kapitel 6
Nach Auslsung des Skriptes werden die Vgel an der Startposition in einem Randombereich (deniert bei: _x,_y,_z) erzeugt, welchen man natrlich jederzeit frei ndern kann. Jeder erstellte Vogel lst dann das zweite Skipt aus und bekommt ein Zufallsziel per Randomwert zugewiesen, den er dann aniegt.
213
Birdpos.sqs
_bird = _this select 0 _spos = _this select 1 _zpos = _this select 2 _x = (random 10) + 10 _y = (random 10) + 10 _z = (random 10) + 10 #Loop _bird camsetpos [(getpos _zpos select 0) - (sin getdir _zpos * _x), (getpos _zpos select 1) - (cos getdir _zpos * _y), _z] ? _bird distance _zpos <= 30 : goto "Loop2" ~1 goto "Loop" #Loop2 _bird camsetpos [(getpos _spos select 0) - (sin getdir _spos * _x), (getpos _spos select 1) - (cos getdir _spos * _y), _z] ? _bird distance _spos <= 30 : goto "Loop" ~1 goto "Loop2"
Natrlich lsst sich dieses Beispiel jederzeit noch um weitere Mglichkeiten und Positionen erweitern. Statt der Mwe knnte man hier auch Bienen oder hnliches angeben. Dazu bitte im Kapitel 3.9 bei den Einheitsklassen nachschauen. Folgend noch ein paar Syntaxbeispiele. deletevehicle _bird _bird camSetPos position Player _bird camsetpos [x,y,z] _bird camCommand "Landed" - Der Vogel wird gelscht - Der Vogel iegt zum Spieler - Der Vogel iegt zu XYZ-Position - Der Vogel landet
214
Kapitel 6
Insectpos.sqs
_deadman = _this select 0 _insect = _this select 1 #Loop _insect camsetpos position _deadman ? _insect distance _deadman <= 0.1 : goto "Loop2" ~2 goto "Loop" #Loop2 _x = (random 3) + 1 _y = (random 3) + 1 _z = (random 3) + 2 _insect camsetpos [(getpos _deadman select 0) + (sin getdir _deadman * _x), (getpos _deadman select 1) + (cos getdir _deadman * _y), _z] ? _insect distance _deadman >= _x : goto "Loop" ~2 goto "Loop2"
215
Natrlich kann man das Ganze jetzt noch unendlich ausschmcken. Etwa mit weiteren Wegpunkten, Aktionen und so weiter. Die Einstellung der Wegpunkte liegt am Missionsersteller selbst. Dinge wie Verhalten oder Geschwindigkeit sind nicht gerade unwesentlich. Auch die Verwendung der Zeitwerte (Min, Mid, Max) ist sehr interessant und verleiht wieder eine gewisse Dynamik. 216
Mit der folgenden Befehl switcht man in die Einheit und die denierte Perspektive: Player switchCamera "Internal" Bei dem nun folgenden Skriptbeispiel, bei welchem die Startsyntax mal wieder frei defniert werden kann, hat der Spieler die Mglichkeit fr einen vom Editierer festgelegten Zeitwert in die vom Editierer festgelegte Perspektive des Aufklrers zu switchen. Nach Ablauf der Zeit schaltet die Kamera wieder zurck auf den Spieler. Als Aufklrer knnte in diesem Beispiel jede Einheitsform dienen. Die Auslsesyntax lautet wie nun folgt, wobei man den Spieler, den Scout, die Zeit und die "Perspektive" angibt. [Player,Scout,10,"external"] exec "scoutswitch.sqs" Scoutswitch.sqs
_leader = _this select 0 _scout = _this select 1 _timeo = _this select 2 _mode = _this select 3 _i = 0 disableuserinput true _scout switchCamera _mode #Loop _i = _i + 1 ? _i >= _timeo : goto "Ende" ~1 goto "Loop" #Ende titlecut [" ", "Black Out"]; titleFadeOut 1 ~0.5 _leader switchCamera "Internal" disableuserinput false titlecut [" ", "Black In"]; titleFadeOut 1 exit
Kapitel 6 217
Diese Werte, egal ob x oder variable, werden dann an das Skirpt bergeben. Natrlich muss dieses noch hinter den Array angegeben werden. Die Auslsesyntax lautet dann: [this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs"; Arraydenitionen Name Fluchtwert Munition Verletzt Waenweg - Name der Einheit. In der Initzeile auch this mglich. - Fluchtwert der Einheit, welche eine der Bedingungen darstellt. - Mindestwert an Munition der zum Ergeben erreicht sein muss. - Mindestwert der Verletzung der zum Ergeben erreicht sein muss. - Alle Waen lschen oder nicht. Wert 1 lscht alle. Bis 0.9 erhlt die Waen. Durch Radomwert random 1.5 ungewiss. Ab >=1 sind die Waen weg. Randomwert sollte nicht grer als 1.5 sein! - Einheit bleibt nach Ergeben denitiv an der Stelle stehen stehen. Werte <= 1 xiert die Einheit, Werte <=2 gibt Fluchtmglichkeit. Im Variablebeispiel wurde random 2 deniert. Also Ungewissheit. - Wie viele Verbndete sind mindestens noch im Bereich. Wird der Wert unterschritten, ist die Bedingung erfllt. Im Beispiel wurde hier der Wert 6+(random3) verwendet. Also mindestens 6 plus Zufallswert. Im Skipt wurden Osteinheiten deniert. Mchte man eine andere Seite anlegen, muss man dort die Soldaten- und Fahrzeugklassen der Seite angeben. - Bereich, welcher geprft werden soll in Metern. Sind in dem Bereich keine der denierten vorhanden, ist eine weitere Bedingung erfllt.
Fix
Freunde
Kapitel 6
Bereich
Einzelne Einheit Mchte man nur eine einzelne Einheit mit dem Skript belegen, so schreibt man die Auslsesyntax in die Initzeile der Einheit und deniert die gewnschten Werte. [this,0.5,1,0.5,0,0,3,200] exec "capitulation.sqs"; Einheiten in einem Bereich Mit folgender Auslsesyntax lsen alle Einheiten eines Auslserbereiches einzeln das Skript aus. Durch Verwendung der Randomwerte verhlt sich nun jede Einheit anders. Auslser: Aktivierung: Achse a/b: bei Aktivierung:
Ost Einfach beliebig {[_x,random 0.7,2,random 1,random 1.5,random 2,6,200] exec "capitulation.sqs"} forEach thislist 219
Dieses Thema lsst sich unendlich ausweiten und auch die Bedingungen bis ins kleinste Detail festlegen, aber irgendwo muss ja mal eine Grenze sein.
?(!(local server)):exit _Enemy = _this select 0 _Fleeing = _this select 1 _AmmoStat = _this select 2 _Injurned = _this select 3 _Removeall = _this select 4 _Standx = _this select 5 _friendly = _this select 6 _Area = _this select 7 _Enemy allowFleeing _Fleeing #Check ? not alive _enemy : exit _ammo = count magazines _enemy _dammage = getdammage _enemy ;Folgende drei Zeilen stellen eine lange Zeile dar! Klassen bei Bedarf ergnzen. _friends = count nearestObjects [_enemy, ["SoldierEAA","SoldierEAT","SoldierECrew","SoldierEMiner","SoldierEG","SoldierEMG", "SoldierEMedic","SoldierESniper","SquadLeaderE","T72","BMP2","UAZMG","ZSU"], _area] ;Folgende zwei Zweierzeilen stellen je eine lange Zeile dar. Also goto hinter die : ? (_friends < _friendly) AND (_ammo < _AmmoStat) AND (_dammage > _Injurned) : goto "PutDown" ? (_ammo < _AmmoStat) AND (_dammage > _Injurned) AND (_Fleeing > 0.6) : goto "PutDown" ~5 goto "Check" #PutDown _enemy action ["DROPWEAPON", _enemy, primaryWeapon _enemy] ~1 playSound "Dont-shoot" _enemy action ["DROPWEAPON", _enemy, secondaryWeapon _enemy] ~2 ? _Removeall >= 1 : removeallWeapons _enemy _enemy playMove "AmovPercMstpSsurWnonDnon" ~1 ? _standx <= 1 : goto "Standx" ? _standx <= 2 : goto "Fleeing" exit #Standx _enemy disableAI "ANIM" _enemy setCaptive true #Fleeing _enemy disableAI "ANIM" _enemy setcaptive true ~30 + (random 60) _enemy enableAI "ANIM" _enemy allowFleeing _Fleeing _enemy setCaptive false exit
220
6.24 - Teleport
Dieses Skriptbeispiel ist eigentlich nicht als Missionsfeature gedacht, sondern lediglich als eine sehr gute Editierhilfe. Es ermglicht, dass sich der Missionsauthor per Mapclick an beliebige Stellen der Karte beamen kann, um so Spielablufe oder hnliches zu kontrollieren, ohne erst dorthin laufen oder fahren zu mssen. Dies erspart eine Menge Zeit und Nerven. Dieses Beispiel ist fr diesem Fall mit einem Funkauslser kombiniert. Zunchst sollte man im Missionsordner eine Init.sqs anlegen oder die folgende Syntax statt dort in die Initzeile einer Einheit oder eines Objektes schreiben, um das Skript gleich zu Missionsbeginn zu starten. [] exec "teleport.sqs" Mit dem Funkauslser wird dann spter die Variable Teleport auf true gesetzt und das Skript fngt an zu arbeiten. Nachdem der Spieler dann auf die Karte geklickt hat, wird er an die zuvor geklickte Stelle gebeamt und das Skript wird wieder beendet. Dabei wird der Marker PosM an die geklickte Stelle gebeamt, damit er spter auf der Karte sieht, wo er sich hingebeamt hat. Funkauslser: Aktivierung: Text: bei Aktivierung: Marker: Name: Farbe: Symbol: Achse a/b: Teleport.sqs
#start @teleport titletext ["Click on the map to teleport yourself","plain down"] onMapSingleClick "player setpos _pos; teleport=false; ""PosM"" setMarkerPos _pos" @!teleport titletext [" ", "plain down"] ~10 "PosM" setMarkerPos [0,0] goto "start"
Eine skriptfreie Alternative ist folgender Eintrag in der Init.sqs, welche dann dauerhaft aktiv ist. Nutzt man in der Mission Skripte mit Mapclick wird auch der Spieler versetzt. onMapSingleClick "Player setPos _pos"; 221
Natrlich gibt es auch die Mglichkeit so etwas mit Wegpunkten zu gestalten. Dies ist nur ein Beispiel, wie man so etwas umsetzen knnte. Hierbei soll auch immer gleich die Zusammenarbeit der Befehle gezeigt werden und die eigenen Ideen begeln Befehle zu kombinieren und optimal fr die individuellen Ideen auszunutzen.
222
Kapitel 7
- Multiplayer In diesem Kapitel werden dir einige grundlegende Bereiche aus dem Bereich Multiplayer erlutert und nher gebracht. Du wirst Dank dieses Kapitels in der Lage sein deine eigene Multiplayermission erfolgreich zu erstellen.
7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 7.10 7.11 7.12 7.13 7.14 7.15 7.16 7.17 7.18 7.19 7.20 7.21 7.22 7.23
Die Multiplayermission Die Respawnpunkte Flexible Respawnpunkte Die MP-Description.ext Die Respawnarten Das Deathmatch Multiplayerbereich festlegen Zeit und Wertung Punkte vergeben bzw. anzeigen lassen Die Zeitanzeige Der Class Header Der Respawndialog Stringtable MP Grundwerte Fahrzeug Respawn Mr-Murrays Fahrzeug Respawn Flaggen Grundinformationen Capture The Flag Die PublicVariable Allgemeines Die Steuerungsbefehle Die Bewanung im Multiplayer Spielerbezogene Textmitteilung Join In Progress (JIP)
224 224 225 226 227 227 228 229 231 232 233 233 234 235 236 238 240 246 247 249 250 251 252
Kapitel 7 223
Anzahl der menschlichen Spieler? Selbstverstndlich lsst sich auch dies ausgeben oder als Bedingung verwenden! hint format [ "West: %1\nEast: %2", playersNumber WEST, playersNumber EAST]; oder als Bedingung ? playersNumber > 4 : hint format [WEST: %1, playersNumber WEST]
Statt eines Marker hat man natrlich auch die Mglichkeit ein Objekt oder eine Spiellogik als Respawnpunkt zu verwenden. Der Nachteil hierbei ist, dass man dann direkt an dem Punkt gespawnt wird, whrend man bei einem Marker exibel im Bereich der Markerche gespawnt wird. 224
AreaOne
Einfach
In diesem Beispiel wurde nun ein Auslser mit Namen AreaOne gesetzt, der prft, ob der Bereich feindfrei ist. Ist dies erfolgt, wird der Marker Respawn_West an die Position des Auslsers mit Namen AreaOne versetzt und es erscheint eine Texteinblendung "Gratulation - Ziel 1 ist erfllt!". Natrlich kann man den Marker auch an eine andere Position des ersten Ziels versetzen. Dies sollte hier lediglich als kleines Beispiel dienen.
225
Folgend ein Auszug einer Multiplayer-Description.ext in welcher alle wichtigen, fr eine Multiplayermission bentigten Komponenten, deniert sind. Description.ext
respawn=3; respawnDelay=6; respawnVehicle=3; respawnVehicleDelay=10; disabledAI=0; AIkills=1; respawnDialog = false; class Header { gameType = CTF; minPlayers = 2; maxPlayers = 10; }; titleParam1 = "Time limit:"; valuesParam1[] = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; defValueParam1 = 1800; textsParam1[] = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min", }; titleParam2 = "Score to win:"; valuesParam2[] = {10000, 5, 7, 10, 15, 20, 25, 30}; defValueParam2 = 5; textsParam2[] = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};
226
Bei Vehikeln gelten die Werte 0, 2 und 3 mit den gleichen Respawnarten.
Kapitel 7
Beim Start der Mission wird das Objekt, also das Helipad, automatisch Bereich1 genannt und je nach deniertem Bereich erscheinen um diesen Mittelpunkt herum Warnschilder und auf der Karte Marker, die diesen Bereich eingrenzen. Der Array erklrt sich hierbei wie folgt:
Name = [Mittelpunkt,X-Wert,Y-Wert,Objektanzahl,Winkel]
Alle Werte sind hierbei variabel und knnen somit frei bestimmt werden. Auf der Karte und in der Mission knnte das spter etwa so aussehen:
Mit Hilfe dieser Funktion erspart man sich somit eine Menge Arbeit, Zeit und Nerven, die Objekte alle selbst setzen zu mssen. Um das abgesperrte Gelnde kann man nun Todesauslser oder hnliches setzen, um ein Verlassen des Bereiches durch einen Mitspieler zu vermeiden. 228
Alle Werte sind hierbei variabel. Die Zeitwerte knnen jetzt im Men als Zeitgrenze ausgewhlt werden. Der dazugehrige Text der Zeit ist in der letzten Zeile deniert und kann auch frei beschriftet werden. Punktelimit titleParam2 valuesParam2[] defValueParam2 textsParam2[] = "Score to win:"; = {10000, 5, 7, 10, 15, 20, 25, 30}; = 5; = {"Unlimited", 5, 7, 10, 15, 20, 25, 30};
Auch hier sind die Werte wieder frei nderbar und stellen die zu erreichenden Punktezahlen bis zur Beendung der Mission dar. Wie man nun auf dem Bild sehen kann, sind die oben denierten Parameter genau so bernommen worden und nun in der Multiplayerlobby frei whlbar. Kapitel 7
Somit ist die grobe Konguration schon mal fertig. Der Spieler hat nun die Mglichkeit die Punkt- oder Zeitbegrenzung frei nach seinem Interesse einzustellen. Jetzt fehlt nur noch die Konguration auf der Map, die dem Spiel sagt, dass die Punkte erreicht sind oder die Zeit um ist. Dazu kommen jetzt die Prfauslser. 229
Prfauslser Zustzlich werden nun noch drei Prfauslser gebraucht, welche das Vorgehen berwachen. Diese mssen hierbei wie folgt deniert werden: Auslser 1(Zeitberwacher): Name: Bedingung: bei Aktivierung: Achse a/b: Zeitende (Param1<10000) and (time>=param1) Ende=true 0/0
Auslser 2 (Punktberwacher): Name: Bedingung: bei Aktivierung: Achse a/b: Punktende (Param2 < 10000 and (({score _x >= Param2}) count [S1, S2, S3, S4, S5, S6] > 0)) Ende=true 0/0
In der Bedingungszeile sind Einheiten mit Namen S1, S2, S3, S4, S5, S6 deniert. Diese knnen natrlich auch anders benannt werden, sollten aber dann in der Bedingungszeile des Auslsers 2 entsprechend angepasst werden. Damit die Punkte einer KI auch gezhlt werden knnen, muss das in der Description.ext mit AIkills=1 vordeniert werden.
230
Jetzt deniert man in der Initzeile einer Einheit oder in der Init.sqs die Punktevariablen, die hier mal mit WestScore = 0 EastScore = 0 deniert werden und gleich zu Missionsbeginn den Wert 0 zugewiesen bekommen. Wird jetzt irgendeine Bedingung erfllt, also ein Gegner gettet, ein Missionziel erfllt oder wie auch immer, soll ja die jeweilige Seite Punkte zugewiesen bekommen. Dies wrde man dann mit WestScore = Westscore +1 festlegen. Also jedes Mal, wenn die vom Editierer festgelegte Bedingung erfllt ist, wird der jeweiligen Seite mit der obigen Syntax der Wert 1 (1 Punkt) hinzugefgt. Mit Westscore = Westscore -1 knnte man auch Punkte abziehen. Mchte man diese nun anzeigen lassen, kann man das auch auf unterschiedliche Weise machen. Zum Einen vielleicht mit einem Funkauslser, welchen ja dann jeder bei Bedarf benutzen kann oder zum Anderen, dass die Punkte angezeigt werden, wenn eine der beiden Seiten wieder gepunktet hat. Dazu wird dann in der Regel folgende Syntax verwendet:
Titletext [format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"]
Kapitel 7
In einem Funkauslser knnte das dann so aussehen: Wertunganzeiger (Funkauslser) Aktivierung Achse a/b Text bei Aktivierung Radio Alpha (Mehrfach) 0 @STR_MP_SHOWSCORE Titletext [format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"] 231
Die letzten beiden Zeilen stellen eine lange Zeile dar, was hier nicht realisierbar ist. Hier mal ein Prfauslser, welcher anzeigt, dass nur noch 1 Stunde bis zum Missionsende Zeit ist, diese erfolgreich zu bewltigen. Zeitanzeiger (Prfauslser) Bedingung Achse a/b bei Aktivierung (Param1<10000) and (Param1>=3600) and ((Param1-time) <=3600) 0 Hint localize "STR_MP_07"
Jetzt msste man bei jedem weiteren Prfauslser eben den entsprechenden Wert denieren. Als Texteinblendung wurden die Stringtable Grundwerte, welche im Kapitel 7.13 aufgefhrt sind, verwendet. Hier mal eine nhere Erluterung der Bedingung: (Param1<10000) and (Param1>=Wert) and ((Param1-time)<=Wert) Wert ist hierbei der in Parameter1 bei valuesParam1 vergebene Wert (z.B.: 600) (Param1<10000) and (Param1>=600) and ((Param1-time)<=600) Jetzt wrde man bei Aktivierung eben den richtigen Stringtablewert dazu angeben, welcher dann angezeigt werden soll. In diesem Fall wre das: Hint localize "STR_MP_04" - Noch 10 Minuten 232
GameType:
Hier wird der Missionstyp mit angegeben. Zum Beispiel: SC DM CTF COOP TEAM - Sector Control - Deatmatch - Capture The Flag - Cooperation - Team
MinPlayers: MaxPlayers:
Kapitel 7
respawnDialog = false;
233
STR_MP_POINT_W STR_MP_POINT_E STR_MP_FLAG_TAKEN_W STR_MP_FLAG_TAKEN_E STR_MP_FLAG_BACK_W STR_MP_FLAG_BACK_E STR_MP_SECTOR_ATTACK_W STR_MP_SECTOR_ATTACK_E STR_MP_SECTOR_W STR_MP_SECTOR_E STR_MP_02 STR_MP_03 STR_MP_04 STR_MP_05 STR_MP_06 STR_MP_07 STR_MP_NOLIMIT STR_MP_SCORE STR_MP_SHOWSCORE STR_MP_TIME STR_MP_STATUS STR_MP_GAMEOVER_W STR_MP_GAMEOVER_E STR_MP_GAME_DESC_CTF
- USA punktet - SLA punktet - Name hat die Flagge - Name hat die Flagge - Die US Flagge ist wieder da - Die SLA Flagge ist wieder da - Die USA greifen Sector an - Die SLA greifen Sector an - Sektor ist jetzt unter Kontrolle der USA - Sektor ist jetzt unter Kontrolle der SLA - Noch 1 Minuten - Noch 5 Minuten - Noch 10 Minuten - Noch 20 Minuten - Noch 30 Minuten - Noch eine Stunde - Unbegrenzt - Punkte - Punkte zeigen - Zeit - Status USA: SLA: - Die USA gewinnen - Die SLA gewinnt - 2 Teams, 2 Flaggen, Erobern Sie die feindliche Flagge STR_MP_GAME_DESC_DM - Jeder kmpft fr sich, es gibt keine Verbndeten STR_MP_GAME_DESC_SCONTROL - Sammeln Sie Punkte, indem Sie die vorgegebenen Sektoren kontrollieren STR_MP_GAME_DESC_PILOTDOWN - Finden und retten Sie die Piloten STR_MP_GAME_DESC_HOLDCASTLE - USA: Erobern Sie die Festung, SLA: Verteidigen Sie die Festung Zum Aufrufen kann man die verschiedenen Texteinblendsyntaxes verwenden, mit welchen man Text einblenden kann. Siehe die Verwendung im Kapitel 7.17. 234
Kapitel 7
Die Respawnpunkte Die Respawnpunkte fr die Vehikel lauten dabei wie folgt: Westen: Respawn_Vehicle_West Widerstand: Respawn_Vehicle_Guerrila Osten: Respawn_Vehicle_East Zivilisten: Respawn_Vehicle_Civilian
235
Der in der Aktivierungszeile des oben aufgefhrten Prfauslsers angegebene Array beinhaltet alle Denitionsmglichkeiten die wichtig sind. Man muss also nicht mehr in das Skript wechseln und kann alles fr jedes Fahrzeug individuell in dem jeweiligen Array kongurieren. Dieser erklrt sich hierbei wie folgt: [Fahrzeugname, Fahrzeugklasse, Respawnpunkt, Azimut, Respawnzeit, Respawnanzahl, Delete, Statisch, Eekt] exec "vehicle-respawn.sqs" Fahrzeugname Fahrzeugklasse Respawnpunkt Azimut Respawnzeit Respawnanzahl Delete Statisch Eekt 236 - Name des Fahrzeugs - Klasse des Fahrzeugs (siehe Kapitel 3.7) - Respawnpunkt - lickrichtung (Wert der Blickrichtung) - Zeit bis zum nchsten Respawn - Anzahl der Respawns (0=Kein Respawn) - Fahrzeug lschen (0=nein; 1=ja) - Respawn statisch oder exibel (0=Flexibel; 1=Statisch) - Explosionseekt beim Lschen (0=Kein Eekt; 1=Eekt)
Der eben aufgefhrte Array ruft das nun folgende Skript Vehicle-respawn.sqs auf. ?!(Local Server): exit _vehicle = _this select 0 _vehicleClass = _this select 1 _respawnArea = _this select 2 _azimutCode = _this select 3 _respawnDelay = _this select 4 _respawnrate = _this select 5 _deletevehicle = _this select 6 _staticrespawn = _this select 7 _deleteeect = _this select 8 _counter = 0 #Start ~1 ?(Canmove _Vehicle) : goto "Start" ;// Respawnrate (Number of Respawns) ? (_counter >= _respawnrate) : exit _counter = _counter +1 ;// Staticposition (0=Flexible/1=Static) ? (_staticrespawn == 0) : _respawnArea setpos getpos _vehicle ? (_staticrespawn == 0) : _VehAzimut = getdir _vehicle ~_respawnDelay ;// Deletevehicle (0=No Delete/1=Delete) ? (_deletevehicle == 0) : goto "Respawn" deleteVehicle _vehicle ;// Delete eect ? (_deleteeect == 0) : goto "Respawn" _bomb="M_Javelin_AT" createVehicle [0,0,1000] _bomb setpos getpos _vehicle ;// Respawn #Respawn ~2 _vehicle = _vehicleClass createVehicle getpos _respawnArea _vehicle setdir _azimutCode ? (_staticrespawn == 0) : _vehicle setdir _VehAzimut goto "Start" Kapitel 7 237
238
FlagOwner FlagOwner ist der Fahnenbesitzer. Dieser Befehl gibt den Besitzer der Fahne zurck. Ist niemand Eigentmer der Fahne wird der Befehl objNull zurck-gegeben. Die Bedingungssyntax hierfr lautet: agOwner FlagWest agOwner FlagWest == Name1 SetFlagOwner Mit dieser Syntax wird der Fahnenbesitzer bestimmt. Gibt man statt einem Namen objNull an, wird die Fahne zurck an den Masten gebeamt. Hierfr ist folgende Syntax relevant: Rckgabe an Mast: FlagWest setFlagOwner objNull Vergabe an Spieler: FlagWest setFlagOwner Name1 Flag Mit dem Befehl Flag lsst man sich die Fahne zurckgeben, welche eine Einheit gerade trgt. Es ist also somit eine Prfung auf Fahnenbesitz. Ist niemand im Besitz der Fahne wird wieder der Wert objNull zurckgegeben. Flag Name1 Beispiel: Prfung auf Fahnenbesitz: Flag Name1 == FlagWest Kapitel 7 SetFlagTexture Mit setFlagTexture wird die Textur der Fahne bestimmt. Dies ist unter anderem im Kapitel 5.35 erlutert. Die Syntax fr eine eigene Fahne, welche im Missionsverzeichnis liegt lautet: this setFlagTexture "Flagge.jpg" Und fr eine spielinterne Fahne wird der Quellpfand mit angegeben (siehe Kapitel 5.35): this setFlagTexture "\ca\misc\data\usa_vlajka.paa" SetFlagSide Hiermit wird die Seite der Flagge vergeben. Einheiten dieser Seite knnen die Flagge dann nicht aufnehmen. Die Syntax hierfr lautet: this setFlagSide Seite 239
Links ist die Fahne West (FlagWest) mit dazugehrigem Auslserbereich (ZoneWest), einem grnen Marker (nur markierende Bedeutung) und ganz links die drei dazugehrigen Prfauslser zu sehen. East, hier rechts, hat jeweils die gleichen Komponenten, nur mit anderen Werten. Die Fahne Ost heit hierbei FlagEast und der Auslserbereich ZoneEast. Dazu noch der rote Marker, der die Position der Fahne auf der Karte zeigt und ganz rechts die drei dazugehrigen Prfauslser. Die drei unteren Auslser unter dem Spieler beinhalten einen Initialisierungsauslser, einen Zeit- und Punkteberwachauslser und den Endauslser, der die Mission nach Erfllung der Bedingung Zeit oder Punkte beendet. Dieses Beispiel beinhaltet noch keinen Respawn oder hnliches. Hier ist nur das reine CTF-Zubehr zu sehen, welches die sptere CTF-Funktionalitt sicherstellt. 240
CTF-Komponenten Hier nun die einzelnen Komponenten mit der jeweiligen Kongurierung. Steht bei Aktivierung, Bedingung oder Init etwas untereinander, so stellt dies trotzdem eine Zeile dar, weil dies hier ja aus Platzgrnden nicht anders realisierbar ist. W E S T S E I T E Fahne Westen: Name: Init:
Bereich Westen (Auslserbereich): Name: ZoneWest Achse a/b: 10/10 Erreicht der Eroberer der Ostagge diesen Auslserbereich, bekommt die Westseite Punkte zugewiesen, was durch eine Texteinblendung angezeigt wird. Eroberer Ostagge (Prfauslser I): Achse a/b: 0/0 Bedingung: not isNull agowner FlagEast and agOwner FlagEast != OwnerEast Aktivierung: OwnerEast = agOwner FlagEast; titletext[format [localize "STR_MP_FLAG_TAKEN_E", name OwnerEast], "Plain down"]; FlagManW=true Dieser Auslser prft wer Besitzer der Ostagge ist. Solange diese am Mast hngt passiert nichts. Sobald ein Westsoldat diese aufnimmt kommt eine Texteinblendung welche angibt, welcher Spieler die Flagge aufgenommen hat. Eroberer Ostagge punktet (Prfauslser II): Achse a/b: Bedingung: Aktivierung: 0/0 (OwnerEast in list ZoneWest) and not FlagManE and not Wert1 Kdo=OwnerEast; OwnerEast=objNull; FlagEast setFlagOwner objNull; WestScore=WestScore+1; titletext[format [localize "STR_MP_POINT_W", WestScore, EastScore], "Plain down"]; FlagManW=false; Kdo addScore 5; {_x addScore 5} forEach units Group Kdo 241 Kapitel 7
Dieser Auslser berwacht nun, ob der Eroberer der Ostagge, also der FlagOwner FlagEast, den Auslserbereich ZoneWest betreten hat. Ist diese Bedingung erfllt, bekommt die Westseite einen Punktewert zugewiesen, was wieder durch eine Texteinblendung angezeigt wird. Eroberer Ostagge verliert Flagge (Prfauslser III): Achse a/b: 0/0 Bedingung: (isNull agowner FlagEast) and FlagManW Aktivierung: FlagManW=false; titletext[localize "STR_MP_FLAG_BACK_E", "Plain down"] Dieser dritte Auslser berwacht, ob die Fahne noch im Besitz des Eroberers ist. Stirbt dieser und nimmt ein Ostsoldat die Fahne von der Leiche auf, wird die Fahne zurck an den Fahnenmast gebeamt und es kommt eine Texteinblendung, dass die Ostseite ihre Fahne zurck hat.
Bereich Osten (Auslserbereich): Name: ZoneEast Achse a/b: 10/10 Erreicht der Eroberer der Westagge diesen Auslserbereich, bekommt die Ostseite Punkte zugewiesen, was durch eine Texteinblendung angezeigt wird. 242
Eroberer Westagge (Prfauslser I): Achse a/b: 0/0 Bedingung: not isnull agOwner FlagWest and agOwner FlagWest != OwnerWest Aktivierung: OwnerWest = agowner FlagWest; titletext[format [localize "STR_MP_FLAG_TAKEN_W", name OwnerWest], "Plain down"]; FlagManE=true Dieser Auslser prft, wer Besitzer der Westagge ist. Solange diese am Mast hngt, passiert nichts. Sobald ein Ostsoldat diese aufnimmt, kommt eine Texteinblendung welche angibt, welcher Spieler die Flagge aufgenommen hat.
Eroberer Westagge punktet (Prfauslser II): Achse a/b: 0/0 Bedingung: (OwnerWest in list ZoneEast) and not FlagManW and not Wert1 Aktivierung: Kdo=OwnerWest; OwnerWest=objNull; FlagWest setFlagOwner objNull; EastScore=EastScore+1; titletext[format [localize "STR_MP_POINT_E", WestScore, EastScore], "Plain down"]; FlagManE=false; {_x addScore 5} forEach units group Kdo Dieser Auslser berwacht nun, ob der Eroberer der Westagge, also der FlagOwner FlagWest, den Auslserbereich ZoneEast betreten hat. Ist diese Bedingung erfllt, bekommt die Ostseite einen Punktewert zugewiesen, was wieder durch eine Texteinblendung angezeigt wird.
Kapitel 7
Eroberer Westagge verliert Flagge (Prfauslser III): Achse a/b: 0/0 Bedingung: (isnull agowner FlagWest) and FlagManE Aktivierung: FlagManE=false; titletext[localize "STR_MP_FLAG_BACK_W","Plain down"] Dieser dritte Auslser berwacht, ob die Fahne noch im Besitz des Eroberers ist. Stirbt dieser und nimmt ein Westsoldat die Fahne von der Leiche auf, wird die Fahne zurck an den Fahnenmast gebeamt und es kommt eine Texteinblendung, dass die Westseite ihre Fahne zurck hat.
243
Zustze: Nachdem nun fr jede der Seiten die funktionellen Bereiche festgelegt wurden, fehlen nur noch der Initialisierungsauslser, der Zeit- und Punkteberwachauslser und der Endauslser, um die Mission auch beenden zu knnen. CTF-Init (Initialisierungsauslser): Name: CTF-Init Achse a/b: 0/0 Bedingung: true Aktivierung: Wert1=false; WestScore=0; EastScore=0; OwnerWest= objNull; OwnerEast=objNull; FlagManE=false; FlagManW=false; Zeit=0; Diesen Auslser kann man alternativ auch weglassen und die Befehle aus der Aktivierungszeile in die Init.sqs schreiben. Aus funktionell sichereren Grnden habe ich diese Variante vorgezogen. Hier werden verschiedene Variablen deniert, welche mit den Auslsern der jeweiligen Seiten zusammenarbeiten. Wertungsprfer (Prfauslser): Name: PunktZeitWache Bedingung: (param1<10000 and ((time >= param1) or (Zeit >= param1))) or (param2<10000 and ((WestScore>=param2) or (EastScore>=param2))) Aktivierung: Zeit=Time; publicVariable "Zeit"; Wert1=true; titletext[format [localize "STR_MP_GAMEOVER_FINAL", WestScore, EastScore], "Plain"]; EndOfGame=true Dieser Auslser berwacht die Zeit- und Punktevorgaben, die vor dem Spielstart vom Admin eingestellt wurden. Ist die jeweilige Bedingung erfllt, wird die Mission beendet. Bei diesem Beispiel wird die Mission sofort beendet, da in der Aktivierungszeile EndOfGame=true deniert wurde. Dies knnte man auch weglassen und alternativ ein Outroskript (z.B.: [] exec "outro.sqs") mit einbinden und in diesem dann erst am Ende des Skriptes die Variable EndOfGame auf true setzen. Der Auslser prft also, ob der jeweilige Variablenwert (Westscore, Eastscore fr die Punkte oder Time fr die Zeit) den vorgegebenen Parameterwert (Param1(Punkte), Param2(Zeit)) erreicht oder berschritten hat, womit die Bedingung dann erfllt ist und der Auslser auslst. Hierbei gilt darauf zu achten, dass man in der Description.ext die Zeit- und Punkteparameter denieren muss, wie in Kapitel 7.8 ausfhrlich beschrieben wurde. Bitte nur den Description.ext-Eintrag vornehmen, weiter nichts. Die Auslser sind ja bereits deniert.
244
Endauslser (Prfauslser): Name: EndWache Bedingung: EndOfGame Typ Ende 1 Der Endauslser wird erst ausgelst, wenn die Variable EndOfGame auf true gesetzt wurde und beendet dann die Mission. Hier ist es Vorteilhaft eine kleine Zeitverzgerung (Min-Mid-Max) anzugeben, damit der Auslser nicht gleich sofort anspringt, sondern noch ein paar Sekunden wartet. Wertunganzeiger (Funkauslser): Aktivierung: Radio Alpha (Mehrfach) Achse a/b: 0 Text: @STR_MP_SHOWSCORE Aktivierung: titletext[format [localize "STR_MP_STATUS", WestScore, EastScore], "Plain down"] Alternativ kann dieser Auslser, welcher auf der Gesamtgrak nicht zu sehen ist, noch mit eingefgt werden. Er ermglicht es, dass jeder Spieler jederzeit den aktuellen Punktestand per Funk Alpha aufrufen kann. Punkt- und Zeitdenition in der Description.ext: Damit die Punkt- und Zeitberwachung komplett ist, mssen diese noch so in der Description.ext deniert werden, wie es in Kapitel 7.8 erlutert ist. Hier aber trotzdem die Zeilen, die hierfr in der Description.ext erscheinen mssen: Zeitlimit: titleParam1 valuesParam1[] defValueParam1 textsParam1[] Kapitel 7
= "Time limit:"; = {10000, 300, 600, 900, 1200, 1500, 1800, 2100, 3600, 7200}; = 1800; = {"Unlimited", "5 min", "10 min", "15 min", "20 min", "25 min", "30 min", "35 min", "60 min", "120 min"};
Die letzten beiden Zeilen stellen eine lange Zeile dar, was hier nicht realisierbar ist. Punktelimit: titleParam2 valuesParam2[] defValueParam2 textsParam2[]
= "Score to win:"; = {10000, 5, 7, 10, 15, 20, 25, 30}; = 5; = {"Unlimited", 5 , 7, 10, 15, 20, 25, 30}; 245
Globale Variable Die globale Variable gilt, wie der Name schon sagt, global. Also im gesamten Bereich der Mission. Beispiel: Vergibt man einen Namen an eine Einheit, ist das schon eine globale Variable. Spielt man nun im Multiplayer, wird man ja als Client lokal gesehen, was bedeutet, dass also die globale Variable, die in der ganzen Mission und auf der ganzen Karte gilt, so gesehen zu einer lokalen Variable wird. Bei fest vergebenen Namen gibt es kein Problem, da jeder Client die Mission startet und somit die Werte bernimmt. Mchte man nun aber einer Variablen einen Wert zuweisen, also sie auf True oder False setzen, passiert das nur auf dem jeweiligen Client. Diese Information muss also nun an alle anderen gesendet werden, damit die Variable auch auf allen anderen Clients den richtigen Wert bekommt und die jeweilige Aktion auch dort ausgelst werden kann. Um eine globale Variable publik machen, gibt man das wie folgt an: Ziel1=true; publicVariable "Ziel1" Man setzt also Ziel1 auf True und macht diesen Wert mit dem Zusatz PublicVariable "Ziel1" publik. Diese Information wird nun an alle anderen Clients und dem Server oder Host gesendet. Verwendet man in seiner Mission mehrere Variablen, die spter den Wert true oder false bekommen sollen, legt man sie vorher in der Init fest und setzt diese zunchst auf False, damit alle Clients bzw. Host oder Server mit den gleichen Werten starten.
246
7.19 - Allgemeines
In diesem Unterkapitel werden ein paar grundlegende Bereiche erklrt, die unter anderem im Multiplayerediting sehr wichtig sind. Da gerade im Editingbereich wesentliche Unterschiede zwischen Einzelspieler- und Mehrspielermissionen bestehen, ist es wichtig hier kurz zu erlutern, worauf man beim Multiplayerediting so alles achten muss. Dedicated Server Der Dedicated Server ist ein fest zugeordneter(dedizierter) Server, auf welchen alle Clients, auch der Administrator, von extern zugreifen. Dieser ist ausschlielich als Server bestimmt. Es sitzt also kein Spieler an diesem System. Dieser Server kann berall auf der Welt stehen und kann beim jeweiligen Provider angemietet werden. Gesteuert wird dieser ingame dann mit den Steuerungsbefehlen, welche hier im Kapitel 7.20 erlutert sind. Host Ein Host ist ein Spieler, welcher auf seinem Rechner eine Mehrspielermission ernet(hostet), auf welche mehrere Mitspieler(Clients) von extern zugreifen. Der Host spielt dann an dem gleichen System. Er ist somit Server und Spieler. Client Ein Mitspieler wird im Multiplayer als Client bezeichnet. Egal ob dabei auf einem Dedicated Server oder auf einem Host gespielt wird. Spielen alle auf einem Dedicated Server, so sind alle Clients. Ernet einer ein Spiel auf dem Rechner auf dem er auch spielt, so ist er Host und alle anderen Clients.
Kapitel 7 Unterschied Einzelspieler und Mehrspieler Wie sicherlich beim Testen einer Mission im Editor und spter im Multiplayer gibt es wesentliche Unterschiede im jeweiligen Bereich. Alles was in der Editorvorschau oder im Einzelspielerbereich funktioniert muss nicht gleich im Multiplayerbereich funktionieren. Deshalb ist es wichtig die jeweiligen Unterkapitel dieses Kapitels zu bercksichtigen und in seiner Multiplayermission zu entsprechend zu denieren. 247
Logik Server bzw. Logik AI Bei Mehrspielermissionen setzt man grundstzlich eine Logik auf die Karte, die Server heit. Eine alternative Variante wre AI, wie BI sie bezeichnet, was aber grundstzlich keinen Unterschied macht. Also bleibt man dabei, die Logik mit dem Namen Server zu versehen. Diese Logik wird nur vom Server erstellt und taucht auf den Clients nicht auf. Diese gibt an, dass das System Server ist. Mit folgenden Befehlen kann man also nun festlegen, was auf dem Server ausgefhrt werden soll und was nicht. ? !(local player) : exit Diese Syntax am Anfang eines Skriptes stellt sicher, dass das Skript nur auf den Clients abluft. Es wird also geprft ob das System ein Client ist. Da jeder Spieler beim Verbinden vom System die feste Variable Player zugewiesen bekommt, wei das System, dass es das Skript ausfhren darf. Die Informationen werden hierbei an alle Clients weitergegeben. Ist der Client gleichzeitig Host, wird das Skript auch bei ihm ausgefhrt, weil er gleichzeitig Server und Client ist. ? !(local server) : exit Taucht diese Syntax am Anfang eines Skriptes auf, wird das Skript nur auf dem Server ausgefhrt. Das System macht hierbei keinen Unterschied zwischen einem Lokal Host und einem Dedicated Server. Das Skript wird nun auf jeden Fall bei beiden Varianten ganz normal ausgefhrt. Diese Syntax wird grundstzlich verwendet. Es wird also serverseitig bzw. global gearbeitet, was ja in der Regel am meisten Sinn macht, da ja die meisten Informationen auch an die Mitspieler weitergegeben werden mssen. Wir arbeiten also grundstzlich global! Alternativ gibt es noch isServer. Beispiele: ? isServer : hint "Server" oder ?! isServer : hint "Not Server" Spielerbezogenes Skript Mchte man ein Skript nur bei einem Spieler mit einem bestimmten im Editor festgelegten Namen ausfhren, legt man das am Anfang des Skriptes fest. Zunchst benennt man die Einheiten natrlich entsprechend im Editor. Ist dies erfolgt, deniert man die Syntax. Das Ganze schaut dann so aus: player != Soldier1 : exit Ist der Spieler also nicht die im Editor benannte Einheit Soldier1, dann wird das Skript beendet. Dies kann man machen, wenn ein Sound nur bei dieser einen Einheit Soldier1 abgespielt werden soll, eine Texteinblendung nur dieser eine Spieler erhalten soll oder hnliches. Hier nochmal zwei weitere Syntaxbeispiele. Ist Player == Soldier1 dann mach dies oder bei der zweiten Syntax, ist der Name von Spieler == "Mr-Murray", dann mach das (hier: exit) (player == Soldier1) : exit (name vehicle player == "Mr-Murray") : exit 248
Kapitel 7
Mitspielerbefehle (Client) #vote missions #vote mission (name) #vote kick (name/ID) #vote restart #vote reassign #userlist Abstimmung zur Missionsauswahl Abstimmung zu bestimmter Mission Abstimmung ber Mitspielerkick Abstimmung ber Neustart der Mission Neustart und Auswahl einer Rolle Zeigt eine Liste aller connecteten Mitspieler an
Die Aufrufe lassen sich mit der Chatmglichkeit im Spiel starten. Dazu drckt man die Taste, auf der auch der Unterstrich _ deniert ist, gibt den jeweiligen Befehl ein und besttigt mit Enter. 249
Wurde Soldat1 nun gettet, lst dieser Auslser aus und startet das Skript Weapon.sqs. Das Skript pausiert nun am Anfang bei @alive _Unit und wartet, bis Soldat1 wieder respawnt wurde, was ja von der Konguration der Description.ext abhngt. Je nachdem welche Delaygre man dort deniert hat, dauert es eine Weile. Nachdem Soldat1 aber respanwt wurde, luft das Skript weiter und entfernt erst alle Waen und fgt dann die Neuen hinzu. Im Skript legt man lediglich man dann die Waen nach Bedarf fest. _Unit = _this select 0 @alive _Unit removeallWeapons _Unit _Unit addweapon "Binocular"; _Unit addweapon "NVGoggles"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addmagazine "8Rnd_9x18_MakarovSD"; _Unit addweapon "MakarovSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addmagazine "30Rnd_545x39_AKSD"; _Unit addweapon "AKS74UN"; exit; 250
Seitenbezogen:
Man kann sich selbst so ziemlich jede Syntaxform selbst stricken, ist nur eine Frage der Parameter. Die obigen Syntaxformen sind lediglich ein paar Beispiele. Anwendungsbeispiele Bei folgendem Beispiel bekommt die Mitteilung jetzt nur der Client, der die Einheit spielt, die im Editor mit S1 benannt wurde. Zum Beispiel der Leader. ? (player != S1) : exit hint format ["%1, Sie haben mit Ihrer Gruppe einen neuen Auftrag", name S1]; exit Kapitel 7 Das Ganze kann man natrlich auch anders machen. Zum Beispiel, wenn der Spieler einen bestimmten Spielernamen hat, soll er die Nachricht nicht oder erst recht bekommen. ? (name vehicle S1 != "Mr-Murray") : exit hint format ["Hallo %1, du spielst die Einheit XY.", name S1]; exit Wie man sich sicher denken kann, ist die Variante der Texteinblendungen vllig egal. Die obigen Beispiele sind mit Hints dargestellt, was aber kein Muss ist. Titletext oder eine Ressourceneinblendung wren hier genauso mglich. titleText [format["%1, Sie haben einen neuen Auftrag", name S1],"Plain Down"] 251
Eine ganz interessante Zeile ist die OnPlayerConnect-Zeile. Connected ein Spieler, so wird der Server aufgefordert das Skript Update.sqs auszufhren, welches hier im selbst angelegten Ordner Scripts hinterlegt wurde. Der Server ruft dann nochmal alle Publicvariablen auf und sychronisiert damit die Variablenstadien auf allen Systemen. 252
Update.sqs Die Update.sqs ist sehr einfach und kurz gehalten. In ihr sind nur die Publicvariablen deniert, welche dann bei Aufruf durch den Server nochmal publik gemacht werden.
? ( ! ( Local Server ) ) : exit publicVariable "Var1"; publicVariable "Var2"; publicVariable "Var3"; exit;
Missionsziele Mit Missionszielen verhlt sich das Ganze hnlich. Auch hier sollte bei Join In Progress sychronisiert werden, das es sonst vorkommen kann, dass der gerade connectete Mitspieler noch anstehende Missionsziele hat, die eigentlich schon abgehakt sind. Auch hier bietet es sich an ein Skript oder eine Funktion dafr zu verwenden. Dieses lsst man idealerweise jedes Mal starten, wenn ein Ziel abgehakt wurde oder ein Spieler neu connectet hat. Vom Verfahren her, kann man das Gleiche nutzen, wie auch bei den Publicvariablen. Die Init.sqs bekommt zustzlich die Zeile: onPlayerConnected "[] exec ""scripts\zielupdate.sqs"" "; Zielupdate.sqs
? ( ! ( Local Server ) ) : goto "Skip" publicVariable "Var1"; publicVariable "Var2";
Kapitel 7
#Skip ~4 ? Var1 : "1" objStatus DONE ? Var2 : "2" objStatus DONE ?! (alive Name1) : "3" objStatus DONE exit;
Hier wurden die Variablen als Bedingung zur Erfllung eines Missionsziels verwendet. Zum Beispiel, wenn eine Gruppe einen Wegpunkt erreicht hat was ein Missionsziel darstellt. Die Variable Var1 wrde dann auf true gesetzt und wenn nun das Skript aufgerufen wird und feststellt, dass Var1 true ist, das Missionsziel 1 auf Done gesetzt. Ein weiteres Beispiel wre Missionsziel 3 welches erreicht ist, wenn Name1 nicht mehr am Leben ist. Generell bietet es sich so also an dieses kleine Skript bei jedem Erfllen eines Missionszieles oder Connecten eines Mitspielers kurz aufzurufen. 253
Kapitel 8
- Das Camscripting Hier kommen wir zu einem Kapitel, was zwar teilweise sehr arbeitsaufwendig ist, aber die Ergebnisse locker mit Hollywoodlmen zu vergleichen sind. Kleine Intros, Outros oder Zwischensequenzen heben eine Mission immer ein wenig hervor und man wird besser in die Rolle des Charakters versetzt. Da man ber diese Thematik auch ein eigenes Buch dieses Umfangs schreiben knnte, kommen hier lediglich ein paar Einfhrungen zum Erstellen eigener Szenen.
Die Steuerung Die Kamerakoordinaten Kamera erstellen Die erste Szene Kamera an ein Fahrzeug/Einheit heften Text- und Einblendeekte Kamera-Eekte Preload - Objekte und Positionen vorladen Kartenanimation ausfhren
254
Kapitel 8 255
;=== 0:06:18 Die Uhrzeit der Festlegung. Diese ist eher unwichtig und kann wegfallen. _camera camPrepareTarget [101880.56,-28486.36,1887.85] Blickrichtung der Kamera, fr die auch ein Objekt angegeben werden kann. _camera camPreparePos [9626.16,10062.31,2.00] Kameraposition (X,Y,Z) _camera camPrepareFOV 0.700 Kamerazoom. Je kleiner der Wert, desto grer der Zoom. _camera camCommitPrepared 0 Die Zeit, wie lange die Kamera zu dieser Position braucht. Bei dem Wert 0 ist sie sofort da. Schreibt man aber einen greren Wert dahin, braucht die Kamera von der alten bis zu dieser neuen Position die jeweils denierte Zeit. @camCommitted _camera Hier pausiert das Skript und warten, bis die Kamera ihre Position erreicht hat.
256
Kapitel 8
257
Wie man sehen kann wurden hier gleich zwei weitere Zeilen eingefgt: titleCut [" ", "BLACK IN"]; titleFadeOut 4 Blendet schwarz in die Sequenz mit einer Dauer von 4 Sekunden ein. playMusic "Track1" Zeitgleich wird ein eigenes Musikstck gestartet, um die Sequenz soundtechnisch ein wenig zu untermalen. Die Kamera ist nun auf Flieger1 xiert und braucht 30 Sekunden bis zur nchsten Kameraposition, wobei sie whrend der Fahrt langsam ranzoomt, aber der Flieger einfach schneller ist und irgendwann am Horizont verschwindet. 258
Position 1 Flugzeug:
Position 2 Flugzeug:
Nun kann man das natrlich noch ausweiten, aber die Funktion sollte somit verstanden sein. Jetzt muss das Skript natrlich auch beendet werden. Dazu kommen am Ende des Skriptes noch folgende Zeilen hinzu:
6 Fademusic 0 titleCut [" ", "black out"]; titleFadeOut 4 ~6 player cameraEect ["terminate","back"] camDestroy _camera ~1 Playmusic "" 0 Fademusic 1 exit
Kapitel 8 259
Die Szene blendet nun langsam aus und auch die Musik wird dabei leiser. Nach 6 Sekunden wird die Kamera gelscht und der Spieler kann seine Mission starten. Nachdem man die Musik mal, wie oben zu sehen, runtergefadet hat, fadet man sie am Ende des Skriptes wieder hoch, damit man spter wieder Musiksound hat.
260
Zeilenumbruch Um einen Zeilenumbruch mit einzusetzen setzt man lediglich ein \n an die jeweilige Position im Text. Setzt man zwei \n\n hintereinander hat man eine Leerzeile und so weiter. titleText ["Paraiso\nOne day later", "Black In"]; titleFadeOut 4 Ingame schaut das dann spter etwa so aus:
Composetext Neben dem Standardhint gibt es noch den Composetext. Dieser kann farblich und schriftgrentechnisch vllig frei deniert werden. Die u.a. Syntax stellt eine Zeile dar! hint composeText [parsetext format ["<t size='1.2' align='center' color='#0000'>Hallo %1</t>", name player]];
Kapitel 8
Und folgend nochmal eine Syntax in Verbindung mit Text aus der Stringtable.csv: hint composeText [localize "STR_RA_M01V03",parsetext format ["<t size='1.2' align='center' color='#0000'>%1</t>", name player]]; 261
8.7 - Kamera-Eekte
Dieses Unterkapitel zeigt einige Eekte auf, welche man in seinen Sequenzen hier und da ganz gut gebrauchen kann. Diese reichen vom Nachtsichteekt bis hin zu Soundeekten. Kinorahmen abschalten Der folgend aufgefhrte Befehl schaltet die Kinobalken ab und man Vollbild. showCinemaBorder false Kamera mit Nachtsicht Damit die Kamera die Nachtsichfunktion nutzen kann, bentigt man folgenen Befehl: camUseNVG true Spielgrak erhellen oder verdunkeln Der folgend aufgefhrte Befehl erhellt oder verdunkelt die Spielgrak. setAperture 1 - hell setAperture 200 - dunkel Kamera etwas sagen lassen Die Kamera wird wie ein Objekt behandelt, daher gilt hierfr der normale Say-Befehl. _camera say "Sound1" Umgebungssound abschalten Wer mchte schon gerne Vogelgezwitscher oder sonstigen Sound neben der Musik in seinem Intro oder seiner Zwischensequenz haben. Hierbei gelten folgende Befehle: enableEnvironment false 3 fadeRadio 0 4 fadeSound 0 2 fadeMusic 0 - Schaltet den Umgebungssound ab - Zeit fadeRadio Funklautstrke - Zeit fadeSound Soundlautstrke - Zeit fadeMusik Musikstrke
preLoadMusic Track1 preloadSound Sound1 preloadTitleRsc ["BIS", "Plain] preloadTitleObj ["BisLogo", "Plain]
- Ldt ein Musikstck vor - Ldt einen Sound vor - Ldt eine Ressource vor - Ldt eine Ressource bzw. Objekt vor
Hier mal zwei Beispiele der Verwendung von preLoadObject und preLoadCamera. Beim ersten Beispiel werden alle Daten der Umgebung geladen. Das Skript luft erst weiter, wenn der Ladevorgang abgeschlossen ist und lscht am Ende den lokalen Wert _preload. _preload = [] spawn {waitUntil {preloadCamera position Name}} @scriptDone _preload terminate _preload Gleiches bei preloadObjekt, dort wird das Objekt Name mit Distanz (5) geladen. _preload = [] spawn {waitUntil {5 preloadObject Name}}
;//Marker Pos1 in 3 Sekunden bis auf Wert 0.1 ranzoomen mapAnimAdd [3, 0.1, markerPos "Pos1"] ;// Fgt Animation hinzu [Zeit, Zoom, Position] mapAnimCommit ;// Fhrt Animation aus @mapAnimDone ;// Wartet bis die Animation beendet ist ~2 ;//Aus Marker Pos1 in 1 Sekunde auf Wert 1 rauszoomen mapAnimAdd [1, 1, markerPos "Pos1"] mapAnimCommit @mapAnimDone ~1 ;//Kartenanimation beenden und Urzustnde wiederherstellen forceMap false ;// Schliet die Karte mapAnimClear ;// Lscht Werte von MapAnimAdd showPad true ;// Zeigt das Brieng wieder an disableUserInput false ;// Gibt dem Spieler die Kontrolle zurck exit;
Kapitel 8 263
Kapitel 9
- Scripting In diesem Kapitel werden dir einige allgemeine Abschnitte aus dem Bereich Scripting nher gebracht. Du wirst Dank dieses Kapitels einige Skripte und Befehle in diesem Buch besser verstehen und bist am Ende sogar in der Lage eigene kleine oder auch grere Skripte zu schreiben und anzuwenden.
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13
Die Variable Wahrheitswerte Logische Operatoren Die While-Do-Schleife Der Zhler If-Then-Else Der Delay Random WaitUntil Die Klammer Das Semikolon Der Array Funktionen-Grundwissen
265 266 267 268 268 268 269 269 269 270 271 271 274
264
Diese Einheit, mit dem globalen Namen z.B. Name1, hat nun die lokale Variable _man zugewiesen bekommen und fhrt den angegebenen Befehl aus. 265
Globale Variable Neben lokalen Variablen gibt es natrlich noch die globalen Variablen. Whrend eine lokale Variable nur in einem ihr vorbestimmten Bereich gltig ist, wird eine globale Variable, wie der Name schon sagt, fr den globalen Bereich festgelegt. Wenn man einem Soldaten einen Namen gibt, so ist das eine globale Variable und diese kann nur einmal vergeben werden. Mchte man einem zweiten Soldaten im Editor den gleichen Namen geben, wird sich das Programm mit einer Fehlermeldung melden. Diese Variable kann man nun von berall, also Skript, Funktion, Auslser und Wegpunkt ansprechen. Fest vergebene Variablen Einige Werte sind vom Spiel aus schon fest vergeben. Diese lauten wie folgt: Player This Time _time _x _this Pi - Der Spieler - Einheit oder Objekt - Uhrzeit im Spiel - Lokalzeit - Ein Element eines Arrays - Lokale Einheit - 3,14
Variablenzustnde Man kann einer Variable Zustnde oder Werte zuweisen. Zum Beispiel kann man sie in ihrem Zustand auf true schalten oder ihr einen Textstring zuweisen. Name1= true Name1= 44 Name1= "MeinText" Name1= [Wert1,Wert2] - Variable bekommt den Wert WAHR - Variable bekommt einen Wert - Variable bekommt einen Textstring - Variable bekommt einen Arraywert
Variable speichern Variablen lassen sich auch jederzeit speichern und sind im weiteren Verlauf aufrufbar. saveVar "Variablenname"
9.2 - Wahrheitswerte
Ein Wahrheitswert ist ein Zustand eines Wertes. Man kann ihn mit einem Ein- oder Ausschalter vergleichen. Setzt man eine Variable auf true, wird die jeweilige Aktion gestartet und setzt man sie auf false wird die Aktion wieder beendet. Fr true kann man auch 1 und fr false auch 0 schreiben. true false 266 Wird zurckgegeben wenn Bedingung erfllt ist Wird zurckgegeben wenn Bedingung nicht erfllt ist
Kapitel 9
9.6 - If-Then-Else
Diese Syntax heit bersetzt so viel wie: Wenn Dann Sonst. Oder eben so viel wie: WENN Bedingung erfllt, DANN mach dies, ANSONSTEN mach das. Hier nochmal zwei Syntaxformen dazu: IF (a>b) THEN {c=1} ELSE {c=2} Als Beispiel mal folgendes. Ein Marker soll, solange die Einheit lebt, immer an die aktuelle Position dieser Einheit gesetzt werden. Ist diese Einheit nicht mehr vorhanden, soll das Skript beendet werden. #Start; ~0.5 If(alive Soldat1)Then{"S1-Symbol" setMarkerPos getpos Soldat1} Else{"S1-Symbol" setMarkerType "Empty";exit}; goto Start; Wenn (If) Soldat1 lebt dann (Then) setze S1-Symbol auf Soldat1 ansonsten (Else) lsche S1-Symbol und verlasse Skript (Exit). 268
9.8 - Random
Mit dem Befehl Random hat man die Mglichkeit einen Wert per Zufall generieren zu lassen. So knnte man zum Beispiel eine Variable mit einem Zufallswertwert versehen. Das Ganze schaut dann etwa wie folgt aus: _start = random 4 ? _start < 1 : goto "Start1"; ? _start < 2 : goto "Start2"; ? _start < 3 : goto "Start3"; ? _start < 4 : goto "Ende"; Hier wurde ein Wert bis maximal 4 generiert und das Skript prft danach wie gro dieser Wert ist und springt zum jeweiligen Label Start oder Ende. Natrlich kann man diesen Operator auch anderweitig benutzen. Zum Beispiel um eine Einheit an eine Zufallsposition in einem Gebude setzen oder einen Delay mit einem Zufallswert versehen. Das schaut dann etwa so aus: Name1 setPos (nearestBuilding this buildingPos random 10) oder der Delay: ~random Wert
9.9 - Waituntil
WaitUntil heit bersetzt warte bis und kann somit als Bedingung fr etwas genutzt werden. Es ist also wie ein @ nur eben fr Funktionen. Die Funktion wartet dann, bis diese Bedingung erfllt ist. _Wert = 0; waitUntil {_Wert = _Wert +1; _Wert >= 100}; 269 Kapitel 9
Setzt man eine Klammer, so fasst man etwas zusammen und teilt dem System bzw. ArmA mit, dass dies zusammen ausgefhrt werden muss. {} Code Mit der geschweiften Klammer lsst man Code verarbeiten, also alles, was man in Codeform aufrufen und weiterverarbeiten mchte. Als gutes Beispiel dient hier: {_x moveInCargo Heli1} forEach Units GAlpha Dabei sollen alle Einheiten der Gruppe GAlpha in den Frachtraum des Fahrzeugs Heli1 gesetzt werden. () - Mathematische Operatoren Mit der normalen Klammer () verarbeitet man mathematische Operatoren. Das Ganze luft wie in der Mathematik, um Punkt-vor-Strich zu umgehen. (a+b)*c Beispiel: In folgendem Beispiel soll eine Einheit an eine Position in einem Gebude laufen. Dazu sagt man: Einheit gehe zu Haus plus Position Wert. Dabei ist durch die Klammer festgelegt, dass die Position zu dem Haus gehrt. Als Syntax, sieht das Ganze so aus: _Man move (_House buildingPos 120) Wren dort keine Klammern deniert, wrde ArmA lesen: Einheit gehe zu Haus und zu einer Position 120. Wobei die Engine nicht wei, dass diese Position zu dem Gebude gehrt und gibt somit Fehlermeldung aus. Textstrings Mit Hilfe der "" legt man Textstrings fest. Alternativ kann man fr diese auch einen ' verwenden, welcher auf der Tastatur in der Regel auf der #-Taste zu nden ist. "" knnen auch geschachtelt werden. Hier mal ein Beispiel der Verwendung anhand eines Mapklicks. onMapSingleClick "Leader Alpha1 move _pos; Player say ""Hallo""" 270
Die im Array festgelegten Werte werden jetzt im Skript wie folgt deniert: _Wert1 = _this select 0 _Wert2 = _this select 1 _Wert3 = _this select 2 _Wert4 = _this select 3 Da wir im Skript mit lokalen Werten arbeiten mchten, weist man dem jeweiligen Wert aus dem Array im Skript eine eigene lokale Variable zu. Im nun folgenden Beispiel wird das Ganze sicher deutlicher. Hier soll ein Objekt mit einem Skript erstellt werden. Dies soll hier mal ein leerer BMP2 sein, der an der Position eines unsichtbaren Heli-Hs namens Point1, mit der Ausrichtung 100 und einem Treibstowert von 0.5, createt werden soll. Was man jetzt noch alles im weiteren Skriptverlauf denieren knnte, bleibt hier mal freigestellt. Zunchst die Syntax mit dem denierten Array: ["BMP2", Point1, 100, 0.5] exec "skript.sqs" _Object = _this select 0 _StartPos = _this select 1 _Azimut = _this select 2 _Fuel = _this select 3 _Vehicle = "_Object" createVehicle position _StartPos; _Vehicle setDir _Azimut; _Vehicle setFuel _Fuel; exit In diesem Skript bekommen nun die Werte aus dem Array jeweils eine lokale Variable zugewiesen. Dabei wurden diese wie folgt bergeben: "BMP2" Point1 100 0.5 bekommt die lokale Variable Wert _Object bekommt die lokale Variable _StartPos bekommt die lokale Variable _Azimut bekommt die lokale Variable _Fuel
Mit diesen vergebenen lokalen Variablen wird nun im Skript weitergearbeitet, wie man im unteren Skriptteil sehr gut erkennen kann. Der Vorteil ist nun, dass man nur ein Script bentigt, welches man beliebig oft verwenden kann. Die folgende Syntax wre nun genauso darauf anwendbar. Wobei hier mit Random ein Zufallstankfllwert zwischen 0 und 1 deniert wird und das Objekt, hier ein Heli, nun an der Position des Spielers erstellt wird. ["AH1W", Player, 100, random 1] exec "skript.sqs" 272
Zufallswert aus einem Array beziehen Mit folgender Vorgabe hat man die Mglichkeit sich einen Zufallwert aus einem Array auswhlen zu lassen und diesen dann fr etwas Bestimmtes zu verwenden. _array = [47,73,78,85,101,103]; _Pos = _array select (random (count _array)-0.5); Als gutes Beispiel dient folgendes. Man mchte die Einheit Soldier1 mit einem im Aufrufarray denierten SetUnitPos-Wert an eine Zufallsposition des Hotels setzen. Dabei sollen aber nur Positionen bercksichtig werden, die auf der ersten Etage sind und vorher im Skriptarray festgelegt wurden. [Soldier1, "Middle", Hotel] exec "skript.sqs" _Unit = _this select 0 _Pos = _this select 1 _House = _this select 2 _array = [47,73,78,85,101,103]; _BPos = _array select (random (count _array)-0.5); _Unit setPos (_House buildingPos _BPos); _Unit setUnitPos _Pos; exit; Hierbei whlt das System einen Wert aus dem Skriptarray aus und setzt die Einheit an diese Position im Hotel. Da hier mit einem Objekt auf der Karte gearbeitet wird, bitte das Kapitel 5.61 beachten, um das Gebude zu benennen.
Kapitel 9 273
Eine Funktion hat die Hauptaufgabe eine Lsung kurz und ezient herbeizufhren und besteht daher in der Regel aus einer eher kurzen Befehlsfolge, whrend ein Skript, je nach Aufgabe, schon mal etwas lnger ausfallen kann. Funktionen werden oft aus Skripten aufgerufen, um zum Beispiel einer Variablen einen Wert zuzuweisen, Werte bzw. Daten umzuwandeln oder im weitesten Sinne etwas errechnen zu lassen. Beispiele wren: - die Entfernung zweier Positionen errechnen, - aus einer Anzahl bekannter Einheiten alle Anfhrer herauszultern, - den bekanntesten Feind herausnden, -einer bestimmten Anzahl von Einheiten bestimmte Waen zuweisen - Elemente eines Arrays suchen oder zufllig vertauschen und vieles mehr. Oftmals liefert eine Funktion einen Wert zurck an das Skript. Genauer gesagt wurden viele Funktionen gerade dazu geschrieben, einen Wert, den sogenannten Return, an ein Skript zurckzuliefern, was mit einem Skript nicht mglich ist. Funktionen sind im Gegensatz zu Skripten in den allermeisten Fllen Missions- oder Addonunabhngig verwendbar. Wenn sie mit den geeigneten Daten gefttert werden, liefern sie unbestechlich und unbeirrbar ihr Ergebnis, whrend viele Skripte auf einen recht speziellen Kontext zugeschnitten sind. Funktionen bieten den Vorteil, dass man diese beim Missionsstart vorladen kann. Sie werden dann in der Engine gespeichert und sind bei Aufruf sofort verfgbar. Sie sind somit schneller verfgbar und werden mit hherer Prioritt als ein Skript bearbeitet. Idealerweise ldt man seine Funktionen aus der Init.sqs oder Init.sqf heraus. Mchte man seine Funktion beim Missionsstart vorladen, versieht man sie zunchst mit einem Variablennamen, mit welchem man spter die Funktion wieder aufrufen kann. Das System wei dann: Variablenname = Ergebnis der vorgeladenen SQF Die Syntax zum Laden der Funktion lautet dann: SearchLight = compile preprocessFile "Searchlight.sqf"; SearchLight ist die Variable die, wie oben erklrt, beim Aufruf der Funktion vergeben wurde. SearchLight steht jetzt fr die Lsung bzw. dem gesamten Inhalt der Funktion. Oder anders... SearchLight ist jetzt die Funktion! Kapitel 9
275
Wichtig dabei ist, bei dem Variablennamen (z.B.: SearchLight) darauf zu achten, dass diese Variable keinem Befehl gleichen darf, der in ArmA verwendet wird. Zum Beispiel fr eine Positions-Funktion. Position = compile preprocessFile "Position.sqf"; Dies wrde jetzt eine Fehlermeldung zur Folge haben, da Position ein ArmA-Befehl ist. Deshalb unbedingt immer Variablennamen whlen, die keinen Befehlen gleichen! Mchte man seine Funktion spter im Verlauf der Mission wieder aufrufen, verwendet man dazu grundstzlich mit dem Call-Befehl! _variable = [Daten] call SearchLight Da diese Funktion vorgeladen bzw. prkompiliert wurde, stehen die Informationen sofort zur Verfgung und die Funktion muss von der Engine nicht mehr zeilenweise interpretiert werden, wie es bei einem Skript der Fall ist. Natrlich kann man manche Aufgabe einer Funktion auch im Skript selbst lsen, auch darin ist es mglich und blich mit While-Do oder If-Then-Else zu arbeiten. Manchmal ist es aber einfach bersichtlicher, diese Aufgabe einer Funktion zu bergeben und somit gewissermaen auszulagern. In diesem Fall ruft man die Funktion mit Call auf und kann in der nchsten Zeile des Skriptes schon mit dem Ergebnis der Funktion fortfahren. Wie bereits erwhnt, wurde die SQF-Syntax fr ArmA grozgig erweitert und um viele Mglichkeiten reicher. Sie kann jetzt sogar fr Skripte verwendet werden, die damit auch die Dateinamenerweiterung SQF bekommen. In den Skripten werden, wie auch sonst berall in ArmA, Code-Blcke von geschweiften Klammern {} umschlossen und Statements mit einem Semikolon ; abgeschlossen. Natrlich kann man auch in Skripten mit SQF-Syntax Wartezeiten einbauen, dazu wird aber nicht wie bei SQS-Skripten die Tilde ~ benutzt, sondern der Befehl Sleep verwendet. Skripte, die die SQF-Syntax verwenden, mssen mit den Befehlen Spawn oder execVM aufgerufen werden. Wenn ein Skript mehrfach ausgefhrt werden soll, empehlt es sich das Skript wie eine Funktion vorzuladen, damit es bereits im Speicher bereit liegt und so rascher ausgefhrt werden kann. Skript vorladen: BeispielSkript = compile preprocessle "BeispielSkript.sqf"; Skript aufrufen: [Daten] spawn BeispielSkript; 276
Fr Skripte, die nur selten ausgefhrt werden sollen, kann man den Befehl execVM verwenden, da hier das Skript nicht vorgeladen werden muss. [Daten] execVM "BeispielSkript.sqf"; Soll ein Skript aus dem Editor aufgerufen werden, ist es leider meistens ntig, den Skriptaufruf etwas zu verndern. Er sieht dann so hnlich wie ein Funktionsaufruf aus, obwohl das Skript natrlich keinen Wert zurckgibt. Skript aus Editor aufrufen (vorkompiliert): Variable = [Daten] spawn BeispielSkript; oder (nicht vorkompiliert): Variable = [Daten] execVM "BeispielSkript.sqf"; Variable ist nur ein Platzhalter, der momentan lediglich Fehlermeldungen verhindert. Man kann die Variable als Dummy betrachten und auch so bezeichnen oder schlicht und einfach mit d abkrzen. d = [Daten] execVM "BeispielSkript.sqf"; Skripte mit der SQF-Syntax enden einfach, wenn der Interpreter an ihr Ende gelangt, der Exit-Befehl ist nicht nur unntig, sondern auch ungeeignet, weil es ein SQS-Sytnaxbefehl ist. Sollte es einmal ntig sein, ein SQF-Skript vor dem Dateiende abzubrechen, dann benutzt man folgende Konstruktion: if (Abbruchbedingung) exitWith {}; Man kann in den geschweiften Klammern des exitWith-Befehls natrlich auch noch Code ausfhren. Beispielweise: if (Abbruchbedingung) exitWith {Player sidechat "Ende!"};
Kapitel 9 277
Kapitel 10
- Dialoge und Ressourcen In diesem Kapitel werden dir einige grundlegende Bereiche zum Thema Dialoge nher gebracht. Ich habe mich hier wirklich auf ein paar wesentliche Bereiche beschrnkt, da mein Wissen im Bereich Dialoge begrenzt ist. Dennoch werde ich dir hier aufzeigen, wie du es schast ein Bild, einen Text oder als Highlight sogar ein kleines Video in deine Mission einzubinden. Alle Themen sind selbstverstndlich erweiterbar. Dies sind nur ein paar kleine Einleitungen, damit du schon mal ein Basiswissen bekommst, um spter auch mal eine Grak oder hnliches einbinden zu knnen. Da Dialoge sehr viel Sorgfalt im Bezug auf Arbeit mit der Description.ext erfordern, muss man auch die notwendige Geduld, Ruhe und das ntige Grundwissen ber die Description.ext mitbringen. Das Vergessen eines Semikolons oder einer Klammer fhrt selbst bei Pros regelmig zu CTDs (Crash to Desktop). Deshalb nicht gleich das Handtuch werfen, sondern ruhig und strukturiert an die Sache herangehen.
10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11
Was sind eigentlich Dialoge Basisdenitionen(Konstanten) Basisklassen und Subklassen Die Schriftarten Eine Grak einblenden Einen Text einblenden Visieransichten einblenden Die eigene Lagekarte Einen Button denieren Einen Rahmen denieren Die Videosequenz
279 280 283 286 287 288 289 291 292 294 297
278
Kapitel 10
In Armed Assault wurden die Mglichkeiten gegenber Operation Flashpoint um einiges erweitert. Dialoge knnen jetzt noch viel ansprechender gestaltet und deniert werden. Zum Beispiel mit Farbverlufen, Schatten oder als iegende Schrift, wie bei den Credits von Armed Assault zu sehen ist. Dialoge sind aber, so schn wie sie sind, dennoch ein Kapitel fr sich und teilweise sehr aufwendig umzusetzen. Dieses Kapitel beinhaltet lediglich eine Einfhrung und gewhrt mit der themenabschlieenden Videosequenz einen kleinen Blick ber den Tellerrand, um zu zeigen, was in diesem Bereich so alles mglich ist. Das Anlegen von Dialogen erfordert eine sehr disziplinierte und sorgfltige Arbeitsweise, da man diese in der Description.ext denieren muss und einen CTD (Crash to Desktop) zur Folge hat, wenn man mal eben etwas bersieht zu denieren. Als bestens Beispiel dienen hier das Vergessen eines Semikolons oder eine falsche Klammersetzung. Auf dem folgenden Bild wurde die Schrift iegend animiert.
279
sein, oder vieles mehr. Man hat hierbei einen relativ groen Spielraum fr eigene Denitionen, wobei es am Ende aber dann doch irgendwann Grenzen geben wird. Einfach gesehen knnte man es ein Wort fr einen Wert vergeben bezeichnen, da man sich ein Wort am Ende besser als irgendwelche Zahlen merken kann. Als Beispiel soll hier mal die eigene Denierung von einer eigenen Schriftfarbe dienen. Farben wie scharz oder wei, sind zahlentechnisch nicht so ganz so schwer zu merken. Hat man aber irgendwelche Zwischenwerte, um ein ganz bestimmtes rot, blau oder was auch immer
280
Kapitel 10
haben zu wollen, ist es doch einfacher, sich diese selbst zu denieren. Die Werte der Farben schwarz und wei sind also, wie hier zu sehen recht einfach: #dene Color_White #dene Color_Black {1, 1, 1, 1} {0, 0, 0, 1}
Bei einer anderen Farbe sieht es da schon wieder anders aus. Etwa ein blau: #dene Mein_Blau {0, 0, 0.7, 1}
Exkurs Farben werden aus Werten gemischt. Hierbei gelten alle Werte zwischen 0 und 1. Der letzte Wert gibt dabei die Transparenz an. {rot, grn, blau, Transparenz} Ende des Exkurs! Dene-Namen Wie bei dem obigen Dene der Farbe blau zu erkennen, wurde dort ein eigener Denename (Mein_Blau) vergeben. Es ist also auch mglich eigene Namen zu vergeben. Generell bietet es sich an, die Standarddenes so zu belassen und zustzlich eigene anzulegen und spter zu vergeben. Damit geht man gegebenfalls einer Menge rger aus dem Weg. Folgend mal eine sehr kleine Auistung einiger Standarddenes mit Namen und Wert: #dene CT_STATIC #dene CT_BUTTON #dene CT_EDIT #dene CT_SLIDER #dene ST_TITLE_BAR #dene ST_PICTURE 0 1 2 3 32 48
Diese Namen zu whlen wre jetzt nicht besonders sinnvoll. Deshalb sollte man seine Namen so whlen, dass es ganz sicher keine berschneidung gibt. #dene Murray_Title #dene Murray_Schrift #dene Murray_Sound ST_TITLE_BAR + ST_CENTER "Zeppelin32" {"\ca\ui\data\sound\mouse2", 0.09, 1}
Im oberen Beipiel wurde ein eigener Name vergeben und diesem die Werte von ST_Title_Bar und ST_Center zugewiesen, was so auch mglich ist. Hier ist aber jetzt Schluss zum Thema Denes! Man wei nun, dass es mglich ist eigene Namen und Werte zu vergeben und auch, wie sich die Farben zusammensetzen. Auf der Folgeseite nur noch mal ein Ausschnitt von Standarddenes, welche in vielen der oziellen Missionen etc. wiederzunden sind. 281
Standarddenes Folgend eine Auswahl von Standarddenes aus Armed Assault. Generell bietet es sich an, diese aus irgendeiner oziellen Description.ext einer ArmA-Mission zu kopieren. Hat man sich ein Mal ein Muster, also Template, angelegt, so kann man es immer wieder verwenden.
// Control Types #dene CT_STATIC #dene CT_BUTTON #dene CT_EDIT #dene CT_SLIDER #dene CT_COMBO #dene CT_LISTBOX #dene CT_TOOLBOX #dene CT_CHECKBOXES #dene CT_PROGRESS #dene CT_HTML #dene CT_STATIC_SKEW #dene CT_ACTIVETEXT #dene CT_TREE #dene CT_STRUCTURED_TEXT #dene CT_CONTEXT_MENU #dene CT_CONTROLS_GROUP #dene CT_XKEYDESC #dene CT_XBUTTON #dene CT_XLISTBOX #dene CT_XSLIDER #dene CT_XCOMBO #dene CT_ANIMATED_TEXTURE #dene CT_OBJECT #dene CT_OBJECT_ZOOM #dene CT_OBJECT_CONTAINER #dene CT_OBJECT_CONT_ANIM #dene CT_LINEBREAK #dene CT_USER #dene CT_MAP #dene CT_MAP_MAIN 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 40 41 42 43 44 45 80 81 82 83 98 99 100 101 // Static Styles #dene ST_POS #dene ST_HPOS #dene ST_VPOS #dene ST_LEFT #dene ST_RIGHT #dene ST_CENTER #dene ST_DOWN #dene ST_UP #dene ST_VCENTER #dene ST_TYPE #dene ST_SINGLE #dene ST_MULTI #dene ST_TITLE_BAR #dene ST_PICTURE #dene ST_FRAME #dene ST_BACKGROUND #dene ST_GROUP_BOX #dene ST_GROUP_BOX2 #dene ST_HUD_BACKGROUND #dene ST_TILE_PICTURE #dene ST_WITH_RECT #dene ST_LINE #dene FontM //My Denes #dene Murray_Title #dene Murray_Font 32 + 64 "TahomaB" 0x0F 0x03 0x0C 0x00 0x01 0x02 0x04 0x08 0x0c 0xF0 0 16 32 48 64 80 96 112 128 144 160 176
"Zeppelin32"
Die obigen beiden Fenster stellen eigentlich ein Fenster dar und die Denes sollten daher untereinander stehen, was hier aus Platzgrnden leider nicht mglich ist. Deshalb die Aufteilung in zwei Tabellen. Zunchst sind die Control Types und danach die Static Styles nacheinander aufgelistet, wobei die Reihenfolge dabei aber keine Rolle spielt. Wie man erkennen kann ist hierbei eine gewisse Ordnung gegeben. Zum Ende wurde mit FontM eine Schriftart deniert. Eigens angelegte Denes setzt man nun einfach mit unten an, dann sieht man mal abgesehen vom eigenen Denenamen gleich, dass ab dort die Eigenen kommen. 282
Kapitel 10
Auch hier gibt es die Basis- und die Subklasse. Die Basisklasse CfgSounds legt erstmal fest, dass es sich um einen Sound handelt, whrend die Subklasse, hier Sound1, die jeweiligen Denitionen zu Sound1 beinhaltet. Genau so sieht es auch bei den Klassen aus, die fr Dialoge bzw. Ressourcen bentigt werden. Allerdings gibt es hier weit mehr Denitionsmglichkeiten, als bei den Sounds. Basisklasse Folgend mal eine Basisklasse, in welcher grundlegende Dinge wie Typ, Style, Hintergrund, Textfarbe, Schriftart und Schriftgre deniert sind. Diese Basisklasse RscText kann man jetzt grundstzlich als Basis fr alle folgenden Subklassen verwenden.
class RscText { type = CT_STATIC; idc = -1; style = ST_CENTER; colorBackground[] = {0, 0, 0, 0}; colorText[] = {0, 0, 0, 0}; font = "TahomaB"; sizeEx = 0.080; };
Nachdem man nun eine Basis geschaen hat, kann man die Subklassen zustzlich noch individuell anpassen. Als Beispiel knnte man in der Subklasse Schrift1 eine grere und andersfarbige Schrift, als bei der Subklasse Schrift2 oder eben eine andere Position auf dem Monitor denieren. 283
Subklasse Die Subklasse ansich teilt sich nun auch nochmal auf. Sie hat in dem Sinne auch nochmal eine Subklasse. Diese nennen wir hier jetzt lieber mal Komponente, um Verwechselungen zu vermeiden. In folgendem Beispiel mal eine Gliederung:
// Mainklasse class RscText { }; // Subklasse class RscTitles { [Auistung der Ressourcen] class MeineRessource { [Auistung der Komponenten] class MeineKomponente { }; }; };
Man achte hierbei auf die Anordnung der geschwungenen Klammern, welche eine gewisse bersichtlichkeit mitbringen. Man kann so genau erkennen, was zu wem gehrt. In folgendem Beispiel aus Kapitel 10.6 in welchem es darum geht eine Schriftressource zu denieren. Hier sieht man die zunchst festgelegt Basisklasse RscText und die darunterliegende Subklasse Schrift1. Description.ext
// Basisklasse class RscText { type = CT_STATIC; idc = -1; style = ST_CENTER; h = 0.05; colorBackground[] = {0, 0, 0, 1}; colorText[] = {0, 0, 0, 1}; font = "TahomaB"; sizeEx = 0.040; }; // Weiter auf der Folgeseite!
284
Kapitel 10
// Subklasse class RscTitles{Titles[]={"Schrift1"}; // Liste der Ressourcen: Schrift1, Schrift2,. . . class Schrift1 { Idd= -1; MovingEnable=False; Duration=10; // Einblenddauer FadeIn=1; // Einblendzeit Name=" Schrift1"; // Name Controls[]={"SchriftButton1"}; // Liste class SchriftButton1 : RscText { ColorText[]={1,1,1,1}; Font="Bitstream"; Text="OPERATION SNAKEBITE"; x = 0.30; y = 0.50; w = 0.50; h = 0.05; }; };
Wie man in der Basisklasse RscText erkennen kann, wurde als Schriftfarbe {0, 0, 0, 1}, also schwarz, deniert. Aber wie auf dem unteren Bild zu sehen ist, ist die Farbe der Schrift wei. Das liegt daran, dass in der Subklasse SchriftButton1 fr Schrift1 die Farbe Wei {1, 1, 1, 1} deniert wurde. Wie man des Weiteren erkennen kann wurden in der Subklasse zustzlich noch viel mehr Dinge deniert. Eine ganz wichtige Zeile ist die class SchriftButton1 : RscText Daran erkennt man, dass der Klasse SchriftButton1 die Denitionen von RscText zugewiesen werden. Also alles was in der Basisklasse RscText vordeniert wurde, wird hier bernommen und knnte in dieser Subklasse ohne weiteres weggelassen werden. Im obigen Beispiel wurde jedoch fr SchriftButton1 die Schriftfarbe und Schriftart neu deniert. Deshalb sind diese Zeilen dort mit angegeben. Diese Einblendung wird nun wie folgt aufgerufen:
285
Zeppelin33Italic
Bei folgendem Description.ext-Beispiel wird der Ressource RscText die Schriftart Bitstream mit einer Gre von 0.04 zugewiesen.
class RscText { idc = -1; type = CT_STATIC; style = ST_LEFT; colorText[] = {1, 1, 1, 1}; colorBackground[] = {0, 0, 0, 0}; font = Bitstream; sizeEx = 0.04; };
286
Kapitel 10
287
288
Kapitel 10
Quellpfad \ca\Weapons\G36_optics \ca\weapons\optika_sniperw \ca\Weapons\optika_ACOG \ca\Weapons\optika_ACOG \ca\weapons\optika_snpiere \ca\Weapons\optika_TOW \ca\weapons\optika_dalekohled \ca\weapons\optika_SOFLAM \ca\weapons\optika_night \ca\weapons\optika_M119 \ca\Wheeled\optika_stryker_driver \ca\Tracked\optika_stryker_gunner \ca\wheeled\optika_BRDM \ca\air\optika_heli_gunner \ca\air\optika_AH1Z \ca\air\optika_Ka50_rocket.p3d \ca\Tracked\optika_tank_driver \ca\Tracked\optika_tank_gunner \ca\Tracked\optika_M1A1_commander \ca\Tracked\optika_zsu_gunner \ca\Tracked\optika_tanke_auxiliary \ca\Tracked\optika_T72_gunner 289
Description.ext
#dene CT_OBJECT 80 class RscObject { type = CT_OBJECT; scale = 1.0; direction[] = {0, 0, 1}; up[] = {0, 1, 0}; }; class RscTitles { titles[] = {SNIPER}; class SNIPER { idd=-1; movingEnable = false; duration=10; name = "SNIPER"; objects[]= {SNIPER}; class SNIPER : RscObject { model= "\ca\weapons\optika_SOFLAM"; idc=-1; position[] = {0,0,0.065}; direction[] = {sin 0, sin 0, cos 180}; up[] = {0, 1, 0}; }; };
Die hier festgelegte Ressource SNIPER wird nun wie folgt aufgerufen. titleRsc ["SNIPER","Plain"]
Mchte man diese Ressource spter wieder ausblenden geht das, je nach Auswahl, mit: titleRsc ["default","plain",2] oder cutRsc ["default","plain",2] 290
Kapitel 10
Wie man erkennen kann, gleicht diese Description.ext genau dem Beispiel aus Kapitel 10.5, nur dass eben einige Werte verndert wurden.
291
class RscButton { type = CT_BUTTON; style = ST_CENTER; // Text Denitionen font = FontHTML; colorText[] = Color_White; colorDisabled[] = Color_Black; // Hintergrund-Einstellungen colorBackground[] = Color_Black; colorBackgroundDisabled[] = Color_Black; colorBackgroundActive[] = Color_Grey; osetX = 0.001; osetY = 0.002; osetPressedX = 0.003; osetPressedY = -0.003; colorFocused[] = Color_Black; // Schatten Einstellungen colorShadow[] = Color_Black; // Rahmen-Einstellungen colorBorder[] = Color_White; borderSize = 0.02; // Sounds soundEnter[] = {"\ca\ui\sound\pageopen", 0.1, 1}; soundPush[] = {"\ca\ui\sound\pageclose", 0.1, 1}; soundClick[] = {"\ca\ui\sound\obutton", 0.1, 1}; soundEscape[] = {"\ca\ui\sound\obutton", 0.1, 1}; };
Weiter auf der nchsten Seite. Im ersten Teil der Description.ext wurden zunchst die Rahmendaten fr den Button deniert. Im zweiten Teil nun der Button selbst. 292
Kapitel 10
class DemoButton { idd = 100; movingEnable = false; controls[] = { MEIN_BUTTON }; class MEIN_BUTTON : RscButton { idc = 100; sizeEx = 0.018; text = "Klick Mich"; // Position x = 0.4; y = 0.4; // Gre w = 0.15; h = 0.04; // Action action = "ctrlSetText [100, ""Danke""]; hint ""TEST"" "; }; };
Hier wurde nun der Button selbst deniert. Er bekommt dabei die Rahmendaten von dem im ersten Description.ext-Teil vordenierten RscButton zugewiesen. Dieser Button lsst sich nun mit folgender Syntax ganz einfach aufrufen: ok = createDialog "DemoButton" Diese Syntax kann berall ganz frei eingesetzt werden, um den Button aufzurufen. Zum einfachen Testen eignet sich ein Funkauslser recht gut. Die Actionzeile knnte auch ganz anders aussehen. Hier sollte nur mal gezeigt werden, dass sich der Text eines Buttons beim anklicken auch ndern kann. Ansonsten gibt man darin die Befehle an, die beim anklicken ausgefhrt werden sollen. Die Actionzeile knnte beispielsweise auch so aussehen: action = "closeDialog 0; [] exec ""script.sqs"" "; Wie man sieht, lsst sich die Actionzeile recht frei denieren. Man kann hier ganz normal wie bei allen anderen Dingen etwas ausfhren lassen oder hnliches. Wichtig ist dabei die Beachtung der Zeichen wie Klammern, Anfhrungsstriche etc. Der Befehl closeDialog 0 schliet den Dialog letztendlich. Diesen Butten kann man jetzt noch mit einem Rahmen verzieren oder vieles mehr. Dies sollte lediglich ein schlichtes Beispiel sein, um zu zeigen, wie man einen Button erstellt. 293
class RscText { Idc = -1; Type = CT_Static; Font = FontHTML; ColorBackground = Color_White; }; class My_Frame : RscText { Style = ST_FRAME; x = 0.22; y = 0.12; w = 0.40; h = 0.20; }; class RscTitles {Titles [] = {"Rahmen1"}; class Rahmen1 { Idd= -1; MovingEnable=False; Duration=10; FadeIn=1; Name="Rahmen1"; Controls[]={"SchriftRahmen1"};
//Schriftfarbe // Text
294
Kapitel 10
Im Spiel sieht das Ganz dann wie folgt aus, wobei man den Rahmen wie folgt aufruft: titleRsc ["Rahmen1", "PLAIN"];
295
Nachdem die Description.ext deniert wurde, wird noch ein Skript bentigt, mit welchem die Sequenz aufgerufen und gesteuert wird. Das Skript schaut dabei wie folgt aus: Video.sqs:
playMusic "ATrack8" TitleCut [" ", "BLACK IN"]; titleFadeOut 4 _video = createdialog "Videodialog" _x = 1 _delay = 1/24 #Loop ctrlSetText [200, format ["video\frame%1.jpg", _x]] ~ _delay _x = _x + 1 ? _x < 150 : goto "Loop" closedialog 0 TitleCut [" ", "BLACK IN"]; titleFadeOut 4 exit;
Wie man erkennen kann, wurden hier gleich einige Eekte mit eingebracht. Die Sequenz blendet Dank dem Titelcut erstmal langsam ein. Dazu wird gleich Musik abgespielt. Etwa gleichzeitig wird der Videodialog erstellt und die Bilder laufen ab. Dazu jetzt aber noch ein paar kurze Erluterungen. _x - Wird fr den eingebauten Zhler verwendet. Solange der Wert kleiner als 150 ist, wird der Loop wiederholt. 150 ist die Anzahl der Bilder, welche im Ordner Video liegen. Dies knnen natrlich noch weit mehr sein. - Hiemit legt man die Abspielgeschwindigkeit der Bilder fest. ndert man den Wert zum Beispiel auf 1/12, laufen die Bilder langsamer ab und es entsteht der Zeitlupeneekt. 1/48 lsst die Bilder noch schneller ablaufen.
_delay
video\frame%1.jpg - Im Ordner Video sind die einzelnen Bilder hinterlegt, welche als frame1, frame2, ... durchbenannt sind. In diesem Beispiel wurden 150 Bilder verwendet. Mchte man also noch mehr Bilder verwenden, muss man den Wert im Skript einfach anpassen. 296
Kapitel 10
Die Bilder bzw. Frames Nachdem nun das Gerst steht, fehlt nur noch der eigentliche Inhalt. Wie schon erwhnt werden dafr einzelne Bilder bentigt. Die lnge der Sequenz bestimmt sich also aus der Anzahl der Bilder, die dafr verwendet werden. Dafr gibt es spezielle Freewareprogramme, welche es einem ermglichen, aus einem Video die einzelnen Bilder zu exportieren. Aus rechtlichen Grnden werde ich diese hier jetzt nicht nennen. Dies knnen, je nach Lnge oder eigenem Vorhaben schon eine ganze Menge Bilder werden. Bei dem Beispielskript wurden ganze 150 Bilder verwendet, wobei die Sequenz aber am Ende nur ein paar Sekunden lang ist. Deshalb sollte man sich berlegen, in welcher Form man ein solches Feature anwendet. Es besteht ja auch die Mglichkeit die Bilder zu verkleinern und so anzupassen, dass sie nur einen kleinen Teil des Bildschirms belegen. So eine Art kleines Infovideo, Action Hud oder was auch immer. Mchte man das Video aber ber die ganze Bildche legen, sollte man die Bilder entsprechend gro speichern. Zum Beispiel 512x512 Pixel. Dabei sollte man aber auch nicht zu groe Dateien verwendet. Was die Dateigre angeht. Da die Mission am Ende vom Gesamtumfang zu gro werden knnte. Ordner Es bietet sich fr die einzelnen Bilder an einen extra Ordner anzulegen. Denn diese im Rootverzeichnis der Mission abzulegen wre etwas unprofessionell. In diesem Beispiel wurde der Ordner Video benannt. Daraus ergibt sich dann der Pfand: video\frame%1.jpg Folgend auch nochmal ein Screen, welcher die nahezu gleichnamigen, aber gleichmig durchnummerieren Bilder enthlt.
Die Engine ersetzt den Wert %1 dann, dank der richtigen Syntax, mit der nchst hheren Zahl. Im Skript schaut diese Syntax wie folgt aus (siehe auch links im Skript): ctrlSetText [200, format ["video\frame%1.jpg", _x]] Im Kapitel 5.66 sind diesbezglich einige sich selbst erklrende Syntaxarten in speziell dieser Form. Damit sollte sich dieses Verfahren auch von selbst erklren. Jetzt bleibt nur noch...
Film ab!
297
Kapitel 11
- Allgemeines In diesem nun letzten Kapitel werden dir noch einige allgemeine Bereiche aus dem Spiel erlutert. Zum Beispiel das Anlegen oder die Verwendung von MOD-Ordnern, die Verwendung von Addons in deiner Mission oder was du beachten solltest, wenn du deine Mission verentlichen mchtest. Zum Schluss dann noch das Natoalphabet, welches du als Arma-Soldat auf jeden Fall beherrschen solltest.
11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11
Eigenes Prol Die ArmA Cheats Der MOD-Ordner Die Verwendung von Addons Der Missionsrelease Die ArmA.rpt Das Natoalphabet Die Dienstgradabzeichen Die Squad.xml Die Startparameter Tastenkombinationen, Tipps und Tricks
299 301 302 303 304 305 306 307 308 311 313
298
In einer Zeile wrde das dann etwa so aussehen: C:\ArmA\arma.exe -nosplash -window -proles=D:\ArmA\ -name=Username Mit der obigen Zeile wrde also das Prol im ArmA-Ordner angesprochen und das Spiel im Fenstermodus(Window) und ohne Vorabscreens gestartet. Tipp: Mchte gerade man nur editieren, lohnt es sich ArmA im Fenstermodus laufen zu lassen, da man so viel schneller zwischen Skripten und Spiel switchen kann.
299
Username.ArmAProle Im Prolordner ndet sich eine Datei namens Username.ArmAProle, in welcher alle Kongurationen des Users gespeichert bzw. hinterlegt sind. Hierzu gehren unter anderem, nur um mal die wichtigsten zu nennen: - Grakeinstellungen(Helligkeit,Gamma,Schatten,Shading,etc.) - Soundeinstellungen - Tastenkonguration - Mauseinstellungen - zuletzt gespielte SP-Mission - zuletzt gespielte MP-Mission - zuletzt gespielte Kampagnen-Mission - ausgewhlte Kampagne - Multiplayereinstellungen (Filter, etc.) - Schwierigkeitsgrad - benutzerdenierter Schwierigkeitsgrad - eigene Indetitt (wie etwa in Description.ext) - aktive Missionskeys - aktive Vehikelkeys (Waenkammer) - Blut (ein/aus) Diese Datei kann man ganz normal mit dem Texteditor nen. Man hat somit also auch die Mglichkeit, die Einstellungen direkt darin vorzunehmen. ArmA.cfg Eine weitere wichtige Datei im Prolordner ist die ArmA.cfg. In dieser nden sich direkte Systemeinstellungen zum Spiel. Also Dinge wie Grakausung, RAM usw. winX=0; winY=5; winW=1024; winH=746; winDefW=1028; winDefH=746; FSAA=2; HDRPrecision=8; lastDeviceId="4318,661,107156578"; localVRAM=527429632; nonlocalVRAM=260046847; - Bildposition X-Achse - Bildposition Y-Achse - Ausung X-Achse - Ausung Y-Achse - relative Ausung X-Achse - relative Ausung Y-Achse - AntiAliasing - HDR - Gesamtschlssel der Informationen - Grakkartenspeicher - Vom MB zugewiesener Shaderspeicher
300
Kapitel 11
MISSIONS
ENDMISSION - Gibt man diesen Code whrend einer Mission an, wird diese beendet. SAVEGAME - Speichert den aktuellen Spielstand beim Spielen einer SP-Mission.
TOPOGRAPHY - Generiert eine Map im EMF-Vektor-Format und hinterlegt diese im Verzeichnis C:\. Die Datei wird generiert, wenn man nach der Eingabe das nchste Mal auf die Map wechselt. Vorsicht bei verstellter Tastatur! Dann wird das als Z gesehen. Dazu dann TOPOGRAPHZ eingeben. FLUSH - Lscht unntige Dateien, Texturen und Objekte aus RAM-Speicher
Einzelspielermissionen freischalten Die Einzelspielermissionen lassen sich auch auf andere Art und Weise freischalten. Dies erfordert die Editierung des eigenen ArmA-Proles. Dazu wechselt man zunchst in den eigenen Prolordner, net anschlieend die Datei Username.ArmAProle mit dem Texteditor und trgt dort die noch nicht vorhandenen aktive Keys mit ein. Das Ganze muss am Ende dann etwa so aussehen: activeKeys[]= { "M00", "M01", "M02", "M03", "M04", "M05", "M06", "M07", "M08", "M09", "M10", "TT01", "TT02", "TT03", "TT04", "TT05", "TT06" }; Nach dem Speichern der nderung, wird diese sofort wirksam und bleibt bestehen.
301
Die Namen der Ordner sind dabei variabel benennbar. Auer bei MODs, die ja vorgegeben sind, kann man jeden Namen frei vergeben. Bei den oberen Anregungen ist zum Beispiel ein Ordner Namens @MeineMission. In diesen kommen nun alle Addons, die man in seiner Mission verwendet hat. Der Vorteil ist nun, dass man diesen jetzt mit zum Download anbieten kann, damit sich die Spieler der Mission nicht erst alle Addons mhevoll zusammensuchen mssen. Der Spieler hat jetzt beim Spielstart die Wahl, ob er die Addons mitldt oder nicht. Mchte er die Mission gerade nicht spielen, braucht er auch die Addons nicht zu laden und spart somit Zeit und Performance. Das Anlegen eines MOD-Ordners Einen MOD-Ordner legt man direkt im Spielverzeichnis von ArmA an und gibt ihm einen passenden Namen. Jetzt net man seinen MOD-Ordner und erstellt darin einen Ordner namens Addons. In diesen Unterordner kommen nun alle Addons, die man fr seine Mission, oder was auch immer, bentigt.
302
Vor den Namen Mapfact wurde ein @ gesetzt, damit der MOD-Ordner im ArmAVerzeichnis gleich ganz oben mit angezeigt wird. Benennt man nun alle Ordner zuerst mit dem @, werden alle entsprechend sortiert angezeigt und man sieht gleich, was ein MOD-Ordner ist und was nicht. Natrlich kann man auch ein anderes Zeichen oder was auch immer benutzen. Dies ist lediglich eine Anregung. Das Laden eines MOD-Ordners Mchte man einen MOD-Ordner laden, kann man dies durch das Hinzufgen eines Parameters in einer eigens dafr erstellten Verknpfung zur ArmA.exe realisieren oder man nutzt einen ArmA-Launcher, welchen es im Internet zum Download gibt. Zweiteres ist natrlich die elegantere Lsung. Hier jedoch der Parameter, mit welchem man die Verknpfung ergnzt. Um diesen nun in die Verknpfung mit einzufgen klickt man mit der rechten Maustaste auf die Verknpfung und passt diese entsprechend an: D:\ArmA\arma.exe -mod=@MAPFACT Diese Verknpfung knnte man jetzt ArmA-Mapfact oder hnlich benennen.
Kapitel 11
Die Readme
Verwendete Addons
Das Paket
304
Kapitel 11
306
USA
Private --Private First Class ----Corporal --Sergeant Sta Sergeant Sergeant First Class Master Sergeant Sergeant Major --Cadet --Second Lieutnant First Lieutenant Captain Major Lieutenant Colonel Colonel Brigadier General Major General Lieutenant General General/Field Marshal
Grobritanien
Private --Lance Corporal ----Corporal --Sergeant Sta Sergeant --Warrant Ocer Class 2 Warrant Ocer Class 1 --Ocer Cadet --Second Lieutnant Lieutenant Captain Major Lieutenant Colonel Colonel Brigadier Major General Lieutenant General General/General of Army
Frankreich
Premire Classe Caporal Caporal Chef ----Sergent Sergent Chef Adjudant --Adjudant Chef Major ----Aspirant --Sous Lieutenant Lieutenant Capitaine Commandant Lieutenant Colonel --Gnral de Brigande Gnral de Division
Gnral de Corps dArmee
Gnral dArmee
307
Das Benutzen einer Squad.xml erfordert ein paar Voraussetzungen. Man bentigt dafr einen Server, auf dem die nun folgend aufgefhrten Dateien abgelegt werden knnen. Dazu legt man auf seinem Server ein neues Verzeichnis an und legt die zugehrigen Dateien dort ab, welche man vorher seinen Bedrfnissen angepasst hat, was dann als nchstes erklrt wird.
Abzulegende Dateien Abzulegende Dateien sind hierbei: squad.xml squad.css squad.dtd squad.xsl squadpic.paa Hierbei merkt man sich die URL, welche man spter etwa so aussehen knnte: http://www.meinserver.de/armaxml/squad.xml 308
Diese gibt man dann spter, wie auf dem folgenden Bild zu sehen, bei Squad URL an. Kapitel 11 Player ID Eine weiterer wichtiger Punkt ist die Player ID, welche unten rechts im Bild zu sehen ist. Jeder Spieler hat eine eigene ID, welche in der Squad.xml deniert werden muss. Die Konguration Die einzigsten Dateien, welche hierbei bearbeitet werden mssen sind die Squad.xml und die Squadpic.paa. Die anderen sind dabei eher unwichtig, aber mssen der Funktionalitt halber auf dem Server liegen. Squad.xml In ihr wird die eigentliche Konguration vorgenommen. Hierbei wird im oberen Abschnitt die Squad deniert und im unteren Abschnitt die einzelnen Spieler. <Squad Nick> <Name> <EMail> <Web> <Picture> <Title> - Squadabkrzung (Clan-Tag) - Squadname - Squadkontakt - Squadwebseite - Bild (Squadpic.paa) - Squadname
Diese Datei keinesfalls mit Excel, sondern mit dem Texteditor bearbeiten! 309
Im unteren Abschnitt wird der Spieler deniert: <Member ID> <Nick> <Name> <EMail> <ICQ> <Remark> - Player ID (siehe Prolbild) - Nickname (Prolname) - Name - Spielerkontakt - IM-Kontakt - Bemerkung
Squadpic.paa Die Squadpic.paa ist das Logo, welches hinterher im Prol angezeigt wird. Dieses ist aber nicht zwingend vorgeschrieben und man kann es also auch weglassen. Wenn man es aber haben mchte, muss es auf jeden Fall im gleichen Ordner liegen, wie die Squad.xml! Squadpic ist hierbei wieder ein variabler Name. Benennt man die Datei anders, muss man das logischerweise auch in der Squad.xml anpassen. Mchte man nun ein eigenes Squadlogo erstellen, macht man das mit einem Grakprogramm. Dazu erstellt man zunchst ein neues Bild im TGA-Format und legt die Mae fest, welche wie folgt lauten knnen: 16/16, 32/32, 64/64, 128/128, 256/256 Anschlieend gestaltet man sein Logo den eigenen Wnschen entsprechend und speichert das Ergebnis ab. Mit dem Programm TexView ld man sein Logo dann und speichert es anschlieend als PAA-Datei. 310
Ergebnis Drckt man nun spter ingame in einer Mehrspielermission egal ob Hostet oder Dedicated die P-Taste, wird folgendes Ergebnis angezeigt: Kapitel 11
Template Ein downloadbares Template ndet man auf www.mr-murray.de.vu Dieses muss man dann, wie zuvor erklrt, lediglich seinen Bedrfnissen anpassen.
Verschiedene Optionen -nomap -noland - buldozer -init= -proles= -name=Username -noPause -maxMem=Wert -world=Sara -mod=@rdner Netzwerk Optionen -port= -password= -host -server -connect= -netlog -cfg= Einbindung eines Parameters
- Startet ArmA nur mit bentigten Addons - Startet ArmA ohne Insel - Startet ArmA im Buldozer Mode - -init=playMission[,'M04Saboteur.Sara'] - Bestimmt den Userordner (-proles=F:\ArmA\) - Ldt das jeweilige Benutzerprol - Spiel luft auch im Hintergrund weiter - Maximale Speichermenge (MB) - Ldt die angegebene Insel (Sara=Sahrani, Intro=Rahmadi, Empty=keine) - Ldt den angegebenen MOD-Ordner mit
- Port zum Server (Local Host bzw. Dedicated Server) - Passwort zum Dedicated Server - Startet einen Host-Server - Server einen Dedicated Server - Server zu dem verbunden werden soll - Aktivert das Protokolieren der Netzwerkaktivitt - Auswahl einer Cfg-Datei
Einen Parameter hngt man an die ArmA.exe bzw. einer extra dafr angelegten Verknpfung. Dazu klickt man mit der rechten Maustaste auf die Exe und whlt die Egenschaften aus. Jetzt net sich ein solches Fenster, wie rechts zu sehen ist. Bei Ziel gibt man dann die jeweiligen Parameter an und Speichert das Ganze. Hier mal ein Beispielparameter: C:\ArmA\arma.exe -nosplash -nomap Man hat auch die Mglichkeit verschiedene Verknpfungen anlegen, die man dann individuell kongurieren kann. Jedoch sparen Community-Tools, wie etwa ein Arma-Launcher, eine Menge Arbeit, da man damit noch viel bersichtlicher Arbeiten kann. 312
[Mausrad]
Templates Generell lohnt es sich fr gewisse Missionsinhalte so genannte Templates zu erstellen. Wenn man zum Beispiel eine Stellung oder hnliches gebaut hat, muss das ja nicht unweigerlich heien, dass diese nur fr die eine Mission zu gebrauchen ist. Oder andere Dinge wie Zufallspositionen etc. Erstellt man sich fr jedes Missionsfeature ein rohes Template, hat man so die Mglichkeit es jederzeit schnell in seine aktuelle Mission zu importieren und zu verwenden. Man spart sich damit denitiv eine Menge Zeit, welche man dann sinnvoller nutzen kann. Dazu erstellt man sich einfach eine simple Mission mit dem jeweiligen Inhalt, etwa der Stellung und speichert sie zum Beispiel als Editormission mit Namen _Temp_Bunker ab. Templates II Hat man eine groe und komplexe Mission geschaen, kommt es oft vor, dass man pltzlich noch eine tolle Idee hat, die unbedingt mit implementiert werden soll. Zum Beispiel eine neue Basis oder wie auch immer. Also etwas, wo man wieder ein wenig bauen, verschieben und in die Vorschau wechseln muss. Bei der Mission wre es dann so, dass beim Start ja alles gestartet wird, was man zuvor darin deniert hat. Dafr lohnt es sich eine neue Map (Template) zu erstellen, auf der man diese Basis nun ohne ablenkendes Drumherum bauen kann, nach der Fertigstellung speichert man diese einfach als Editormission, wechselt zu seiner Hauptmission und nutzt die Importfunktion Zusammenfhren, um das Template in seine Mission zu importieren. 313
Stichwortverzeichnis
A
Bezeichnung Kapitel Seite
Abgefeuerter Typ ausgeben lassen Actionbefehl Actionmeneintrag Airstrike Airvehiclecreator Alarm Allgemeines MP Animationsbefehl Arma.rpt Array Artillerie Aufklrer Auslser und Wegpunkte synchronisieren Auslser einfgen Auslser erzeugen Auslserbereich prfen Auslserbereiche addieren B
Bezeichnung
3.16 5.55 6.3 6.12 6.13 5.32 7.19 5.56 11.6 9.12 6.7 6.22 1.6 1.4 5.69 5.26 5.26
92 136 181 198 201 119 247 139 305 271 189 217 35 27 160 115 115
Kapitel
Seite
Bedingung Tod Beendigung einer Mission Befreundete Parteien Bekanntheitsgrad einer Einheit Bereich prfen Bewanung im MP Bombe erzeugen Bombenleger Brieng Briengzubehr Bullet Mode C
Bezeichnung
5.33 4.6 5.31 5.29 5.26 7.21 5.46 6.21 2.13 4.3 6.10
Kapitel
Seite
D
Bezeichnung Kapitel Seite
Datum und Uhrzeit einstellen Deathmatch Delay Description.ext Dialoge Dienstgrad vergeben Dienstgradabzeichen Distanz zweier Einheiten oder Objekte E
Bezeichnung
Stichwortverzeichnis
Kapitel
Seite
Editoroberche Eigenes Prol Einheiten/Fahrzeuge einfgen Einheiten/Fahrzeuge erzeugen Einheiten bewanen und ausrsten Einheiten und Objekte drehen Einheiten verbinden Einheit begibt sich in Gebude Einheit bleibt stehen Einheit bewegt sich zu Bestimmungsort Einheit ergibt sich Einheit hat Wae Einheit mit Wegpunkten bearbeiten Einheitsklassen Einheit in Fahrzeug Einheiten starten bzw. stoppen Einheiten zu Missionsbeginn im Fahrzeug Ein- und aussteigen lassen Einheit verlsst Gruppe und tritt anderer bei Einheit whlt Wae Einheit wendet sich anderer Einheit zu Einheit ein Ziel zuweisen Einheiten in einem Bereich ansprechen Einheitsstatus speichern oder laden Einheit begibt sich zu Gebudeposition Eventhandler Explosionen , Rauch und Flares erzeugen
1.1 11.1 1.2 5.45 3.3 5.15 1.9 5.19 5.10 5.12 6.23 3.17 1.10 3.9 5.4 5.11 5.6 5.7 5.20 5.23 5.22 5.21 5.27 5.28 5.63 5.65 5.46
16 299 20 124 70 111 39 112 109 110 218 92 40 77 107 111 108 108 113 114 114 113 115 116 153 155 126 315
F
Bezeichnung Kapitel Seite
Fahne vergeben Fahrzeugklassen Fahrzeugwaen Fahrzeuge be- und entladen Fahrer/Beifahrer eines Fahrzeugs Fahrzeugverbot fr Einheit Fahrzeug fhrt erst, wenn Einheit eingestiegen ist Fallschirmspringer Fahrzeug Respawn Fahrzeug Respawn (Mr-Murray) Fehlerreportdatei / Arma.rpt) Feindmeldeskript Fernglasbenutzung durch Einheit Feuer (brennend/erloschen) Feuer erzeugen (Skriptversion) Flexible Respawnpunkte Freundlicher Feind Flaggen Grundinformationen MP Flares, Rauch und Explosionen erzeugen Fluchtverhalten einer Einheit oder Gruppe Flughhe einer Einheit Funkmenu verndern Funkspruch abgeben Funktionen Grundwissen (SQF) G
Bezeichnung
5.35 3.7 3.8 3.5 5.2 5.3 5.6 6.1 7.14 7.15 11.6 6.11 5.77 5.36 5.75 7.3 5.30 7.16 5.46 5.14 5.17 5.48 5.50 9.13
120 73 76 71 106 106 108 179 235 236 305 197 172 121 169 225 117 238 126 110 112 127 129 274
Kapitel
Seite
Gebudepositionen Geschwindigkeit einer Einheit/Fahrzeug Geschwindigkeit ausgeben lassen GPS-System Grakformate (Paa/Pac) Gruppen erzeugen Gruppe zu Missionsbeginn im Fahrzeug
316
H
Bezeichnung Kapitel Seite
Kapitel
Seite
Stichwortverzeichnis
Kapitel
Seite
5.43
123
Kapitel
Seite
Kameraeekte Kamerasteuerung Kamerakoordinaten Kamera erstellen Kamera an Fahrzeug oder Einheit heften Kartenanimation KI abschalten Klammereigenschaften Karte auf den Monitor erzwingen L
Bezeichnung
Kapitel
Seite
Laternen abschalten Leeres Fahrzeug Leerer Scheinwerfer mit Licht Lichtquellen erzeugen (Skriptversion) Liegen, knien und stehen Lip-Dateien Lschen von Einheiten und Objekten Logische Operatoren
M
Bezeichnung Kapitel Seite
Mapclick Marker einfgen Marker erzeugen Marker mit Einheiten verbinden Minen-Skript Mimiken Missionsordner Mission.sqm Missionsname Missionsstart Missionszubehr Missionswertung Missionsziele Mission beenden Mission speichern Missionsrelease MOD-Ordner Mwen-Skript Munitionskiste Multiplayer-Allgemeines Multiplayer-Bewanung Multiplayer-Description.ext Multiplayerbereich festlegen Musik oder Sound einbinden N
Bezeichnung
6.6 1.7 5.70 1.9 6.17 5.54 2.1 2.2 4.1 4.2 4.3 4.4 4.5 4.6 4.7 11.5 11.3 6.19 3.4 7.19 7.21 7.4 7.7 5.52
187 36 162 39 208 135 42 43 97 97 98 99 99 101 103 287 302 213 71 247 250 226 228 130
Kapitel
Seite
11.7 3.19
Kapitel
306 93
Seite
81 111 58
318
P
Bezeichnung Kapitel Seite
Patrouille laufen, fahren oder iegen PBO-Datei Panzenklassen Proleigenschaften Positionen (xyz) auslesen Publicvariable Punktvergabe MP Punkte vergeben bzw. anzeigen lassen MP Q
Bezeichnung
Stichwortverzeichnis
R
Bezeichnung Kapitel Seite
Random Rauch erzeugen (Skriptversion) Rauch, Flares und Explosionen erzeugen Respawnpunkte Respawnarten Respawndialog Rufzeichen vergeben Rund ums Vehikel Rucksack S
Bezeichnung
Kapitel
Seite
Schadenwert vergeben Scheinwerfer Schilderklassen Seiten verfeinden Sekundr- oder Primrwae Semikolon Setvelocity Shellklassen Sichtweite ndern Skript (.sqs) Staub erzeugen
5.24 6.14 3.14 5.31 3.18 9.11 5.58 3.10 5.41 2.6 5.73
319
Sound erstellen Sound oder Musik einbinden Spielerseite auslesen Spielereingabe unterdrcken Speichern Spielbeschleunigung unterdrcken Spielerbezogene Textmitteilung Spielbare Einheit hinzufgen Squad.xml Startparameter Staub erzeugen Stehen, knien und liegen Steinklassen Streifen laufen, fahren oder iegen Stringtable.csv Stringtable Grundwerte Stringtable Grundwerte MP Sychronisieren T
Bezeichnung
5.51 5.52 5.38 5.39 4.7 6.9 7.22 5.37 11.9 11.10 5.73 5.60 3.13 5.13 2.4 5.67 7.13 1.6
129 130 121 121 103 181 251 121 308 311 167 144 90 110 51 158 234 35
Kapitel
Seite
Kapitel
Seite
5.61 8.7
145 262
Kapitel
Seite
Variable Vehikeltransport-Skript Verschlossenes Fahrzeug Versetzen von Objekten, Auslsern und Markern Verwendung von Addons
320
W
Bezeichnung Kapitel Seite
Waen und Magazine erzeugen Waen und statische Waen Waenwahl einer Einheit Waenauswahl im Brieng Waen der Fahrzeuge Waen- und Magazintypen ausgeben lassen Waenbezeichnungsliste Waen und Munitionskiste Wahrheitswerte WaitUntil Wegpunkte einfgen Wegpunkte erzeugen Wegpunkte und Auslser synchronisieren Wetter einstellen While-Do-Schleife X
Bezeichnung
3.21 3.1 5.23 3.6 3.8 3.15 3.2 3.4 9.2 9.9 1.5 5.68 1.6 5.42 9.4
Stichwortverzeichnis
Kapitel
Seite
XYZ-Positionen auslesen Y
Bezeichnung
5.64
155
Kapitel
Seite
Z
Bezeichnung Kapitel Seite
Zhler Zeitanzeige im Multiplayer Zeitlupe oder Zeitsprint Zeitzhler Zielzuweisung fr eine Einheit Zufallsanimation Zufallsmusik Zufallspositionen Zufallspositionen Zufallswetter Zuwendung einer Einheit
9.5 7.8 5.44 6.15 5.21 5.56 5.52 1.9 6.5 5.42 5.22
268 229 123 204 113 139 130 39 185 122 114
321
Syntaxverzeichnis
A
Bezeichnung Kapitel Seite
Active Action AddAction AddEventhandler AddRating AddSwitchableUnit AddWeapon AddMagazine AddWeaponCargo AddWaypoint AddMagazineCargo AIKills Alive AllowGetin AllowFleeing And Animate AnimationState AssignAsCargo AssignAsCommander AssignAsDriver AssignAsGunner AssignTeam AssignToAirport AssignedVehicle AssignedVehicleRole AVGScore B
Bezeichnung
4.5 5.55 6.3 5.65 4.4 5.37 3.3 3.3 3.4 5.68 3.4 7.4 5.71 5.3 5.14 9.3 5.61 5.56 5.78 5.78 5.78 5.78 5.79 5.82 5.78 5.78 4.4
99 136 181 155 99 121 70 70 71 159 71 226 165 106 110 267 145 139 172 172 172 172 173 175 172 172 99
Kapitel
Seite
BuildingPos C
Bezeichnung
5.62
148
Kapitel
Seite
Case Ceil ClearWeaponCargo ClearMagazineCargo CloseDialog CommandTarget CommandFire CommandMove CommandStop CommandTarget Compile ComposeText Count CreateDialog CreateGroup CreateMarker CreateMine CreateSoundSource CreateTrigger CreateVehicle CreateVehicleLocal CreateUnit Crew CutRsc CutText D
Bezeichnung
9.3 9.3 3.4 3.4 10.9 5.21 5.80 5.80 5.80 5.80 9.13 8.6 9.3 10.9 5.45 5.70 3.20 5.51 5.69 5.45 5.45 5.45 5.71 10.7 8.6
Kapitel
267 267 71 71 292 113 174 174 174 174 274 261 267 292 124 162 93 129 160 124 124 124 165 289 261
Seite
Syntaxverzeichnis
Damage Default DefValueParam DeleteMarker DeleteStatus DeleteVehicle DeleteWaypoint Driver Done DoFire DoGetOut DoMove DoStop
5.24 1.2 7.8 5.70 5.28 5.47 5.68 5.71 4.5 5.21 5.47 5.12 5.10
114 20 229 162 116 127 159 165 99 113 127 110 109 323
Kapitel
Seite
Kapitel
Seite
FadeMusic FadeRadio FadeSound Failed Fire False Flag FlagOwner Floor FlyInHeight Format ForEach ForceMap ForceSpeed Fuel G
Bezeichnung
5.52 5.52 5.52 4.5 5.21 9.2 7.16 7.16 9.3 5.17 5.66 9.3 5.40 5.71 5.71
129 129 129 99 113 266 238 238 267 112 157 267 121 165 165
Kapitel
Seite
GetMarkerPos GetPos GetPosASL GetSpeed GlaceAt GlobalChat Goto Group GroupChat GrpNull Gunner H
Bezeichnung
1.7 5.22 5.64 5.8 5.22 5.50 9.3 5.6 5.50 5.20 5.71
36 114 153 108 114 129 267 108 129 113 165 Syntaxverzeichnis
Kapitel
Seite
174 92 99 144
Kapitel
Seite
Join K
Bezeichnung
5.20
Kapitel
113
Seite
KnowsAbout L
Bezeichnung
5.29
117
Kapitel
Seite
Land LandAt
5.18 5.82
Leader LimitSpeed List Localize Local Player Local Server Lock, Locked LookAt LoadIdentity LoadStatus M
Bezeichnung
5.79 5.71 9.3 5.66 7.19 7.19 5.1 5.22 5.53 5.28
173 165 267 157 247 247 106 114 134 116
Kapitel
Seite
Magazines MapAnimAdd MapAnimClear MapAnimCommit MapAnimDone MaxPlayers MaxScore MinPlayers MinScore ModelToWorld Move MoveInCargo MoveInCommander MoveInDriverMoveInGunner MoveInTurret N
Bezeichnung
3.15 8.9 8.9 8.9 8.9 7.11 4.4 7.11 4.4 5.15 5.12 5.2 5.2 5.2 5.2
92 263 263 263 263 233 99 233 99 111 110 106 106 106 106
Kapitel
Seite
Kapitel
Seite
113 99 97
Kapitel
Seite
Player PlayMove PlayMusic PlaySound Position PreLoadCamera PreLoadMusic PreLoadObject PreLoadSound PreLoadTitleRsc PreLoadTitleText PreProcessFile PrimaryWeapon PublicVariable Q
Bezeichnung
9.1 5.56 5.52 5.52 5.64 8.8 8.8 8.8 5.52 8.8 8.8 9.13 3.18 7.18
265 139 130 130 153 262 263 262 130 263 263 274 93 246
Syntaxverzeichnis
Kapitel
Seite
R
Bezeichnung Kapitel Seite
Random Rank Rating RemoveAction RemoveEventhandler RemoveWeapon RemoveAllWeapons RemoveMagazine RemoveSwitchabeUnit Respawn
9.8 5.76 4.4 6.3 5.65 3.3 3.3 3.3 5.37 7.4
Kapitel
Seite
Saving SaveGame SaveIdentity SaveStatus SaveVar Say ScriptDone SecondaryWeapon SelectLeader SelectPlayer SelectWeapon Server SetAccTime SetAirportSide SetAmmoCargo SetAperture SetBehaviour SetCaptive SetCombatMode SetDamage, SetDammage SetDate SetDir SetFace SetFace Animation SetFlagOwner SetFlagSide SetFlagTexture SetFog SetFormation SetFormDir SetFriend SetFuel SetFuelCargo 328
4.7 4.7 5.53 5.28 9.1 5.51 8.8 3.18 5.37 5.37 5.23 7.19 5.44 5.82 1.2 8.7 1.5 5.30 1.4 5.24 5.43 1.2 5.53 5.53 7.16 7.16 5.35 5.42 1.5 1.2 5.31 5.71 5.71
103 103 134 116 265 129 263 93 121 121 114 247 123 175 20 262 30 117 27 114 123 16 134 134 238 238 120 122 30 20 118 165 165
SetGroupID SetIdentity SetLightAmbient SetLightBrightness SetlightColor SetMarkerBrush SetMarkerColor SetMarkerDir SetMarkerPos SetMarkerShape SetMarkerSize SetMarkerText SetMarkerType SetMusicEect SetMimic SetOverCast SetPos SetRadioMessage SetRain SetRank SetRepairCargo SetSkill SetSoundEect SetSpeedMode SetTargetAge SetTerrainGrid SetTriggerActivation SetTriggerArea SetTriggerStatements SetTriggerText SetTriggerTimeOut SetTriggerType SetUnitAbility SetUnitPos SetVehicleAmmo SetVehicleArmor SetVehicleInit SetVehiclePosition SetVeloCity SetViewDistance SetWaypointType
5.49 5.53 5.73 5.73 5.73 5.70 5.70 5.70 1.7 5.70 5.70 5.70 5.70 5.69 5.54 5.42 5.15 5.48 5.42 5.76 1.2 1.2 5.69 5.8 1.2 5.83 5.69 5.69 5.69 5.69 5.69 5.69 1.2 5.60 3.3 5.24 1.2 5.15 5.58 5.41 5.68
128 134 167 167 167 162 162 162 36 162 162 162 162 160 135 122 111 127 122 171 20 20 160 108 20 176 160 160 160 160 160 160 20 144 70 114 20 111 144 122 159 329
Syntaxverzeichnis
SetWaypointBehaviour SetWaypointCombatMode SetWaypointDescription SetWaypointFormation SetWaypointHousePosition SetWaypointPosition SetWaypointScript SetWaypointSpeed SetWaypointStatements SetWaypointTimeOut SetWaypointType ShowCinemaBorder ShowCompass ShowDebrieng ShowGPS ShowMap ShowNotePad ShowRadio ShowWatch ShowWaypoint Side SideChat SkipTime Sleep SomeAmmo Spawn SpeedIsNull Stop SwitchLight SwitchMove SwitchCamera T
Bezeichnung
5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 5.68 8.4 4.3 4.3 4.3 4.3 4.3 4.3 4.3 5.68 5.38 5.50 5.43 9.7 3.19 9.13 5.71 5.11 5.61 5.56 6.22
159 159 159 159 159 159 159 159 159 159 159 260 98 98 98 98 98 98 98 159 121 129 123 269 93 274 165 109 145 139 217
Kapitel
Seite
Kapitel
Seite
Syntaxverzeichnis
Kapitel
Seite
Kapitel
Seite
269 92 95 94 268
Kapitel
Seite
Y
Bezeichnung Kapitel Seite
Z
Bezeichnung Kapitel Seite
331
IMPRESSUM
Autor: Webseite: Text, Layout und Design: Grak und Coverdesign: Lektorat: Englische bersetzung: Sascha Mr-Murray Homann www.mr-murray.de.vu
Sascha Homann Sascha Homann Sascha Homann, Daniel Schnyan, Dan Bolan Daniel "Memphisbelle" Schnyan Stephen "Steevo" White Englisches Lektorat: Dan "Metal0130" Bolan and Matt Rochelle Publisher: Mr-Murray Spielentwickler: Bohemia Interactive (www.bistudio.com) Credits: Memphisbelle, Metal0130, Parvus, Wolle, Blackland, Woody, Placebo, Maruk, Suma, Ivan, Pete, Shadow, Jan Hlavat, Dslyecxi, Hoz, Jahve, Planck, RichUK, Q, Raedor, Rastavovich, Vilem, Jerry Hopper, Deadeye, Matt Rochelle, M-E, Foxhound, C930, Marco-Polo-IV, MCPXXL, Silola, Chneemann, Lester, Swat, Pit, Sgt Ace, SNKMan, Legislator, Imutep, Crowe, Wolf der Kleine, Bergho, Al Simmons, Pitti, Sniping-Jack, JrgF, BadAss, Unterfeld, OneManGang, Flashpoint_K, Kriegerdaemon, Wstenfuchs, LockheedMartin$ch, Burns, Simba, LordOfTheFlames, Spinor, OFPEC-Team, Deadeye, Luemmel, Zenshin, Moses, Hardrock, TheArmALord, Bolek, Flimmi, Lima, NoFu, Tajin, John Silver,T_D , Redsh, Buliwyf, Big X, Teufelsklaue, Clausewitz, Vektorboson Cervo,Mandoble,Vienna,NeoArmageddon,Mondkalb,ColonelKlink Credits Screenshotcontest: Marcus-Ergalla, Burns, Stoned Boy, Laggingape, Swat, Xsive, Woody, Evil Ash, Legislator, Arctic, AlexXx, Blechreiz, Churchill, Switcher83, Blacktiger Spielversion: Dieses Buch basiert auf Spieleversion 1.15
Copyrighthinweis 2008 Sascha Mr-Murray Homann. Alle Rechte vorbehalten. Die in diesem Medium verwendeten Firmennamen, Namen, Logos, Graken, Warenzeichen und Produktbezeichnungen dienen nur Identikationszwecken. Sie verbleiben im alleinigen Eigentum der jeweiligen Rechteinhaber. Das Cover-Artwork ist Eigentum von Bohemia Interactive (BIS) 2008 und wurde mit freundlicher Genehmigung von BIS zur Verfgung gestellt. 2008 Bohemia Interactive. Alle Rechte vorbehalten.
332
333