Complete Trigger Documentation

Learn about tips or tricks with the level designer.

Complete Trigger Documentation

Postby AwesomeJRFD » Mon Jul 21, 2014 3:37 am


An Explanation of Triggers
By AwesomeJRFD and Raz





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

Image
This is a trigger panel. With it you can make cool stuff happen, like moving items, weather, teleportation, and some other cool effects.


Advanced users have made:
Item shops
Calculators
Remakes of classic games
Bosses
And a bunch of other cool stuff.






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 use variables, which are a letter or word that stores an integer number.

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.


Triggers run at 128 functions per frame.




Vocabulary:


Words and phrases that will be used in this tutorial:
WordDefinition
TriggerAn executable, programmable, series of events in Last Legacy.
FunctionA trigger event which does something.
CompilerProgram which goes through each function in order, and runs them one at a time.
ThreadThe series of events in a trigger which are read by the compiler. They can be started, paused, or stopped at any time. Multiple threads from different triggers can be running at once.
VariableText that stores a value. That value can be changed at any time.
TagA "name" that you can give an item.
CoordinatesX and Y position of a tile or item in the level.
CameraThe portion of the level which is currently being displayed.





Trigger Types:


TypeDescriptionItems
onHitActivates when the player touches the item in which the trigger is running from.Invisible Hitbox, Basic Platform, Block, Planet
onPressActivates when a button is pressed.Push Switch
onDefeatActivates 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
onReadActivates when a sign is read.Wooden Sign (readable), Small Wooden Sign (readable), Hanging Sign (readable), Engraved Stone Tablet
onCollectActivates when the item is collected.Square, Super Square, Small Heart, Large Heart
onTalkActivates when an NPC is talked to.NPC, NPC - Old
onOpenActivates when a chest is opened.Openable Treasure Chest
onTurOnActivates when a switch is turned on.Electric Switch, Lever Switch
onTurOffActivates 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 and Super Mario 63, the opposite is true, as shown in this picture:
Image


There are two kinds of coordinates:


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


Item Coordinates:


Each Tile Coordinate is 32 Item Coordinates. Each grid space is 32 * 32 Item Coordinates.

When moving stuff using triggers:
TypeDescription
AbsoluteSet the exact values.
Sets the item's x/y to that.
RelativePositive 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 "Bob", and have a trigger function move items with the tag "Bob" 64 Item Coordinates along the X axis, that Enemy Crab you tagged "Bob" will move 64 Item Coordinates along the X axis.

- Multiple items can have the same tag.
- "this" and "self" refer to the item in which the trigger was activated.

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:
TypeDescription
LocalLocal vars begin with a character (a-z, A-Z, 0-9), and are only accessible by the trigger they were initialized in.
GlobalVars with the prefix "g_" are global (accessible to other triggers and remain across level splitters).
StaticVars 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:


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.


Image
Image
Image
Image
Image
Image
Image
Image
Image

Function List:


ImageFlow Control
"Flow Control" functions are for altering how the code runs and the order in which the compiler reads it.

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

SymbolMeaning
==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


ImageGo to
The compiler will skip to the line you specify when this command is run.

Jump and continue executing code from input line.

ImageSleep
This 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)

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


ImageExit
Stops the trigger.

Will stop this thread immediately.

ImageSleep until not touched
Pauses 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:

ParameterDescription
offDurationSleep 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.
timeOutSame 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.


Sleep until on ground
This will stop the compiler at the current line until the player touches the ground.

Will sleep thread until the player is touching the ground.




ImageMath
In the "Math" section, you can manipulate variables using calculations.

ImageSet
Will set a variable to a specified number or variable.

Sets a given var to an integer or value of another var.

ImageAdd
Will set a variable to the sum of two numbers or variables.

Sets given var to sum of 2 ints/vars (a = b + c).

ImageSubtract
Will set a variable to the difference of two numbers or variables.

Sets given var to difference of 2 ints/vars (a = b - c).




ImageGame
In the "Game" section, you can find various functions which alter gameplay.

ImageGravity
Changes 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.

ImageTime control
Slows 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

ImageBegin Cinema
Activates 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.

ImageEnd Cinema
Stops Cinema Mode and game returns to normal.

Will turn off cinema mode

