Triggers Guide

From Last Legacy Wiki
Revision as of 03:19, 17 May 2015 by Runouw (Talk | contribs) (Tags)

Jump to: navigation, search

From AwesomeJRFD's Trigger's Guide

An Explanation of Triggers

By AwesomeJRFD and Raz

Have you seen this screen when opening a trigger item's properties?

An empty triggers tab


Triggers are an event based

This is a trigger tab. With it, you can manipulate items, the weather, the camera, and even the player to enable advanced functionality in your level.

Users have made the following with triggers:

General

Triggers are an ASM based event system. This means that when a trigger is activated (by touching it, pressing it, killing an enemy, collecting coins, etc), it runs each function (event) from top to bottom in order. They can use variables, which are are numbers that can be stored by name.

Runouw wrote:

At the moment there are about 37 trigger functions in total to pick from. Triggers are meant to function very similar to ASSEMBLY code and each instruction occurs immediately after the previous one finishes executing. You are now able to pick instructions that do branching and goto statements and set global and local variables which let you make really advanced levels.


When a trigger completes its last function, it stops executing. Triggers have a limit of 128 functions per frame. After which, it continues executing the trigger the next frame.

Vocabulary

Words and phrases that will be used in this tutorial:

Word Definition
Trigger An executable script in Last Legacy played in the trigger's thread.
Function A command that a trigger can execute. It can be an action method, a sleep method, or a branch method.
Script A series of functions, played in order with branching and conditionals.
Thread Abstract holder for scripts that execute them. They can be started, paused, or stopped at any time. Multiple threads from different triggers can be running at once.
Variable Values that are stored by a textual name. That value can be changed at any time.
Tag A name that you can give an item. Trigger functions can reference items by their tag.
Coordinates X and Y position of a tile or item in the level.
Camera The portion of the level which is currently visible.

Trigger Types

Type Description Items
onHit Activates when the player touches the item in which the trigger is running from. Invisible Hitbox, Basic Platform, Block, Planet
onPress Activates when a button is pressed. Push Switch
onDefeat Activates when an enemy is killed. Enemy Crab, Enemy Mushroom, Grock, Enemy Wolf, Enemy Fire Mage, Enemy Electric Mage, Enemy ??? Mage, Enemy Ice Mage, Enemy Dark Mage, Enemy Specter A, Enemy Specter B, Enemy Specter C, Enemy Specter D, Enemy Specter, Enemy Dark Beast, Enemy Knight, Enemy Powerful Knight, Enemy Really Powerful Knight, Delta Phantom Boss, Boss
onRead Activates when a sign is read. Wooden Sign (readable), Small Wooden Sign (readable), Hanging Sign (readable), Engraved Stone Tablet
onCollect Activates when the item is collected. Square, Super Square, Small Heart, Large Heart
onTalk Activates when an NPC is talked to. NPC, NPC - Old
onOpen Activates when a chest is opened. Openable Treasure Chest
onTurnOn Activates when a switch is turned on. Electric Switch, Lever Switch
onTurnOff Activates when a switch is turned off. Electric Switch

Coordinates

You may have learned that in a coordinate plane, Y values increase as they go up. In programming, and therefore in Last Legacy, the opposite is true, as shown in this picture:

coordinates.gif

There are two kinds of coordinates
  • Item Coordinates
Each Item Coordinate is a pixel. For reference, the player is 47 pixels tall, and a tile is 32x32 pixels.
  • Tile Coordinates
Each unit shown on the in-game grid is a Tile Coordinate and tiles are aligned to them. You can toggle the visibility of the grid in "View -> Display Grid".

To calculate a tile coordinate from an item coordinate, multiply the coordinates by 32. Inversely, to calculate an item coordinate from a tile coordinate, multiply the coordinates by 32.


When moving stuff using triggers:

Type Description
Absolute Set the exact values. Sets the item's x/y to that.
Relative Positive numbers will be added on to the current value. Negative numbers will be subtracted from the current value. Increases it by x/y.

Tags

Tags are "names" you can give to items. You can use them to identify specifically which items you want a trigger function to act upon.

For example, if you tag an enemy Crab as "Bob", then you can refer to it with the Move Items function. This would allow you to teleport the enemy wherever you specify when the Move items function is activated.

  • Multiple items can share the same tag.
  • "this" and "self" refer to the item that the current trigger belongs to.

In a function, Copy the tag from another item to reference/do something with it here.

