1. TRLevel
  2. Forum
    1. Unresolved Threads
    2. Articles
  3. Members
    1. Recent Activities
    2. Users Online
    3. Team
    4. Trophy
    5. Search Members
  4. Tutorials
  5. Levels
  6. Downloads
  7. Adventskalender
    1. Kalender 2025
    2. Kalender 2024
    3. Kalender 2023
    4. Kalender 2022
    5. Kalender 2021
    6. Kalender 2020
    7. Kalender 2019
    8. Kalender 2018
    9. Kalender 2017
  8. Osterkalender
    1. Osterkalender 2026
    2. Osterkalender 2025
    3. Osterkalender 2024
    4. Osterkalender 2023
    5. Osterkalender 2022
    6. Osterkalender 2021
    7. Osterkalender 2020
    8. Osterkalender 2019
    9. Osterkalender 2018
    10. Osterkalender 2017
    11. Osterkalender 2016
  9. Mediathek
    1. Albums
    2. Video channels
  • Login
  • Register
  • Search
Tutorials
  • Everywhere
  • Articles
  • Pages
  • Forum
  • Tutorials
  • Files
  • Images
  • Videos
  • More Options
  1. TRLevel.de
  2. Lexicon

TRNG Schalter Rätsel mit bestimmter Reihenfolge

  • l.m.
  • July 8, 2021 at 12:07 AM
  • September 5, 2022 at 11:12 AM
  • 3,275 times viewed

WICHTIG

