De/Emancipation Grid: Difference between revisions

From Valve Developer Community
< De
Jump to navigation Jump to search
(Addition to unfinished page)
Line 78: Line 78:
== Dynamischer Fizzler ==
== Dynamischer Fizzler ==


[Zu ergänzen]
Für die Erstellung eines dynamischen Fizzlers kann ohne weiteres auf das Tutorial für den statischen Fizzler verwiesen werden, bei dem nur ganz minimale Änderungen vorgenommen werden müssen. Im wesentlichen braucht ein dynamischer Fizzler nämlich ergänzende Objekte.
 
=== Abweichungen zum statischen Fizzler ===
==== Die Emitter-Modelle ====
Da es sich eben nicht um statische Fizzler handelt, dürfen die Modelle der Emitter nicht statisch sein. Dementsprechend wählt man als Entitätenklasse in den Objekteigenschaften keine prop_statics, sondern [[prop_dynamic|prop_dynamics]]. Außerdem wählt man im 'Model Browser' nicht das statische Modell, sondern das dynamische: 'props\fizzler_dynamic.mdl'.<br>
https://developer.valvesoftware.com/w/images/0/02/Model_Browser_Fizzler.png<br><br>
In den Objekteigenschaften sind nun nur noch folgende Keyvalues anzupassen:
::{| class=standard-table
!  Eigenschaft || Wert
|-
| Name || fizzlers
|-
| HoldAnimation || true
|-
| Collision || Not Solid
|}
Soll der Fizzler deaktiviert starten, ist darüber hinaus folgende Änderung der Keyvalues erforderlich:
::{|class=standard-table
!  Eigenschaft || Wert
|-
| Default Animation || closeIdle
|}
==== Der Entitäten-Brush ====
Das eigentliche Emanzipationsfeld muss ebenfalls leicht angepasst werden. Um es zwecks Aktivierung und Deaktivierung ansteuern zu können, braucht es einen Namen:
::{| class=standard-table
!  Eigenschaft || Wert
|-
| Name || fizzler_brush
|}
Und auch hier ist eine weitere Anpassung der Keyvalues vorzunehmen, wenn der Fizzler deaktiviert starten soll:
::{| class=standard-table
!  Eigenschaft || Wert
|-
| Start Disabled || Yes
|}
=== Ergänzungen zum statischen Fizzler ===
==== Eine Entität zum Aktivieren des Fizzlers ====
Aktiviere das Entitäten-Werkzeug und wähle im rechten Bereich von Hammer diesmal ein [[logic_relay]] aus. In der 3D-Ansicht kannst Du dieses Objekt dann wieder mit einfachem Mausklick in Deiner Map positionieren, am besten irgendwo in der Nähe des Fizzlers, der aktiviert werden soll.<br>
Wähle dann das Auswahl-Werkzeug und öffne mit {{key|Alt|Enter}} die Objekteigenschaften des 'logic_relay'. Dort ist bei den Keyyvalues nur ein Name einzugeben:
::{|class=standard-table
!  Eigenschaft || Wert
|-
| Name || relay_fizzler_on (Vorschlag)
|}
In dem Outputs-Reiter der Objekteigenschaften sind dann folgende Werte einzutragen:
::{|class=standard-table
!  My Output > || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| OnTrigger || fizzlers || SetAnimation || open || 0.00 || No
|-
| OnTrigger || fizzler_brush || Enable || <none> || 0.00 || No
|}
==== Eine Entität zum Deaktivieren des Fizzlers ====
Hier kann ebenso verfahren werden wie zuvor, denn auch hierfür benötigt man ein 'logic_relay' mit folgenden Eigenschaften:
::{|class=standard-table
!  Eigenschaft || Wert
|-
| Name || relay_fizzler_off (Vorschlag)
|}
::{|class=standard-table
!  My Output > || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| OnTrigger || fizzlers || SetAnimation || close || 0.00 || No
|-
| OnTrigger || fizzler_brush || Disable || <none> || 0.00 || No
|}
==== Ein Output zum Aktivieren oder Deaktivieren des Fizzlers ====
Zu guter letzt bedarf es noch mindestens eines Objektes in Deiner Map, das die beiden soeben erschaffenen 'logic_relays' auslöst und damit den Fizzler aktiviert bzw. deaktiviert. Wenn dies beispielweise über einen Standardknopf geschehen soll (bei Knopfdruck geht der Fizzler aus, beim Rücksetzen wieder an), sind bei dessen Outputs in den Objekteigenschaften folgende Einträge erforderlich:
::{|class=standard-table
!  My Output > || Target Entity || Target Input || Parameter || Delay || Only Once
|-
| OnPressed || relay_fizzler_off || Trigger || <none> || 0.00 || No
|-
| OnButtonReset || relay_fizzler_on || Trigger || <none> || 0.00 || No
|}
Selbstredend können die 'logic_relays' durch jedes beliebige Ereignis eines beliebigen Objekts der Map ausgelöst werden, aber dadurch ändert sich ausschließlich der Eintrag bei 'My Output >'.<br><br>
Herzlichen Glückwunsch! Damit ist das dynamische Emanzipationsfeld fertig.