Variables

Stores 32bit integer value (-2147483648 through 2147483648. If you go past the limit, the value will wrap around).

Types of Variables

<thead> </thead>
Type Description
Local Local vars begin with a character (a-z, A-Z, 0-9), and are only accessible by the trigger they were initialized in.
Global Vars with the prefix "g_" are global (accessible to other triggers and remain across level splitters).
Static Vars with the prefix "s_" are global, and do not reset when the player dies and respawns.

Special global variables

  • "g_COINS" = Amount of Squares collected.
  • "g_PLAYER_NAME" = Player's name. Only works in Story Mode levels since there is no way to change it in the designer. "Hero" by default.

Functions:

<a href="#aaatop">Top^</a>

<img src="xzTXmzs.png" alt="Image">Press this "Add New Function" button to add a function, and you will be presented with a drop-down menu that looks sort of like the one below. Click on a button to see what type of functions are listed in that category.<a href="#aaa1"><img src="NEQh99r.png" alt="Image"></a><a href="#aaa2"><img src="ow8C8ua.png" alt="Image"></a><a href="#aaa3"><img src="b74lQiL.png" alt="Image"></a><a href="#aaa4"><img src="j3aABKG.png" alt="Image"></a><a href="#aaa5"><img src="sZi5sZx.png" alt="Image"></a><a href="#aaa6"><img src="zZobJt4.png" alt="Image"></a><a href="#aaa7"><img src="gCqpoxa.png" alt="Image"></a><a href="#aaa8"><img src="upG81JW.png" alt="Image"></a><a href="#aaa9"><img src="Wn3UXZ6.png" alt="Image"></a>Function List:

<a href="#aaatop">Top^</a>

<a name="aaa1"></a><img src="NEQh99r.png" alt="Image">Flow Control"Flow Control" functions are for altering how the code runs and the order in which the compiler reads it.<img src="MUbDxjZ.png" alt="Image">Branch If...The compiler will skip to the line you specify when this command is run if a specified variable meets certain conditions.If statement is true, will jump and continue executing code from input line. Otherwise ignores this function.

<thead> </thead>
Symbol Meaning
== Is equal to
!= Is not equal to
> Is greater than
< Is less than
>= Is greater than or equal to
<= Is less than or equal to

<img src="B2RB8lr.png" alt="Image">Go toThe compiler will skip to the line you specify when this command is run.Jump and continue executing code from input line.<img src="F2vdmaV.png" alt="Image">SleepThis will stop the compiler at the current line for a duration of the specified number of frames, then it will continue.- Changing the game setting so 60 frames per second will NOT change how sleep works.Will pause (sleep) this thread for X amount of frames (30 frames = 1 second)

<thead> </thead>
# of Frames Actual Duration
3 Decisecond
30 Second
1800 Minute
108000 Hour
2592000 Day
18144000 Week
77760000 Month (30 days)
946080000 Year (non leap year)
9460800000 Decade (no leap years)
94608000000 Century (no leap years)
946080000000 Millenium (no leap years)

<img src="VvQ76rm.png" alt="Image">ExitStops the trigger.Will stop this thread immediately.<img src="vU9o7Ht.png" alt="Image">Sleep until not touchedPauses the compiler at this line until the player is no longer touching the item from which the line is run.- onHit triggers only.Invisible Hitboxes:Will pause (sleep) this thread until player is no longer touching this.Platforms:

<thead> </thead>
Parameter Description
offDuration Sleep until the player is no longer touching the platform, and then for a specified amount of frames after that.Number of frames after player jumps off platform and before this thread is awakened. If 0, then relies solely on timeOut (below) to control when to awaken.
timeOut Same as normal sleep, but if it is -1 and the platform has a custom path, it will sleep until the platform reaches the end of its path.Number of frames after start of this thread's sleep and until this thread is forced awake. If -1 and uses a custom path, then will awaken at end of path. If 0, then relies of offDuration (above) to control when to awaken.

Will pause (sleep) this thread until:timeOut#-of-frames pass OR: offDuration#-of-frames pass after player jumps off platform.<a href="pnn756S.png" target="_blank"><img src="pnn756S.png" width="306" height="35" border="0"></a>Sleep until on groundThis will stop the compiler at the current line until the player touches the ground.Will sleep thread until the player is touching the ground.

<a href="#aaatop">Top^</a>