Diese Tutorials sind beim schreiben immer mit der aktuellsten TEN/TE Version erstellt worden.
Leider kann sich von Version zu Version des Tomb Editor oder der Tomb Engine immer etwas am Code ändern. Daher können manche Teile der Tutorials veraltet sein, bzw. nicht mehr funtkionieren.
Wenn euch hier etwas auffällt, teilt uns dies BITTE mit. Damit man sich das Tutorial ansehen und überarbeiten kann. Dazu bitte einfach ein Thema im "TRLevel Forum" eröffnen.

  • Angenommen wir haben 3 Schalter (normaler Switch den Lara hoch oder runterziehen kann).

    Diese Schalter dürfen nur in einer bestimmten Reihenfolge gezogen werden, ansonsten bleibt eine Trapdoor geschlossen.

    Erst wenn alle Schalter in der richtigen Reihenfolge gezogen wurden, geht diese Trapdoor auf.

    Für dieses Tutorial nennen wir unsere 3 Schalter nun wie folgt:

    • Ost Schalter
    • Nord Schalter
    • Süd Schalter

    Wenn die Schalter in der Reihenfolge Ost, Nord, Süd gezogen werden, geht die Trapdoor auf.

    Andernfalls nicht.

    Also zum Beispiel:

    Lara zieht folgende Reihenfolgen:

    • Ost - Süd - Nord - Trapdoor bleibt zu
    • Süd - Nord - Ost - Trapdoor bleibt zu
    • Nord - Süd - Ost - Trapdoor bleibt zu

    usw.

    erst bei der Reihenfolge Ost - Nord - Süd - geht die Trapdoor auf.

    Wichtig:

    Wir müssen unter jedem Switch einen "Switch for Switch Type X)" setzen, damit Lara den Schalter auch normal wieder hochziehen kann.

    Als Trigger darunter können wir einfach ein "Dummy" AnimatingX triggern welches nicht spielrelevant ist. Die Logik selbst erfolgt im Script, nicht im Editor.

    Die Logik einmal kurz erklärt:

    Jeder Schalter repräsentiert ein "Bit" einer zuvor definierten Variablen. In diesem Beispiel nutzen wir die Variable "Local Byte Delta4".

    Es kann auch jede andere beliebige sein, ich empfehle aber eine Byte Variable - bitte einmal die Referenz zu Variablen durchgehen, falls dies nicht verstanden wird wieso.

    Beim Ziehen eines Schalters wird ein spezielles Bit dieser Variablen gesetzt:

    • Schalter Ost -> Bit 0
    • Schalter Nord -> Bit 1
    • Schalter Süd -> Bit 2

    Erst wenn alle 3 Bits (Bits 0 - 2) gesetzt sind, geht die Trapdoor auf.

    Um die Reihenfolge zu erhalten, müssen wir vorher prüfen, ob die anderen vorangegangen Bits gesetzt sind, ERST DANN kann der entsprechende Schalter sein Bit setzen.

    Somit ergeben sich folgende Bedingungen:

    Dh. Schalter Ost hat keine Bedingungen, da dies der erste Schalter ist.

    Schalter Nord hat die Bedingung dass Schalter Ost (Bit 0) gezogen wurde.

    Schalter Süd hat die Bedingung dass Schalter Ost (Bit 0) und Schalter Nord (Bit 1) gezogen wurde.

    Als Beispiel:

    Lara zieht als erstes Schalter Ost, (richtige Reihenfolge, da kein vorheriger Schalter nötig ist) , somit wird Bit 0 gesetzt.

    Nun hat Lara 2 Optionen:

    1. Lara zieht dann Schalter Süd, (falsche Reihenfolge, da der Schalter nach Ost Nord und nicht Süd wäre), somit wird in der Bedingung von Schalter Süd geprüft ob Bit 0 und Bit 1 gesetzt sind. Da Lara nur Schalter Ost (Bit 0) gezogen hat fehlt hier die Bedingung das Bit 0 UND Bit 1 gezogen werden muss um das Bit 2 zu setzen (Bit 2 steht ja für Süd!) - somit wird alles "gelöscht".
    2. Lara zieht den Schalter Nord, (richtige Reihenfolge, da der Schalter nach Ost dann Nord ist.) Somit wird in der Bedingung von Schalter Nord geprüft ob Bit 0 gesetzt ist. Somit würde nun Bit 1 gesetzt werden (von Schalter Nord).

    Die Abfolge / Logik sollte nun ab hier verstanden sein.

    Wir benötigen für jeden Schalter eine Triggergruppe die prüft ob Lara sich am Schalter befindet UND

    ob sie den Schalter herunterzieht (Anim 63), oder heraufzieht (Anim 64), UND ob die entsprechenden Bits gesetzt sind.


    Für den ersten Schalter benötigen wir also folgendes:

    (Achtung bei allen Triggern muss natürlich die richtige ID benutzt werden, ich habe hier nur beispielsweise ID's genommen, wie zb. 1069 für den Switch Type 1 -> siehe TriggerGroup 90)

    Das müsst ihr natürlich entsprechend alles für euch anpassen, dass ihr eure ScriptID / ObjektID's nutzt!)

    Code
    ; Schalter Ost
    
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 63
    ; Copy following values to your script:
    ; $8000,63,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 4, Z = 4, Ocb = 0, ScriptId = 1069
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> Value=2
    ; Copy following values to your script:
    ; $9000,1069,$0236
    TriggerGroup=        90, $8000,63,$001E, $9000,1069,$0236
    Display More

    Triggergruppe 90 enthält die Bedingungen (Lara steht am Schalter Ost und fährt diesen runter) - wir benötigen hier keine Abfrage nach Bits, da Schalter Ost der erste ist.

    Code
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Set in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 0
    ; Copy following values to your script:
    ; $2000,234,$004B
    
    ; setze Bit 0
    Triggergroup=        91, $2000,234,$004B

    Triggergruppe 91 setzt das Bit 0.

    Nun prüfen wir das "heraufziehen" des Switches (Und ob Lara sich am Schalter befindet) - und löschen das Bit 0 (UND Alle weiteren Bits, da dieser Schalter der erste ist - denn wenn dieser Schalter NICHT aktiviert ist, MUSS die Reihenfolge ja wieder von 0 starten!)

    Code
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 64
    ; Copy following values to your script:
    ; $8000,64,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 4, Z = 4, Ocb = 0, ScriptId = 1069
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> Value=2
    ; Copy following values to your script:
    ; $9000,1069,$0236
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 0
    ; Copy following values to your script:
    ; $2000,235,$004B
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 1
    ; Copy following values to your script:
    ; $2000,235,$014B
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> Bit  2  ($00000004 ; 4)
    ; Copy following values to your script:
    ; $2000,235,$024B
    
    ; wenn Lara am Schalter Anim 64 ausführt lösche Bit 0 & Bit 1 & Bit 2
    TriggerGroup=        92, $8000,64,$001E, $9000,1069,$0236, $2000,235,$004B, $2000,235,$014B,$2000,235,$024B
    Display More

    Nun brauchen wir für den Schalter Nord analog folgendes:

    Code
    ; Schalter Nord
    
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 63
    ; Copy following values to your script:
    ; $8000,63,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> 0
    ; Copy following values to your script:
    ; $8000,75,$002C
    ; wenn Bit 0 gezogen ist
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 5, Z = 5, Ocb = 0, ScriptId = 1070
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> 2
    ; Copy following values to your script:
    ; $9000,1070,$0236
    TriggerGroup=        94, $8000,63,$001E, $8000,75,$002C, $9000,1070,$0236
    Display More

    Triggergruppe 94 enthält die Bedingungen (Lara steht am Schalter Ost und fährt diesen runter) UND zusätzlich ob auch Schalter Ost (Bit 0) gezogen wurde


    Code
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Set in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 1
    ; Copy following values to your script:
    ; $2000,234,$014B
    ; setze Bit 1
    TriggerGroup=        95, $2000,234,$014B

    Triggergruppe 95 setzt das Bit 1.

    Nun prüfen wir das "heraufziehen" des Switches (Und ob Lara sich am Schalter befindet) - und löschen das Bit 1 (UND Alle weiteren Bits - in dem Fall nur noch das vom Schalter Süd (Bit 2).

    Bit 1 wird gelöscht, weil dieses Bit ja zum Schalter Nord gehört. Bit 0 wird nicht gelöscht, weil die Reihenfolge bis dahin ja korrekt war. Bit 2 wird allerdings gelöscht, damit die Ausgangssituation entsteht (Schalter Ost wurde gezogen) - Schalter Nord und Süd sind dann noch offen.

    Code
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 64
    ; Copy following values to your script:
    ; $8000,64,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 5, Z = 5, Ocb = 0, ScriptId = 1070
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> 2
    ; Copy following values to your script:
    ; $9000,1070,$0236
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 1
    ; Copy following values to your script:
    ; $2000,235,$014B
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> Bit  2  ($00000004 ; 4)
    ; Copy following values to your script:
    ; $2000,235,$024B
    
    ; wenn Lara am Schalter Anim 64 ausführt lösche Bit 1 & Bit 2
    Triggergroup=        96, $8000,64,$001E, $9000,1070,$0236, $2000,235,$014B, $2000,235,$024B
    Display More


    Und zum Schluss noch die Logik für Schalter Süd:


    Code
    ; Schalter Süd
    
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 63
    ; Copy following values to your script:
    ; $8000,63,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> 0
    ; Copy following values to your script:
    ; $8000,75,$002C
    
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> Bit  1  ($00000002 ; 2)
    ; Copy following values to your script:
    ; $8000,75,$012C
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 3, Z = 5, Ocb = 0, ScriptId = 1071
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> 2
    ; Copy following values to your script:
    ; $9000,1071,$0236
    TriggerGroup=        98, $8000,63,$001E, $8000,75,$002C, $8000,75,$012C, $9000,1071,$0236
    Display More

    Triggergruppe 98 enthält die Bedingungen (Lara steht am Schalter Ost und fährt diesen runter) UND zusätzlich ob auch Schalter Ost (Bit 0) und Schalter Nord (Bit 1) gezogen wurde


    Code
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Set in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 2
    ; Copy following values to your script:
    ; $2000,234,$024B
    ; setze Bit 2
    TriggerGroup=        99, $2000,234,$024B

    Triggergruppe 99 setzt das Bit 2.

    Nun prüfen wir das "heraufziehen" des Switches (Und ob Lara sich am Schalter befindet) - und löschen das Bit 2 . Weitere müssen wir nicht löschen, da Bit 2 ja schon quasi das letzte in der Logik ist.

    Code
    ; ConditionNg for ParameterNg
    ; <#>
    ; <&> Lara perform Anim 64
    ; Copy following values to your script:
    ; $8000,64,$001E
    
    ; ConditionNg for ParameterNg
    ; <#> (306) SWITCH_TYPE1, Room = Room 153 (digged above), X = 3, Z = 5, Ocb = 0, ScriptId = 1071
    ; <&> Lara. Distance. Lara is distant by <#>Moveable less or even than (E)Clicks (C54)
    ; <E> 2
    ; Copy following values to your script:
    ; $9000,1071,$0236
    
    ; Trigger for FlipEffect
    ; <#> : Variables. Numeric. Clear in <&>Variable the (E)bit
    ; <&> Local Byte Delta4
    ; <E> 2
    ; Copy following values to your script:
    ; $2000,235,$024B
    ; wenn Lara am Schalter Anim 64 ausführt lösche Bit 2
    Triggergroup=        100, $8000,64,$001E, $9000,1071,$0236, $2000,235,$024B
    Display More

    Um die Triggergruppen nun auszuführen benötigen wir pro Switch einen globalen Trigger.

    Der erste prüft ob die Bedingungen für Schalter Ost gesetzt sind (Triggergruppe 90 prüft Laras Switch Anim und ob sie am Schalter steht) und falls ja wird Triggergruppe 91 getriggert (setze Bit 0). Ansonsten Triggergruppe 92 (Schalter wird hochgezogen, lösche Bits).

    Analog dazu für Schalter Nord und Süd:

    Code
    Globaltrigger=         35,IGNORE, GT_CONDITION_GROUP,IGNORE, 90,91,92
    Globaltrigger=         36,IGNORE, GT_CONDITION_GROUP,IGNORE, 94,95,96
    Globaltrigger=         37,IGNORE, GT_CONDITION_GROUP,IGNORE, 98,99,100

    Zum Schluss wenn alle Schalter Logiken gebaut sind, brauchen wir noch die Prüfung ob das Rätsel gelöst wurde - oder eben nicht.

    Wir prüfen dazu ob alle 3 Bits gesetzt worden sind und öffnen die Türe, oder schließen diese:

    Die beiden Triggergruppen beinhalten die Conditions und zum Schluss den "Effekt" - Open oder Close Trapdoor.

    Code
    ; Prüfen ob alle 3 Bits gesetzt sind (0, 1 und 2)
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> 0
    ; Copy following values to your script:
    ; $8000,75,$002C
    
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> Bit  1  ($00000002 ; 2)
    ; Copy following values to your script:
    ; $8000,75,$012C
    
    ; ConditionNg for ParameterNg
    ; <#> Local Byte Delta4
    ; <&> : Variables. The <#>Numeric Variable has the (E)Bit set
    ; <E> Bit  2  ($00000004 ; 4)
    ; Copy following values to your script:
    ; $8000,75,$022C
    
    ; Trigger for ActionNg
    ; <#> (122) TRAPDOOR1, Room = Room53, X = 4, Z = 5, Ocb = 0, ScriptId = 1062
    ; <&> 26
    ; <E> Open the door
    ; Copy following values to your script:
    ; $5000,1062,$011A
    Triggergroup=        112,$8000,75,$002C, $8000,75,$012C, $8000,75,$022C, $5000,1062,$011A
    
    ; Prüfen ob alle 3 Bits nicht gesetzt sind (cleared) (0, 1 und 2)
    ; ConditionNg for ParameterNg
    ; <#> 75
    ; <&> Variables. The <#>Numeric Variable has the (E)Bit clear (C45)
    ; <E> 0
    ; Copy following values to your script:
    ; $8000,75,$002D
    
    ; ConditionNg for ParameterNg
    ; <#> 75
    ; <&> Variables. The <#>Numeric Variable has the (E)Bit clear (C45)
    ; <E> Bit  1  ($00000002 ; 2)
    ; Copy following values to your script:
    ; $8000,75,$012D
    
    ; ConditionNg for ParameterNg
    ; <#> 75
    ; <&> Variables. The <#>Numeric Variable has the (E)Bit clear (C45)
    ; <E> Bit  2  ($00000004 ; 4)
    ; Copy following values to your script:
    ; $8000,75,$022D
    
    ; Trigger for ActionNg
    ; <#> (286) TRAPDOOR1, Room = Room53, X = 4, Z = 5, Ocb = 0, ScriptId = 1062
    ; <&> 26
    ; <E> Close the door
    ; Copy following values to your script:
    ; $5000,1062,$001A
    Triggergroup=        113,$8000,75,$002D, $8000+TGROUP_OR,75,$012D, $8000+TGROUP_OR,75,$022D, $5000,1062,$001A
    Display More

    Die globalen Trigger schalten die Triggergruppen die gesamte Zeit "scharf".

    Dh. im Spiel wird immer geprüft ob die Bedingungen in den Triggergruppen "erfüllt" sind. Erst dann werden die Effekt Trigger in den Triggergruppen ausgeführt.

    Code
    ; Öffne die Trapdoor
    GlobalTrigger=         39, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 112, IGNORE
    
    ; Schließe die Trapdoor
    GlobalTrigger=         38, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 113, IGNORE

    Viel Spaß beim ausprobieren! :)

    • TRNG
    • Scripting
    • Switches

Share

  • Previous entry Limitierte Munition bei den Pistolen TRNG
  • Next entry Secret alternativ OHNE 005 triggern ohne das das zuvor gespielte Foreground Audio abbricht
  • Changelog
  • PDF

Categories

  1. Archiv 8
    1. Tomb Editor_Alt 2
    2. TRNG_Alt 4
  2. Bauen 239
    1. Tomb Editor (TE) 107
      1. Tipps und Tricks 19
      2. SoundTool 5
      3. TombIDE 6
      4. WadTool 11
      5. NodeEditor 2
    2. Tomb Engine (TEN) 72
      1. Tipps und Tricks 17
      2. Lua Scripting 35
    3. TRNG Engine 194
      1. Scripting 4
      2. NG Center 20
      3. Allgemein 7
      4. Neue TRNG Script Befehle 66
      5. Neue TRNG Trigger 66
      6. Neue TRNG OCB Werte 9
      7. TRNG Plugins 6
      8. Tipps und Tricks 5
      9. TRNG Engine Praktische Beispiele 8
    4. NGLE (Next Generation Level Editor) 12
    5. Tomb Raider Level Editor 86
      1. Licht 4
      2. Geometrie 8
      3. Levelbau 110
      4. Tipps und Tricks 12
      5. Script 3
      6. Sounds 2
      7. Texturen 2
      8. OCB 4
      9. Sonstiges 3
      10. Dxtre3D 1
  3. Tools 21
    1. Metasequoia 5
      1. Metasequoia 3.x 2
      2. Metasequoia 4.x 3
    2. StrPix und WADMerger 4
      1. StrPix 2
      2. WADMerger 2
    3. FLEP 9
    4. Tools 2
    5. TREP 7
      1. Flipeffect Editor 1
      2. Custom Patches 2
    6. TRViewer 1
    7. Blender 0
  4. Allgemeine Tipps und Tricks 3
  5. Level Editor Lexikon 107
    1. Tomb Editor 1
    2. Tools 3
      1. TREP/FLEP 3
      2. WADMerger 0
      3. Strpix 0
    3. NGLE/LE 97
    4. Allgemein 6
      1. WAD Slots 5
    5. NGEngine 0
  1. Privacy Policy
  2. Contact
  3. Legal Notice
Lexicon 7.1.17, developed by www.viecode.com
Powered by WoltLab Suite™ 6.1.18
TRLevel.de in the WSC-Connect App on Google Play
TRLevel.de in the WSC-Connect App on the App Store
Download