== Größere und kleinere Fizzler ==
== Größere und kleinere Fizzler ==


[Zu ergänzen]
[Zu ergänzen]

Revision as of 07:56, 4 February 2013

Template:Otherlang2

"Beachten Sie das strahlende Partikelfeld am Ausgang."
- Der Ansager

Ein Emanzipationsfeld (üblicherweise als Fizzler bezeichnet) ist ein spezielles Energiefeld in Portal 2, das

  • die Portalkanone des Spieler zurücksetzt und dabei eventuell gesetzte Portale auflöst,
  • es verhindert, Portale auf dahinter liegende Flächen zu schießen, und
  • Objekte zerstört, die es berühren.

Das Emanzipationsfeld in Portal 2 besteht aus aus zwei Teilen:

In Portal kommt zu diesen beiden Teilen als drittes noch

dazu.

Instanz

Wie für die meisten Testelemente in Portal 2 gibt es auch für dieses Spielelement eine Instanz. Allerdings ist die Fizzler-Instanz statisch und hat eine feste Größe von 128 x 128 Einheiten, weswegen seine Verwendbarkeit stark eingeschränkt ist. Sie wurde speziell dafür entworfen, in den Ausgangsbereichen der Testkammern in Verbindung mit einem Turbinenaufzug eingesetzt zu werden. Es gibt drei Instanzen dieses statischen Fizzlers:

  • Schwarz/sauber: sdk_content\maps\instances\gameplay\fizzler_black_clean_128x128.vmf
  • Schwarz/dreckig: sdk_content\maps\instances\gameplay\fizzler_black_dirty_128x128.vmf
  • Weiß/dreckig: sdk_content\maps\instances\gameplay\fizzler_white_dirty_128x128.vmf

Manuelle Erstellung

Dieses Tutorial soll selbst für Benutzer mit wenig oder gar keiner Kenntnis von Hammer leicht verständlich sein. Wir werden einen statischen Fizzler erstellen, der ein Feld von 128 x 128 Einheiten abdeckt.

Schritt 1: Erstellung der Emitter-Modelle

Klicke auf der linken Seite des Hammer-Editors auf das Entitäten-Werkzeug https://developer.valvesoftware.com/w/images/3/32/Mt-entities.png.
Wähle nun auf der rechten Seite des Editors in dem mit 'Objects' betitelten Auswahlmenü ein prop_static aus.
https://developer.valvesoftware.com/w/images/3/33/Objects_prop_static.png

Jetzt kannst Du durch einfachen Mausklick in dem 3D-Ansichtsfenster (üblicherweise im oberen linken Viertel) an der gewünschten Stelle in der Map die Punkt-Entität prop_static erstellen.

Als nächstes klicke links in Hammer auf das Auswahl-Werkzeug https://developer.valvesoftware.com/w/images/f/fa/Mt-selection.png.
Doppelklicke damit auf den roten Kasten im 3D-Ansichtsfenster, der das prop_static-Objekt repräsentiert, oder drücke Alt+ Enter, um die Objekteigentschaften (Object Properties) zu öffnen.
https://developer.valvesoftware.com/w/images/3/3f/Object_Properties_prop_static.png