<a name="aaa2"></a><img src="ow8C8ua.png" alt="Image"><a name="aaa2"></a>MathIn the "Math" section, you can manipulate variables using calculations.<img src="flP00z3.png" alt="Image">SetWill set a variable to a specified number or variable.Sets a given var to an integer or value of another var.<img src="3S31zOV.png" alt="Image">AddWill set a variable to the sum of two numbers or variables.Sets given var to sum of 2 ints/vars (a = b + c).<img src="GI9K95D.png" alt="Image">SubtractWill set a variable to the difference of two numbers or variables.Sets given var to difference of 2 ints/vars (a = b - c).

<a href="#aaatop">Top^</a>

<a name="aaa3"></a><img src="b74lQiL.png" alt="Image">GameIn the "Game" section, you can find various functions which alter gameplay.<img src="9rO0tp1.png" alt="Image">GravityChanges the orientation of the player's gravity to the specified angle.- Gravity strength is not implemented as of the current version.- Only affects the player.Will set universal gravity to new variables input in this function.<img src="e5bm6Q6.png" alt="Image">Time controlSlows down game events and animations to a specified percentage.- WARNING: ONCE SET, IT WILL STAY SET WHEN EXITING THE LEVEL UNTIL IT IS SET BACK TO 100.- Does not affect "Sleep" function.Changes the speed of time to the percentage given<img src="f7qviqm.png" alt="Image">Begin CinemaActivates Cinema Mode, in which the player is frozen, but everything else moves normally.- Useful for cutscenes.Will change the gameplay to cinema mode. Character is paused/cannot be controlled/hurt, time flow is not affected.<img src="PxnPWj0.png" alt="Image">End CinemaStops Cinema Mode and game returns to normal.Will turn off cinema mode<img src="LC3mKx1.png" alt="Image">Move CameraMoves the camera to specified absolute or relative coordinates.- Relative coordinates do not work currently.If "use tag"" is checked, Instead of using x and y coordinates, will lock onto given item (and will follow if the item moves). x and y will specify the relative offset from itemYou can also set Absolute Zoom (50% = zoomed out) (50% - 400%) or Relative Zoom (-50% = zoomed out) (-50% - 300%)."Speed:" (Speed easing factor) will determine how quickly or slowly the camera moves to its new position. Higher numbers means slower movement (1 = instant).Recenters camera to specified location.<img src="oSOl0wA.png" alt="Image">Camera OffResets camera to player and default zoom.Resets the camera back to default settings of 100% zoom, 0 offset from character.<img src="V3lR32l.png" alt="Image">Set MusicChanges music to specified theme.- You cannot skip to a different point in a current song. You must set the music to "(no music)" and change back to change position in a song.- "Start Position: " defines at which point of the song to start playing. It currently only takes integers.List of music:

  • (no music)
  • Adventure Theme
  • Void Meadow
  • Cathedral
  • Charge
  • Desert Castle
  • Boss Battle
  • Amyxo
  • Espionage
  • Final Break
  • Icy Dungeon
  • Marcia Minor
  • Desert Theme
  • Techno Cave
  • Twisted Polka
  • Winter Theme
  • Smooth Jazz
  • In a Spirit's Presence
  • Sanctuary Echo - A capella
  • Sanctuary Echo - Orchestral
  • Inspirational Rock
  • Dark March
  • Ambient Wind SFX Loop
  • Final Theme
  • Town Theme - Valtameri
  • Overworld
  • Overworld - Piano
  • Gflat March
  • Floating Digital Clouds
  • Lava

Changes current background music.<a href="yfCYZro.png" target="_blank"><img src="yfCYZro.png" width="306" height="34" border="0"></a>Play SoundPlays a specified sound from the game.- Go to the <a href="http://runouw.com/forums/viewtopic.php?f=53&t=42110#p249172" class="postlink">Complete ID List</a> for a list of all of the sounds you can currently play using this trigger.- You can also specify the volume, from 0.1 to 3.0.Plays the Sound Effect.<img src="68fSj8E.png" alt="Image">Move CharacterMoves the player to specified absolute or relative coordinates.Can also set absolute or relative speed.- Relative xspeed does not work currently.Moves (teleports) the main character.

<a href="#aaatop">Top^</a>