ImageMove Camera
Moves 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 item
You 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.

ImageCamera Off
Resets camera to player and default zoom.

Resets the camera back to default settings of 100% zoom, 0 offset from character.

ImageSet Music
Changes 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.

Play Sound
Plays a specified sound from the game.
- Go to the Complete ID List 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.

ImageMove Character
Moves 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.




ImageWeather
In the "Weather" section, you can find various weather effects.

ImageSet Rain
Make 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.

ImageSet Snow
Let it snow with a specified strength.

Changes the strength of snow. Set it to 0 to turn off snow.

Set Darkness
Creates 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.

Spawn Earthquake
Causes an earthquake with the specified magnitude/strength and duration.

Shakes the screen




ImageText
The "Text" section includes various ways of displaying text.
-Some HTML 4 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)

ImageScreen Text
Displays 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.

ImageSubtitle Text On
A 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.

ImageSubtitle Text Off
Turns off the subtitle currently being displayed from that trigger.

Removes any subtitle text this thread attached.


Dialog Text
Same 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.




ImageItem
Various functions (Currently only 1) for manipulating items can be found in the "Item" section.

ImageMove Item
Moves 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.

Scale Item
Alters 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.

Teleport Enemy
Teleports 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.

Create Item Drop
Spawns an item at specified coordinates or coordinates relative to specified item.
- Go to the Complete ID List 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.

Dissolve Effect
Pauses 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.

Set Color
This trigger has yet to be programmed




ImageTile
Various functions (Currently only 1) for manipulating tiles can be found in the "Tile" section.

ImageEdit Tiles
Changes 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)




ImageSpecial
The "Special" section includes various functions for controlling other Triggers and Platforms.

ImageTurn On Trigger
Enables 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).

ImageTurn Off Trigger
Disables 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).

ImageActivate Trigger
Activates 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).

ImageStop Trigger
Stops a specified trigger if it is running and also disables it (use "Turn On Trigger" right after to enable it again).

If given the tag of a currently-running trigger thread, will immediately stop it.

ImagePlay Platform
Specified 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).

ImagePause Platform
Pauses 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.

ImageReset Platform
Moves 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).




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:


Open Shop:
Code: Select all
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: Select all
llitem:6;0;0;64;64;0;1;openenchant

Opens the Enchanter.

Set Post Filter:
Code: Select all
llitem:6;0;0;64;64;0;1;setpostfilter,0

Runouw wrote:I've decided to reveal an unfinished trigger function because it's going to be useful to many people.

This isn't an official feature in the game yet because it's a non-essential function. The flashplayer games are meant to load quickly and post-effects like rain, snow, and global color transforms were deemed "too laggy" of a feature to put in the core story levels. Also, programming the menus for it in the level designer is very taxing on time when development needs to be spent on more important things.

Anyway, for those of you who like code editing, here is the Set Post Filter function.
Code: Select all
llitem:6;322;1451;64;64;0;1;setpostfilter,100/100/100/100/0/0/0/0/0/0/-100/0

This example uses a saturation = -100, which turns the whole level monochrome.

The order of the color modifiers are the following (all require a "/" to separate them):
  • redMultiplier
  • greenMultiplier
  • blueMultiplier
  • alphaMultiplier
  • redOffset
  • greenOffset
  • blueOffset
  • alphaOffset
  • brightness
  • contrast
  • saturation
  • hue
For reference, the values do the same exact thing as if you applied a color transform an item, but instead, it applies it to the whole screen.


Semaphore V:
Code: Select all
llitem:6;0;0;64;64;0;1;v

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

Semaphore P
Code: Select all
llitem:6;0;0;64;64;0;1;p

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




Anything we missed? Please tell us!
Last edited by Supershroom on Mon Mar 21, 2016 2:52 pm, edited 5 times in total.
Reason: Fixed info for "Stop Trigger" function.
ImageImage
User avatar
AwesomeJRFD
 
Posts: 101
Joined: Mon Jul 21, 2014 2:42 am
Location: Sixteenth Dimension: Hyperspace

Re: Complete Trigger Documentation

Postby Triple J » Sat Sep 06, 2014 9:24 pm