In dem Eigenschaftenfenster doppelklicke nun auf den Eintrag 'World Model', wodurch der 'Model Browser' geöffnet wird. Dort gib unten links im 'Filter' den Begriff 'fizzler' ein, wodurch darüber sämtliche verfügbaren Modelle aufgelistet werden, deren Name 'fizzler' enthält.
https://developer.valvesoftware.com/w/images/0/02/Model_Browser_Fizzler.png

Wähle mit einem weiteren Doppelklick das Model 'props\fizzler.mdl' aus, wodurch Du zurück in die Objekteigenschaften des prop_static gelangst. Nun musst Du nur noch 'Übernehmen' bzw. 'Accept' anklicken und das Modell wird geladen und sollte in den Ansichtsfenstern angezeigt werten. Falls das nicht geschieht, speichere die Map, beende Hammer und starte das Programm neu. Nach dem Laden der Map, müsste das Fizzler-Modell angezeigt werden.

Schließe nun das Objekteigenschaften-Fenster, falls Du das noch nicht getan hast, und klicke das Modell des Fizzler-Emitters im 3D-Ansichtsfenster einfach an, so dass es ausgewählt ist. Nun kannst Du es ohne Weiteres kopieren, indem Du

  • zuerst Strg+C (Kopieren) und dann Strg+V (Einfügen) drückst,
  • es in einem der 2D-Ansichtsfenster mit der Maus (gedrückte linke Maustaste) verschiebst, während Du die Shift-Taste gedrückt hältst, oder
  • den Mauszeiger über eines der vier Ansichtsfenster führst und eine Pfeiltaste betätigtst, während Du die Shift-Taste gedrückt hältst.

Nun hast Du die zwei benötigten statischen Emitter-Modelle in Deiner Map.

Schritt 2: Positionierung der Emitter-Modelle

Jetzt ist es Zeit, die beiden Modelle an dem richtigen Ort in der Map zu positionieren. Dafür schiebst Du die Modelle in Deiner Map an zwei gegenüberliegende Wände, so dass sich die Modelle genau anschauen. Dies lässt sich am einfachsten über das 2D-Ansichtsfenster bewerkstelligen, in dem die Aufsicht (top x/y) auf Deine Map verfügbar ist. Wie Du ein Modell rotieren kannst, erfährst du hier. Beachte, dass die Wände genau 128 Einheiten entfernt voneinander sein müssen, da die in Schritt 4 vorzunehmende Texturierung des eigentlichen Emanzipationsfeldes sonst nicht einwandfrei möglich ist. Sollte der Abstand zwischen den beiden Wänden größer oder kleiner sein, folge bitte dem anschließenden Tutorial für 'Größere und kleinere Fizzler'.

Beachte, wie die Brushes das Fizzler-Modell einschießen, so dass keine sichtbaren Clippingeffekte entstehen bzw. die Map leakt.

Das Fizzler-Modell ist erst richtig positioniert, wenn es derart in der Wand liegt, das die beiden seitlichen Lamellen genau auf der Wand aufliegen. Bei dieser Position überdeckt die Wand Teile des Emitters.

Note.pngBemerkung:Die Wand sollte jedoch auf keinen Fall durch den Fizzler-Emitter hindurchgehen, da dies äußerst seltsam und unprofessionell aussähe.

Dementsprechend müssen drei Brushes den Emitter seitlich und hinten umrunden. Dabei können die seitlichen Brushes durchaus die seitlichen Wände sein, in denen der Emitter eingebaut ist. Auf der Rückseite des Emitters muss aber auf jeden Fall ein weiterer Brush ergänzt werden, es sei denn, dort befindet sich bereits die Rückseite einer weiteren Wand. Beachte, dass der 'Kasten', in den der Emitter eingesetzt ist, gegebenenfalls auch oben und unten abgeschlossen werden muss, insbesondere wenn es sich bei der Emitter-Wand um eine Abschlußwand Deiner Map handelt, da sonst ein Leak entsteht.

Erstelle die notwendigen Brushes zunächst mit einer Nodraw-Textur und texturiere erst danach nur die sichtbaren Seiten der Brushes. Wenn es sich bei den Wänden um Außenwände Deiner Map handelt, ist dieser Schritt nun abgeschlossen. Sollten die Brushes, die den Emitter umgeben, jedoch innerhalb der Map liegen, sollten sie auf jeden Fall zu func_details verbunden werden. Dies geht am schnellsten, indem man die einzelnen Brushes zusammen oder einzeln mit dem Auswahl-Werkzeug auswählt und danach Strg+T drückt.