<a name="aaa4"></a><img src="j3aABKG.png" alt="Image">WeatherIn the "Weather" section, you can find various weather effects.<img src="5OyCsLK.png" alt="Image">Set RainMake it rain with a specified strength.- Warning: This function is leaky and you may get wet.Changes the strength of rain. Set it to 0 to turn off rain.<img src="E9v55MG.png" alt="Image">Set SnowLet it snow with a specified strength.Changes the strength of snow. Set it to 0 to turn off snow.<a href="nfSSaq8.png" target="_blank"><img src="nfSSaq8.png" width="306" height="33" border="0"></a>Set DarknessCreates a darkness effect with a specified strength.- There is a circle of light around:

  • Player
  • Delta Orb (+ rolling)
  • Delta Negate Orb (+ rolling) (less light than Delta Orb)
  • Weapon/turret projectile
  • Enemies (not dependent on size)
  • Torch
  • Brick Fireplace
  • Invisible Light Source

Adds a darkness effect that makes it difficult to see from far away from the character.<a href="bQ0zjhS.png" target="_blank"><img src="bQ0zjhS.png" width="306" height="35" border="0"></a>Spawn EarthquakeCauses an earthquake with the specified magnitude/strength and duration.Shakes the screen

<a href="#aaatop">Top^</a>

<a name="aaa5"></a><img src="sZi5sZx.png" alt="Image">TextThe "Text" section includes various ways of displaying text.-Some <a href="http://en.wikipedia.org/wiki/HTML" class="postlink">HTML 4</a> is allowed.- {$g_VARIABLENAME} in a text box with the a global variable in place of "g_VARIABLENAME" will display that global variable.Known working HTML tags (Stuff in brackets "[]" are known working parameter types. Known working parameters are separated by "|"):

  • <p [align="left|center|right"]></p>
  • <b></b>
  • <i></i>
  • <u></u>
  • <font [size="" width="" color="" face=""]></font>
  • <a [href="" target="_blank" letterspacing=""]></a>
  • <img [src="" width="" height=""]></img> (currently broken)

<img src="N23pTqJ.png" alt="Image">Screen TextDisplays text similar to the way signs display text. Freezes the character.- Type (0-12) determines the color and texture of the background behind the text.Pauses character and attaches text covering the screen.<img src="Ol9Zkpj.png" alt="Image">Subtitle Text OnA text covers the screen that does not pause the character. Can be in different parts of the screen.- Type (0-3) determines the position of the subtitle on the screen.- "Alpha:" determines the opacity of the white background behind the text.- Turns off when trigger runs out.Does not pause character. Will remain until "subtitle off" is called the thread ends. Only 1 subtitle per thread/trigger can be active at once.<img src="DI0PklJ.png" alt="Image">Subtitle Text OffTurns off the subtitle currently being displayed from that trigger.Removes any subtitle text this thread attached.<a href="OhslyPD.png" target="_blank"><img src="OhslyPD.png" width="306" height="35" border="0"></a>Dialog TextSame as Screen Text, but displays as a dialog at the bottom of the screen, so you can still see the level.Pauses character and shows dialog.

<a href="#aaatop">Top^</a>

<a name="aaa6"></a><img src="zZobJt4.png" alt="Image">ItemVarious functions (Currently only 1) for manipulating items can be found in the "Item" section.<img src="Dr9xZxR.png" alt="Image">Move ItemMoves a specified item to absolute or relative coordinates.- "Chars stick to" determines whether the player or enemies move with the item when standing on it. If a platform is moved, characters on it will move with it.Moves any items with the given linkage.<a href="BnykldF.png" target="_blank"><img src="BnykldF.png" width="306" height="35" border="0"></a>Scale ItemAlters the X scale, Y scale, and/or rotation of a specified item with absolute or relative values.- Only works on items that are already scaleable and rotatable.- Works on all disabled items.Changes the scaling and/or rotation of a rotatable/scale-able item with a given linkage.<a href="u0SmKmY.png" target="_blank"><img src="u0SmKmY.png" width="306" height="35" border="0"></a>Teleport EnemyTeleports the specified enemy to specified coordinates.Teleports an enemy with the given linkage. Absolute: sets the item's x,y to that. Relative: increases it by x,y.<a href="77Sdjds.png" target="_blank"><img src="77Sdjds.png" width="306" height="35" border="0"></a>Create Item DropSpawns an item at specified coordinates or coordinates relative to specified item.- Go to the <a href="http://runouw.com/forums/viewtopic.php?f=53&t=42110#p249172" class="postlink">Complete ID List</a> for a list of all of the item drops you can create.Creates an item drop at either x and y, or at given tag's position plus offset of x and y.<a href="ACnumZv.png" target="_blank"><img src="ACnumZv.png" width="306" height="35" border="0"></a>Dissolve EffectPauses the compiler for a specified number of frames, fades a specified item's alpha value to 1, then continues the compiler.- Sets the items alpha to 100 before it starts fading.- It is recommended to move the item away from the scene right afterwards, because it doesn't dissolve completely to 0, despite what the description says.Makes the item's alpha fade to 0.<a href="U17xIAo.png" target="_blank"><img src="U17xIAo.png" width="306" height="35" border="0"></a>Set ColorThis trigger has yet to be programmed