AwesomeJRFD wrote: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).
I was looking at the level code for Dimension 3 - the snowy one with those "jump pads" - and I noticed how the pads have a function sending the compiler to read a "//comment" function (reading "End"). Does this act any differently than sending it to read an "Exit" function [in the same case]?
(I'm thinking maybe it allows the functions to keep working after it reads a comment instead of "Exit," such as NPCs still being possible to talk to afterwards? Or not?)
Image
My biggest Last Legacy project!
It all comes together right here!
Join the fun and make the list!
User avatar
Triple J
 
Posts: 348
Joined: Wed Aug 13, 2014 6:46 pm
Location: Withheld.

Re: Complete Trigger Documentation

Postby -BY » Sat Sep 06, 2014 10:31 pm

You can completely disregard comment functions for the trigger compiling. They're litereally just there, to set markers for yourself and other people, if you happen to work in a team.

The Exit function, simply marks the end of a trigger. I do think, the exit function itself isn't always needed, as the trigger should exit itself, once it's reaching the end of the execution.
(So no. Shouldn't be that much of a difference between these two versions)

However. It's a more clean solution and gives full controll over the execution's end as you can force it to end in whatever line you'd want it to.
(I'd say go for exit all the way, whenever you want to actually exit the trigger.)
User avatar
-BY
 
Posts: 71
Joined: Sat Aug 02, 2014 12:06 am
Location: Behind the scenes

Re: Complete Trigger Documentation

Postby Triple J » Sat Sep 06, 2014 11:03 pm

Oh, derp. I had totally forgotten that you can make it so the "Exit" function doesn't mess with NPCs. Thanks, though.
Image
My biggest Last Legacy project!
It all comes together right here!
Join the fun and make the list!
User avatar
Triple J
 
Posts: 348
Joined: Wed Aug 13, 2014 6:46 pm
Location: Withheld.

I dont understand.

Postby dream03 » Wed Nov 05, 2014 11:45 am

Ok im not saying this is a bad guide!! But i just dont understand. Can you please tell me how to unlock a door using a lever?
dream03
 
Posts: 1
Joined: Wed Nov 05, 2014 10:49 am

Re: Complete Trigger Documentation

Postby -BY » Sat Nov 08, 2014 4:55 pm

dream03 wrote:Ok im not saying this is a bad guide!! But i just dont understand. Can you please tell me how to unlock a door using a lever?


May be a bit too late already, but I don't think there's an actual trigger for unlocking doors. (If there's something like this, feel free to correct me). I'd probably exchange the locked door with an unlocked version of the same door, the moment you'd use that lever. Hide the unlocked door in a place, the player cannot see and move it to the absolute coordinates of the locked door. You may now also remove the locked door to the unlocked ones origin position or simply leave it at it's current position, as none would ever see it. (As long as you get sure that the layers of both doors work correctly, though.)
User avatar
-BY
 
Posts: 71
Joined: Sat Aug 02, 2014 12:06 am
Location: Behind the scenes

Re: Complete Trigger Documentation

Postby FARTtheBean » Sat Mar 14, 2015 6:35 pm

-BY wrote:
dream03 wrote:Ok im not saying this is a bad guide!! But i just dont understand. Can you please tell me how to unlock a door using a lever?


May be a bit too late already, but I don't think there's an actual trigger for unlocking doors. (If there's something like this, feel free to correct me). I'd probably exchange the locked door with an unlocked version of the same door, the moment you'd use that lever. Hide the unlocked door in a place, the player cannot see and move it to the absolute coordinates of the locked door. You may now also remove the locked door to the unlocked ones origin position or simply leave it at it's current position, as none would ever see it. (As long as you get sure that the layers of both doors work correctly, though.)

Awww, I was looking for a way to unlock door w/o moving. :cry:
FARTtheBean
 
Posts: 6
Joined: Thu Feb 26, 2015 10:49 pm

Re: Complete Trigger Documentation

Postby tarnrazar » Sat May 16, 2015 12:34 am

I wish I knew how to make those "Town" screen text cinemas in my level... there's a small outpost in it that needs it...
tarnrazar
 
Posts: 3
Joined: Thu May 14, 2015 12:08 pm


Return to Tutorials

Who is online

Users browsing this forum: No registered users and 1 guest

cron