Schritt 3: Erstellung des Emanziaptionsfeldes

Der Fizzler-Brush hat eine Breite von 1 und schließt im Emitter genau dort ab, wo ursprünglich die Wand war.

Nun erstelle einen Brush, der die Maße 128 x 128 x 1 besitzt. Hierfür klickst Du wie schon bei der vorherigen Erstellung von Brushes in der linken Leiste von Hammer auf das Block-Werkzeug https://developer.valvesoftware.com/w/images/a/a4/Mt-block.png. Dann wähle auf der rechten Seite des Hammer-Programms die Nodraw-Textur aus und zeichne den Brush in den 2D-Ansichtsfenstern so, dass er genau zwischen die Fizzler-Emitter passt. Der Brush sollte nun eine Breite von 128 Einheiten haben, 128 Eiheiten hoch und genau eine Einheit dick sein.

Als nächstes binde diesen Brush an eine Entität, indem Du Strg+T drückst. In dem erscheinenden Fenster für die Objekteigentschaften des Brushes wähle 'trigger_portal_cleanser' aus und betätige 'Übernehmen' bzw. 'Accept'. https://developer.valvesoftware.com/w/images/1/11/Object_Properties_trigger_portal_cleanser.png

Jetzt muss nur noch das Keyvalue 'Visible' auf 'Yes' umgestellt werden und der Fizzler ist funktionell fast fertig. Standardmäßig wirkt eine trigger_portal_cleanser nämlich nur auf Spieler, weswegen dessen sogenannte Flags noch bearbeitet werden müssen. Klicke hierfür in dem Objekteigenschaften-Fenster oben den Reiter 'Flags' an und versehe dort des Kästchen neben 'Physics Objects' mit einem Häckchen, damit der Fizzler auch Würfel und Turrets etc. fizzlet. Zum Abschluss klickst Du wieder einmal auf 'Übernehmen' bzw. 'Accept'.
https://developer.valvesoftware.com/w/images/e/e7/Object_properties_trigger_portal_cleanser_flags.png

Der Fizzler ist jetzt einsatzbereit, kann aber wegen der Nodraw-Textur im Spiel noch nicht gesehen werden.

Schritt 4: Texturierung des Emanzipationsfeldes

Zu Abschluss bedarf es nur noch der Texturen auf dem Entitäten-Brush. Hierfür öffne mit Shift+A die Oberflächenbearbeitungsanwendung (Face Edit Sheet).
https://developer.valvesoftware.com/w/images/c/c0/Face_edit_sheet.png

Klicke auf 'Browse' und gib in dem erscheinenden Fenster links unten den Begriff 'fizzler' ein.
https://developer.valvesoftware.com/w/images/8/80/Textures_Filter_fizzler.png

Im oberen Bereich werden nun sämtliche Texturen mit dem Begriff 'fizzler' angezeigt. Wähle 'effects/fizzler' mit einem Doppelklick aus und du gelangst zurück zum Oberflächenbearbeitungsfenster (Face Edit Sheet). Hier musst Du nur noch die Werte für Texture Scale auf 0.125 für X und Y setzen.
https://developer.valvesoftware.com/w/images/d/da/Face_edit_sheet_fizzler.png

Danach kannst Du mit der rechten Maustaste nur auf die beiden sichtbaren Seiten des Emanzipationsfeldes klicken. Die Textur ist appliziert und muss nun gegebenenfalls nur noch an die Lage des Entitätenbrushes angepasst werden.
Wenn die Textur des Fizzlers verschoben ist, wähle erst beide texturierten Seiten des Fizzlers mittels Linksklick aus, während Du Strg hältst. Sollte der Fizzler horizontal verlaufen, musst Du dann im 'Justify'-Bereich auf 'L' oder 'R' drücken. Wenn der Fizzler vertikal verläuft, musst Du als Rotation 90 eingegeben und im 'Justify'-Bereich 'T' oder 'B' auswählen. Damit dürfte die Textur auf Deinem Fizzler fertig sein.

Herzlichen Glückwunsch. Du hast nun eine funktionsfähiges Emanzipationsfeld in Deiner Map erstellt.

Dynamischer Fizzler