<a href="#aaatop">Top^</a>

<a name="aaa7"></a><img src="ly5r5jV.png" alt="Image">TileVarious functions (Currently only 1) for manipulating tiles can be found in the "Tile" section.<img src="CFFILYS.png" alt="Image">Edit TilesChanges a tile(s) at a specified location.- When in a tile layer, find the coordinates of the tile you want to change. Place the new tile somewhere, highlight it, and copy it. Go back to the trigger and paste the copied tile in the "tile data:" field.- "Back Layer" checkbox: If true, alters the tiles in the back layer.Select & Copy the new tiles and Paste into the tile data and then choose the x and y (in units of tiles, from to-left)

<a href="#aaatop">Top^</a>

<a name="aaa8"></a><img src="upG81JW.png" alt="Image">SpecialThe "Special" section includes various functions for controlling other Triggers and Platforms.<img src="sWGscgh.png" alt="Image">Turn On TriggerEnables a specified trigger to be activated.If given the tag of a trigger, will allow the trigger to be activated (does not actually activate it).<img src="LUxhi24.png" alt="Image">Turn Off TriggerDisables a specified trigger.If given the tag of a trigger, will prevent the trigger from being able to be activated again (Does not stop a currently running thread).<img src="vxdhhXQ.png" alt="Image">Activate TriggerActivates a specified trigger.- Does not matter whether that trigger is "on" or "off"If given the tag of a trigger, will activate the trigger's function (regardless of if it is on/off).<img src="DMPdyWq.png" alt="Image">Stop TriggerStops a specified trigger if it is running.If given the tag of a currently-running trigger thread, will immediately stop it.<img src="dWc9rC3.png" alt="Image">Play PlatformSpecified platform starts moving along its path if it's not already.If given the tag of a platform not in motion, will cause platform to move (if paused/not started moving).<img src="MIqtwMv.png" alt="Image">Pause PlatformPauses a specified platform at its current location.If given the tag of a platform in motion, will pause the platform in it's current place.<img src="o5EunU1.png" alt="Image">Reset PlatformMoves a platform back to its starting position and pauses it.If given the tag of a platform, will reset it back to the beginning (and pauses it there).

<a href="#aaatop">Top^</a>

<a name="aaa9"></a><img src="Wn3UXZ6.png" alt="Image">// comment"//comment" allows you to store a message in the trigger that has no effect on what the code does.Enter any desired comment here (has no effect outside level designer)."Secret" Functions:

<a href="#aaatop">Top^</a>

Open Shop:

Code: <a href="#" onclick="selectCode(this); return false;">Select all</a>
llitem:6;0;0;64;64;0;1;openshop,1

Opens the shop. You can change the shop type by changing the last "1" in the code above.Shop types:

  1. Default shop
  2. Empty shop
  3. Masamune shop
  4. Lightning Rod shop
  5. Winged Boots Shop

Open Enchanter:

Code: <a href="#" onclick="selectCode(this); return false;">Select all</a>
llitem:6;0;0;64;64;0;1;openenchant

Opens the Enchanter.Set Post Filter:

Code: <a href="#" onclick="selectCode(this); return false;">Select all</a>
llitem:6;0;0;64;64;0;1;setpostfilter,0

Gives the level a permanent green tint.Semaphore V:

Code: <a href="#" onclick="selectCode(this); return false;">Select all</a>
llitem:6;0;0;64;64;0;1;v

WARNING: DOES NOT WORK. WILL CRASH GAME IF OPENED.Semaphore P

Code: <a href="#" onclick="selectCode(this); return false;">Select all</a>
llitem:6;0;0;64;64;0;1;p

WARNING: DOES NOT WORK. WILL CRASH GAME IF OPENED.


Anything we missed? Please tell us!