Für die Erstellung eines dynamischen Fizzlers kann ohne weiteres auf das Tutorial für den statischen Fizzler verwiesen werden, bei dem nur ganz minimale Änderungen vorgenommen werden müssen. Im wesentlichen braucht ein dynamischer Fizzler nämlich ergänzende Objekte.

Abweichungen zum statischen Fizzler

Die Emitter-Modelle

Da es sich eben nicht um statische Fizzler handelt, dürfen die Modelle der Emitter nicht statisch sein. Dementsprechend wählt man als Entitätenklasse in den Objekteigenschaften keine prop_statics, sondern prop_dynamics. Außerdem wählt man im 'Model Browser' nicht das statische Modell, sondern das dynamische: 'props\fizzler_dynamic.mdl'.
https://developer.valvesoftware.com/w/images/0/02/Model_Browser_Fizzler.png

In den Objekteigenschaften sind nun nur noch folgende Keyvalues anzupassen:

Eigenschaft Wert
Name fizzlers
HoldAnimation true
Collision Not Solid

Soll der Fizzler deaktiviert starten, ist darüber hinaus folgende Änderung der Keyvalues erforderlich:

Eigenschaft Wert
Default Animation closeIdle

Der Entitäten-Brush

Das eigentliche Emanzipationsfeld muss ebenfalls leicht angepasst werden. Um es zwecks Aktivierung und Deaktivierung ansteuern zu können, braucht es einen Namen:

Eigenschaft Wert
Name fizzler_brush

Und auch hier ist eine weitere Anpassung der Keyvalues vorzunehmen, wenn der Fizzler deaktiviert starten soll:

Eigenschaft Wert
Start Disabled Yes

Ergänzungen zum statischen Fizzler

Eine Entität zum Aktivieren des Fizzlers

Aktiviere das Entitäten-Werkzeug und wähle im rechten Bereich von Hammer diesmal ein logic_relay aus. In der 3D-Ansicht kannst Du dieses Objekt dann wieder mit einfachem Mausklick in Deiner Map positionieren, am besten irgendwo in der Nähe des Fizzlers, der aktiviert werden soll.
Wähle dann das Auswahl-Werkzeug und öffne mit Alt+ Enter die Objekteigenschaften des 'logic_relay'. Dort ist bei den Keyyvalues nur ein Name einzugeben:

Eigenschaft Wert
Name relay_fizzler_on (Vorschlag)

In dem Outputs-Reiter der Objekteigenschaften sind dann folgende Werte einzutragen:

My Output > Target Entity Target Input Parameter Delay Only Once
OnTrigger fizzlers SetAnimation open 0.00 No
OnTrigger fizzler_brush Enable <none> 0.00 No

Eine Entität zum Deaktivieren des Fizzlers

Hier kann ebenso verfahren werden wie zuvor, denn auch hierfür benötigt man ein 'logic_relay' mit folgenden Eigenschaften:

Eigenschaft Wert
Name relay_fizzler_off (Vorschlag)
My Output > Target Entity Target Input Parameter Delay Only Once
OnTrigger fizzlers SetAnimation close 0.00 No
OnTrigger fizzler_brush Disable <none> 0.00 No

Ein Output zum Aktivieren oder Deaktivieren des Fizzlers

Zu guter letzt bedarf es noch mindestens eines Objektes in Deiner Map, das die beiden soeben erschaffenen 'logic_relays' auslöst und damit den Fizzler aktiviert bzw. deaktiviert. Wenn dies beispielweise über einen Standardknopf geschehen soll (bei Knopfdruck geht der Fizzler aus, beim Rücksetzen wieder an), sind bei dessen Outputs in den Objekteigenschaften folgende Einträge erforderlich:

My Output > Target Entity Target Input Parameter Delay Only Once
OnPressed relay_fizzler_off Trigger <none> 0.00 No
OnButtonReset relay_fizzler_on Trigger <none> 0.00 No

Selbstredend können die 'logic_relays' durch jedes beliebige Ereignis eines beliebigen Objekts der Map ausgelöst werden, aber dadurch ändert sich ausschließlich der Eintrag bei 'My Output >'.

Herzlichen Glückwunsch! Damit ist das dynamische Emanzipationsfeld fertig.

Größere und kleinere Fizzler

[Zu ergänzen]