Intermediate DragonSpeak tutorials

So you made it through the Beginner DragonSpeak tutorial and you're eager to tackle more concepts? You've come to the right place!

Here we cover a number of topics like how to mimic a Digo as a local species, use popup dialog boxes, track players carrying special items, use silent speech to your advantage, and even work with ambience, lighting, and screen shaking! You can find out more about how to use areas and timers more specifically, and also get overview on working with animation in DS!

Tip: If you are still a little shy with the editor or need a more hands on approach, don’t fret! We have an alternative tutorial for you! There's a full Dream Demo download you can follow along with in the Downloadable Dreams/DS section of the website, in addition to a step-by-step tutorial written alongside the page there. It will string together many concepts covered on this page so you can easily make an entire quest Dream!

This downloadable tutorial will help you make a quest, covering the following:

  • Mimic a Digo as a local species
  • Using pop-up dialog boxes
  • Carrying items
  • Silent Speech
  • Ambience
  • Lighting
  • Incorporating screen shaking/movement

Table of Contents

Areas

Area lines are incredibly useful for telling your DS where you want something to happen. In the Beginning DragonSpeak tutorial you saw how crucial they are, but now you can learn how to use more of these area lines to your advantage!

Multiple area lines in the same trigger

One of the most versatile features about area lines in DragonSpeak is the ability to specify multiple area lines within the same trigger. Let's say, for example, that we want to emit a message to anyone standing at the position with the X,Y coordinates (8,9), and you wish to emit an entirely different message to a furre standing at the position with X,Y coordinates (16,18).

Because of this ability to specify multiple area lines, we can do this through the use of a single trigger:

(0:31) When someone says {Where's the spot},
    (3:2) at position (8,9) on the map,
        (5:201) emit message {This is the hot spot!} to any furre present.
    (3:2) at position (16,18) on the map,
        (5:201) emit message {This spot is farther away :(} to any furre present.

With this script, when anyone says "Where's the spot", any player standing at 8,9 will receive one emit, while any player standing at 16,18 will receive a completely different one, all within one trigger!

It must be emphasized again that unlike filters, multiple area lines cannot be stacked together. When a new area line is used in a trigger, it replaces the previous one that was present within that same trigger.

Diamonds and rectangles, what are they?

The concept of diamond and rectangle area lines are amongst the oldest in DragonSpeak, but what they are supposed to represent in a Dream is not evident just from the name alone.

The shape of a Diamond in DragonSpeak can take the form of a rhomboid (or isometric plane square area) or a straight line, while a diamond in is defined through the use of two different parameters in any of the DragonSpeak lines that employ them: the Top X,Y Coordinate and the Bottom X,Y coordinate.


This diagram shows the potential shapes that a diamond can adopt. The tiles marked with a 1 represent the Top X,Y coordinate that forms part of the diamond, while the tiles marked with a 2 represent the Bottom X,Y coordinate of the diamond. This is important because both of the X,Y coordinates are necessary in order to be able to define a diamond-shaped area.

On the other hand, the shape of a rectangle in DragonSpeak is actually not entirely rectangle.. at least not in the conventional sense. You may have encountered rectangles before if you have ever used the Area Selection tool within the Dream Editor, as this tool employs the exact same shape to operate.

Much like in the case of diamonds, a rectangle in DS uses two different parameters: the Top X,Y coordinate and the Bottom X,Y coordinate:

Random locations combined with filters

If you've been perusing the Areas tab of the DragonSpeak Constructor, you may have already stumbled upon lines that let you specify a random spot, but also check for other certain conditions, like for instance an item being present.

Even though these areas let you specify only one condition at a time, such as:

(3:532) at a random spot somewhere in the Dream where the item is #, 

you can specify lots more conditions for a random spot to be selected, if you use filters.

For example, let's say we wanted to erase a random red pillow (Item 1) in our Dream, but only in places where the floor is black marble (Floor 157). In this scenario, we could use the following trigger:

(0:31) When someone says {Destroy a Red Pillow!},
    (3:532) at a random spot somewhere in the Dream where the item is 1,
        (4:1) only where the floor is 157,
            (5:4) place item 0.

With a filter included, now this trigger will select a random spot where the item is 1 and the floor is also 157. Combining random spot areas with filters like this lets you create much more accurate random spot triggers for your Dream!

The special (3:7) line

(3:7) wherever the triggering furre was at when the trigger activated,

This (3:7) area line is very similar to both (3:5) and (3:6) (mentioned below under DragonSpeak Lines), but it takes multiple factors into account:

  • If a player moves successfully into another tile, it works like (3:6) would, pointing towards the tile that the player moved into.
  • If a player is blocked from moving (either by moving into another player or an unwalkable location) it instead works like (3:5) would, pointing towards the tile that the player is currently standing at (since they didn't move from successfully).

In other words, this special line is essentially movement-compatible. It will pick the final position of the player after they move, whether they moved successfully or were blocked from moving.

DragonSpeak Lines
(3:5) where the triggering furre was at,
(3:6) where the triggering furre moved into,
(3:7) wherever the triggering furre was at when the trigger activated,

Mimic a Digo as a local species

Have you ever wanted to use a Digo in your own Dream? Any publically available official Furcadia avatar can be used and mimicked as a local species. But the best part is that you don't actually have to add it into your patch at all if you use mimic DS!

Mimic DS works with local species slots, only you don't have to manually put in an avatar file into the Dream's patch. A local species is a custom avatar or walkabout that you can use in your own Dream, and you get 22 slots for free! For more on how to set up customized avatar files in your Dream, feel free to check out the tutorial on using Local Species. This tutorial here on the other hand focuses on reusing Digo avatars sold on Digo Market in your own Dream, for free, using the mimic a digo DS.

To start with, we can use this trigger to set up the mimicked avatar:

(0:0) When everything is starting up,
    (5:1205) make localspecies # mimic the avatar #.

We can pick which local species slot we want to use in the first #, and then the second # we pick which Digo we want to use. As mentioned before, we have 22 local species slots to work with, so we can pick any of those. For this tutorial we'll use the first slot, so we'll put down 1 in place of the first # symbol.

Tip: If, for some reason, you find you need more than 22 local species in your Dream (that's already a ton!), then note that Group package owners and Sponsors get more slots as part of their perks!

We have the second # to adjust, now, and that's to pick which avatar we want to use. There are hundreds of Digos to pick from, and there's a full list at the DS Params page! If we wanted to use the Fluttercat, for instance, we would first check the DS Parameters page. There it's listed as avatar 168. Feel free to pick whichever digo you want to use. So your effect line should now look something like this:

(5:1205) make localspecies 1 mimic the avatar 168.

We've set up our mimic DS, but now we need to add a trigger that actually lets someone become the avatar. You can do this a number of ways, but let's say for now we want every person who enters the Dream to turn into the Fluttercat that we put in the local 1 slot. This is what that would look like:

(0:9) When someone arrives in the Dream,
    (5:1200) change the triggering furre to localspecies 1.

Finally, we can optionally give them a way to change back to their original selves. Here is one way that could look:

(0:31) When someone says {normal},
    (5:1202) change the triggering furre back to their original species.

DragonSpeak Lines

(5:1205) make localspecies # mimic the avatar #.
(5:1206) make localspecies # mimic the avatar #, with gender #.
(5:1207) disable mimicry on localspecies #.

Have you ever wanted to give your players an option to easily click yes or no, or show them a little notice that you can ensure they've read? You can use popup dialog boxes for that! These boxes are fully customizable as to what they can say, and not only are they great for getting your players' attention, they also reduce emit spam and are intuitive for players to see and use!

Popup dialog boxes have two forms: one version of them lets players click yes or no to a specific choice you write out for them, and the other type simply shows the player a message that the player can then click ok to.

Using the Ok popup box as a notice

So to show an example, let's say we want a popup box to tell the players who arrive what all they can do in the Dream. We'll use the popup dialog box DS to give them a message. Here's how:

(0:9) When someone arrives in the Dream,
    (5:900) popup an Ok button dialog with request number 1 and message {Welcome to Carl’s Tomato Stand. Bump the counter to buy a tomato. Also to those hooligans who keep stealing tomatoes, please stop!!!!} for the triggering furre.

The first area to edit in the effect line is where it says request number #. This is a type of label you can use to differentiate between other requests (i.e. if you have multiple pop up boxes, this is how you keep track of which is which). If you want to have multiple different messages at different points in time, you'll have to give them each their own number. We'll use the first slot for this, which is 1. Then in the {brackets} we put in our message (which you can customize to your heart's content).

Using a yes/no popup box

Similar to the ok popup box, you can send a message to the player as a yes/no version. However, you can also make all kinds things happen when a player selects yes to the question that you give them, and even more different things happen if the player clicks no.

Since we mentioned in our Dream entry popup box for people to buy a tomato, let's make it so something happens if they follow through and actually bump the tomato stand (we're using the default cart item 1310 for that).

(0:3) When someone moves into item 1310,
    (5:901) popup a Yes/No dialog with request number 2 and message {Buying a tomato?} for the triggering furre.

First we pop up the dialog box to present the question to people. This sets us up for two situations: one where the player says yes, and then another if they say no. We'll use two separate triggers to cover both scenarios.

(0:86) When someone clicks Yes for request number 2,
    (5:200) emit message {Carl says, "Thanks, I guess," but he still looks at you with suspicion.} to the triggering furre.

(0:87) When someone clicks No for request number 2,
    (5:200) emit message {Carl starts chasing you out of the stand, screaming, "You hooligan!!!!"} to the triggering furre.
    (5:18) move the triggering furre back where they came from.

DragonSpeak Lines

(0:85) When someone clicks Ok for request number #,
(0:86) When someone clicks Yes for request number #,
(0:87) When someone clicks No for request number #,
 
(5:900) popup an Ok button dialog with request number # and message {...} for the triggering furre.
(5:901) popup a Yes/No dialog with request number # and message {...} for the triggering furre.   
(5:910) popup an Ok button dialog with request number # and message {...} for any furre present.
(5:911) popup a Yes/No dialog with request number # and message {...} for any furre present.

The Limits

Popup dialog boxes can't have formatted text in them like emits do, so you can't bold, italicize, underline, or embed links.

Carrying items

To carry something with you, just stand over an item and click the get/drop button on your interface, or press F2. If that item is gettable (meaning its properties allows it to be picked up), you'll then start carrying that item with you!

With DS we can make things happen when a player picks up an item, or, even better, we can make the things players carrying be crucial for other actions to happen. For instance, what if you needed to pick up a golden key (item 422) off the ground in order to get through a mysterious door (wall 10)?

Not only can we give the player a hint once they pick up the key, we can create triggers for both scenarios that might happen: if they do have the key, they can get through the door. If they don't, we tell them the door is locked. Here is what both of these scenarios might look like played out in DS:

(0:17) When someone picks up item 422,
    (5:200) emit message {This key might be useful!} to the triggering furre.
(0:64) When someone (bumps into/moves through) wall 10, (1:1002) and they are holding item 422 in their paws,
(3:5) where the triggering furre was at,
(5:719) move and animate any furre present 2 step(s) forward (in the direction they're facing) if there's nobody already there. (0:64) When someone (bumps into/moves through) wall 10, (1:1004) and they are not holding item 422 in paws, (5:200) emit message {You're locked out, that's no fun!} to the triggering furre.

DragonSpeak Lines

(0:14) When someone picks up any item,
(0:15) When someone uses the get/drop command,
(0:17) When someone picks up item #,
 
(0:8) When someone drops any item,
(0:18) When someone drops item #,
(0:78) When someone tries to drop an item but fails,
(0:79) When someone tries to drop item # but fails,
 
(0:16) When someone uses any item,
(0:19) When someone uses item #,
 
(5:166) make it impossible to pick up or drop items in region #.
(5:167) allow getting and dropping items in region #.

Silent speech

Sometimes the things people say in a Dream are don't appear on the chat window.. but how? Well, there's a little trick called silent speech! Many Dream owners incorporate this for commands, but you can also use it for a magic word, or for interacting with NPCs, etc. Basically you pick out a prefix that you want to use, and any time that prefix is present at the beginning of a sentence or a word, that phrase will not be shown out loud.

In DS, first you have to set up the special prefix. Then you can make any phrase you like be silently spoken. If you want another certain thing to happen after a specific phrase is said, though, that'll be its own trigger. This is how one command might look in DS:

(0:0) When everything is starting up,
    (5:212) set silent speech prefix (for spoken commands) to {*}.
 
(0:31) When someone says {*secretfire},
    (3:5) where the triggering furre was at,
        (5:150) place overlay effect 50.

DragonSpeak Lines

(5:212) set silent speech prefix (for spoken commands) to {...}.

The Limits

You can use any symbols for silent speech except the dollar symbol $, percent sign % and tilde ~, which are reserved for other things in DS (Phoenixspeak, variables, and strings, respectively).

Ambience and lighting

Some Dreams have a visual vibe, or a mood about them, depending on the area. They achieve this with the ambience layer, a handy way for you to place colors or darks/lights over a whole area in your Dream to give it more of a feel. If you want a night sky ambience for instance, you could use Furrabian Night (ambience 1) and paint bucket it across your map.

Lighting works together with ambience, and is also a layer that is set on top of everything else in your Dream. Usually it works best if you add the ambience tiles to your Dream first before you add the lighting. Lighting (by default) works by cutting a hole around the ambience, though you can do a lot more with both layers if you're inventive!

For our example, use the paint bucket tool in DreamEd to fill your dream with ambience. Any will work, but we recommend ambience 1 (Furrabian Night). Then, since it's now dark in the Dream, we'll make it so whenever you walk around, a light will follow you!

(0:1) Whenever someone moves,
    (3:6) where the triggering furre moved into,
        (5:158) change lighting 0 to lighting 20.
    (3:5) where the triggering furre was at,
        (5:158) change lighting 20 to lighting 0.

Dream settings for ambience

Ambience has settings related to it per Dream. You can change how your ambience tiles look by going to:

Patches > Dream Settings…> Special Effects

From here you can toggle the drop down menu under Ambience Mode and choose from several different options:

  • Addition
  • Darken
  • Difference
  • Hard Light
  • Lighten
  • Multiply
  • Normal
  • Overlay
  • Screen
  • Subtract
  • Alpha
  • Erase

You can also change the opacity from 0 all the way to a solid 2147483645.

DragonSpeak Lines

Causes

(0:43) When someone moves into any space with ambience #,
(0:42) When someone moves into any space with lighting #,

Additional Conditions

(1:66) and the position they moved to has ambience #,
(1:67) and they (moved from/are standing in) ambience #,
(1:68) and position (#,#) has ambience #,
(1:166) and the position they moved to does not have ambience #,
(1:167) and they (didn't move from/aren't standing in) ambience #,
(1:168) and position (#,#) doesn't have ambience #,
(1:63) and the position they moved to has lighting #,
(1:64) and they (moved from/are standing in) lighting #,
(1:65) and position (#,#) has lighting #,
(1:163) and the position they moved to does not have lighting #,
(1:164) and they (didn't move from/aren't standing in) lighting #,
(1:165) and position (#,#) doesn't have lighting #,

Areas

(3:570) at a random spot within the rectangle (#,#) - (#,#) where the ambience is #,
(3:571) at a random spot that is onscreen for the triggering furre where the ambience is #,
(3:572) at a random spot somewhere in the Dream where the ambience is #,
(3:580) at a random spot within the rectangle (#,#) - (#,#) where the ambience is not #,
(3:581) at a random spot that is onscreen for the triggering furre where the ambience is not #,
(3:582) at a random spot somewhere in the Dream where the ambience is not #,
(3:590) at a random spot within the rectangle (#,#) - (#,#) where the lighting is #,
(3:591) at a random spot that is onscreen for the triggering furre where the lighting is #,
(3:592) at a random spot somewhere in the Dream where the lighting is #,
(3:600) at a random spot within the rectangle (#,#) - (#,#) where the lighting is not #,
(3:601) at a random spot that is onscreen for the triggering furre where the lighting is not #,
(3:602) at a random spot somewhere in the Dream where the lighting is not #,

Filters

(4:44) only where the ambience is #,
(4:45) only where the ambience is not #,
(4:42) only where the lighting type is #,
(4:43) only where the lighting type is not #,

Effects

(5:172) hide all ambience in region # from everybody.
(5:173) show ambience in region # to everyone that can see there.
(5:175) show ambience # in outdoor regions where effects are hidden, instead of what's really there.
(5:177) show ambience # in indoor regions where effects are hidden, instead of what's really there.
(5:225) place ambience #.
(5:226) set location (#,#) to ambience #.
(5:227) place ambience # where the triggering furre is.
(5:228) change ambience # to ambience #.
(5:229) swap ambience # and #.
(5:332) set variable # to the ambience type at (#,#).
(5:415) cycle the three ambience types in this sequence one step forward: #, #, #.
(5:416) cycle the four ambience types in this sequence one step forward: #, #, #, #.
(5:417) cycle the five ambience types in this sequence one step forward: #, #, #, #, #.
(5:451) jump the animation of all copies of ambience # in the Dream to step #.
(5:452) reset the animation of all copies of ambience # in the Dream.
(5:453) set the default animation delay of ambience # to # milliseconds.
(5:155) place lighting #.
(5:156) set location (#,#) to lighting #.
(5:157) place lighting # where the triggering furre is.
(5:158) change lighting # to lighting #.
(5:159) swap lighting types # and #.
(5:170) hide all lighting in region # from everybody.
(5:171) show lighting in region # to everyone that can see there.
(5:174) show lighting # in outdoor regions where effects are hidden, instead of what's really there.
(5:176) show lighting # in indoor regions where effects are hidden, instead of what's really there.
(5:331) set variable # to the lighting type at (#,#).
(5:405) cycle the three lighting types in this sequence one step forward: #, #, #.
(5:406) cycle the four lighting types in this sequence one step forward: #, #, #, #.
(5:407) cycle the five lighting types in this sequence one step forward: #, #, #, #, #.
(5:448) jump the animation of all copies of lighting # in the Dream to step #.
(5:449) reset the animation of all copies of lighting # in the Dream.
(5:450) set the default animation delay of lighting # to # milliseconds.

Timers

Have you wondered if you could automate certain events in your Dream to occur automatically on their own, or even every once in a while, without needing a person to do anything in your Dream? Or maybe you'd prefer for it to go off based on a certain time of day. Or perhaps you do want something to cause another thing to happen, but you need a small delay before it fires.

All of these exciting things (and more) are possible through all the different variations of timers that there are!

Routine emits

We'll start with the very first timer concept: routine triggers. This is useful for anything you want to have happen occasionally, without needing anyone to do anything in your Dream for it to occur. All you need for it to occur is for a certain amount of time to pass.

In our example, we'll make a message be emitted to everyone in the Dream every now and then:

(0:100) When 1800 seconds have passed, offset by 0,
    (5:204) emitloud message {We hope you're enjoying your stay in the Luxurious Resort Dream! Thank you for your patronage!} to everyone on the map.

The (0:100) line is fairly self-explanatory (well, except for the offset part, but we'll get to that in the next part. Just ignore that for now.) Basically, what happens is every time 1800 seconds (30 minutes) pass, the message "We hope you're enjoying your stay in the Luxurious Resort Dream! Thank you for your patronage!" will be emitted to anyone currently in your Dream.

The (0:100) line only works by using seconds as the values of both of its parameters, but minutes and hours can be converted to seconds easily with the help of online tools or a calculator. Just multiply your intended hours x 3600 to get the hour equivalent in seconds, or minutes x 60 to get the minute equivalent in seconds.

How offsets work

Now that we get the gist, it's time to explain the offset parameter. Imagine, for example, that you have two completely different triggers set to both happen every 30 seconds. Well, without an offset, both of them would happen at exactly same time. Sure, this is desirable in some situations, but not always.. So that's why the offset parameter exists.

By specifying a value in seconds as an offset, DS will wait for that amount of seconds before setting off the trigger. So, if you wanted to have two timers that both happen every 30 seconds, but you gave one of them an offset of 1, and the other an offset of 0... the one with the offset of 1 would occur exactly 1 second after its 0 offset counterpart.

Pinpointing a specific time

Now we'll take a look at the second type of timer that available: time! This relies on the current time in FST (Furcadia Standard Time is covered more in depth on this page), which is super useful if you want things to happen at a specific time in the day. You can also use it like the (0:100) line from before, as we'll also show.

Routine emits for a time of day

Let's say you wanted a routine announcement meant to go off only in the morning. This is done with a specific time of day, instead of relying on the varying time after the Dream was uploaded to determine when triggers go off. We'll set our announcement to occur at every day at 10am FST. Here's what that looks like:

(0:101) When the time is 10:00 FST,
    (5:204) emitloud message {Good morning everyone!} to everyone on the map.
Routine emits every minute or hour

This works very similarly to the (0:100) When 1800 seconds have passed DS line that we mentioned earlier on, except that it relies on standard time, instead of starting when the Dream was uploaded.

As an example, what if we wanted to emit the current time every time half an hour pases in real time, similar to the Beekin the Help Dragon statue in Naia Green? This is what that would look like:

(0:101) When the time is 99:30 FST,
    (5:204) emitloud message {The current time is [NICETIME].} to everyone on the map.

The (0:101) line has two slots for numbers, #:#. The first accepts numbers 0 to 23 (meaning 12am to 11pm) to represent hours. The second slot accepts 0 to 59 for minutes.

There is one exception: both these slots also accept 99. This number is kind of like an "any" wildcard. If it's substituted for hours, DS understands that you want any hour, as long as the minutes matches the current time. Conversely, if used for minutes, then you're wanting it to happen any minute, as long as the hour matches the current time.

We used 99 in the hours slot so that this emit goes off whenever 30 minutes of any hour has passed!

Tip: The text replacement [NICETIME] was used to display the time in readable text. If you're curious, you can find a bigger list of these text replacements here.

Countdown timers

Countdown timers are a timer that basically pauses the action that's about to happen for a specified amount of seconds, and then fires off the effects.

These are useful for a variety of things, including things like "ready, set, go!" messages with pauses in between if you're about to start a game, or maybe for two NPCs to host a conversation, but you want them to wait a few moments in between the snippets of text to let the reader follow along. Or you can even use it for fun visuals, like having your entire gamescreen get caught on fire, and only after 15 seconds of the maelstrom does a deluge of rain appear. Fun being arbitrary, here.

For our example, let's make a restricted keyword for the Dream owner to announce when a new version of the Dream is up. But since we want to leave them enough time to exit and reupload the Dream, we'll give the players a small delay before they hear that announcement.

Here's what that might look like:

(0:31) When someone says {Dream Reset},
    (1:10) and they are the Dream owner,
        (5:50) set countdown timer 1 to go off in 60 seconds.
 
(0:50) When countdown timer 1 goes off,
    (5:204) emitloud message {This Dream has been reuploaded! Please exit the Dream and go back to the upload location!} to everyone on the map.
    (5:2000) reset the Dream and kick all the players out.

So if the Dream owner says the phrase Dream Reset out loud, everyone else will get the announcement after a whole minute has passed!

The (5:50) line is what makes our countdown timer begin counting down. By default it has two places to put numbers in: the countdown timer #, and the # seconds number. You can think of the first number as a way to identify which timer you're going to use. It's a sort of label (but it only uses numbers) that lets you differentiate one timer from another. We set it as timer 1!

Meanwhile, the # seconds part lets you adjust how long you want that timer to wait before going off, and we chose 60 seconds.

Now we'll look at the follow up (0:50) line. You need this line if you want the (5:50) line have anything happen later. Basically the (0:50) line is responsible for making all the corresponding effects go off that you want to have happen. And, this is where your countdown timer labeling comes in handy: since we chose timer 1, we'll repeat countdown timer 1 in this section.

Okay, so we've made our countdown timer, and now it's ticking... Could there be a way to stop it while it's counting down? Of course! You can do this with any countdown timer by setting it to go off in 0 seconds:

(0:31) When someone says {Cancel Dream Reset},
    (1:10) and they are the Dream owner,
    (1:94) and timer 1 is still counting down,
        (5:50) set countdown timer 1 to go off in 0 seconds.

Note: While this trigger will work fine if your countdown timer is still ticking down, it won't do anything if the timer has already completed, or if it hasn't started yet.

Triggering furre vs any furre present

One important distinction in DS that's related to timers and using time is when a DS line mentions triggering furre or any furre present. For example, the following lines are almost identical:

(5:8) play sound # to the triggering furre.
(5:9) play sound # to any furre present.
(5:31) play midi # to everyone on the map.

The difference between them is related to how the DS lines are triggered.

Certain DS cause lines have no person that did any action. For instance, if the time is 10 am, or a countdown timer went off, no one did anything in the Dream for that cause to occur. In these cases, we want to use an effect that mentions any furre present or everyone on the map.

If we pick any furre present DS lines, we can use areas and filters to specify a particular player/set of players. Alternatively, if we really do need a triggering furre in that trigger, we can use this line to quite literally make someone a triggering furre:

    (5:51) make any furre standing at (#,#) become the new triggering furre.

DragonSpeak Lines

Causes

(0:100) When # seconds have passed, offset by #,
(0:101) When the time is #:# FST
(0:50) When countdown timer # goes off,
(0:50) When countdown timer # goes off,

Conditions

(1:94) and timer # is still counting down,
(1:194) and timer # is not still counting down,

Effects

(5:50) set countdown timer # to go off in # seconds.
(5:327) set variable # to the number of the countdown timer that just went off.

The Limits

Countdown timers range from 1 to 999, which means you can use of a total of 999 individual timers within a Dream. Usually it works better if you stick to 1-99, though!

Screen shaking

Screen shaking is a fun DS effect where you can move the player's game screen around! This is often used in tandem with other effects. For instance, you might have someone trip and fall down, using the screen shaking as a fun visual element. You could even make full on earthquakes for everyone on the map, or maybe the player touched the wrong button, or drank a potion that made them woozy!

The nice thing is that screen shaking is customizable for you to play with, so you can tweak the effect to match your intention. There are several styles to you can pick from, as well as ways to adjust the duration, intensity, and speed of those styles. The number ranges for each of these can be found on the DS Params page.

Let's say we wanted to make our volcano Dream have an earthquake every 30 seconds.. this is how that might look in DS:

(0:100) When 30 seconds have passed, offset by 0,
    (5:421) shake the map of any furre present in style 1, for 60 tenths of a second, with speed 5 and intensity 5.

The effect line is looking for a type of style from a predetermined list, along with information on how long you want it to last, how fast it should move and how intense the movement should be. Since this is a routine effect, for our example we'll pick the earthquake style, make it last for 6 seconds, and keep the speed and intensity of it rather low. Feel free to change up the parameters to see how dramatic (or even minimal) this effect can be!

DragonSpeak Lines

(5:420) shake the triggering furre's map in style #, for # tenths of a second, with speed # and intensity #.
(5:421) shake the map of any furre present in style #, for # tenths of a second, with speed # and intensity #.
(5:422) stop all map shaking for the triggering furre.
(5:423) stop all map shaking for any furre present.

Animation and DS

This section will cover how to incorporate DS with animation so you have better fine tuned control over when things will animate. If instead you're looking on how to animate a patch, check out the page on how to create basic animation using KitterSpeak!

In particular, many of the default effects objects in DreamEd are designed to animate well in conjunction with DS.

Let's start with the Falling Star (effect 49). Looking at it in DreamEd, you might think that sitting on the ground and sparkling is all it can do.. but it's so much more! It's capable of flying across the sky and then falling to the ground! The sitting pose you're looking at is its final stage of animation.

So how could we use DS to make this star fully animate? After placing the star effect down in our Dream map somewhere, for our example we'll make a DS trigger to make it animate:

(0:31) When someone says {Shooting star},
    (5:445) jump the animation of all copies of effect 49 in the Dream to step 1.

The (5:445) line asks first for the number of the effect object (which we replaced with 49 to match the id of the falling star effect).

The next thing it looks for is a step number. Steps are part of KitterSpeak, a special scripting language similar to DragonSpeak, except it's specific to animation and is used in the animation section of the Fox Editor. Since that's the case, in order to find out which step we need, we have to open the Fox Editor first. Once you have it open, go to:

File > Open a Copy > Effects.fox

Then go to effect object 49, which is the falling star. From there, we can open the animation window by going to:

Animation > Animation Editor

Here we can see all the KitterSpeak animation steps listed out. For the Falling Star (number 49) we want to start at Step 1.

You can use similar DS for other animated objects. Here is a list of the default effect objects whose KitterSpeak allows them to be manipulated with DS:

Effect Name

#

Effect Name

#

Effect Name

#

5% Overlay

21

90% Overlay

31

Stage Curtain

104

10% Overlay

22

95% Overlay

32

Sparkles

105

15% Overlay

23

100% Overlay

33

Poofs!

108

25% Overlay

24

Sunset Overlay

34

Ring of Fire

111

35% Overlay

25

Sunrise Overlay

35

Sploosh

112

45% Overlay

26

Lightning

47

50% Overlay

27

Falling Star

49

60% Overlay

28

Fireworks 1

52

70% Overlay

29

Fireworks 2

53

80% Overlay

30

Fireworks 3

54

DragonSpeak Lines

(5:430) jump the animation of all copies of item # in the Dream to step #.
(5:431) jump the animation of all copies of floor # in the Dream to step #.
(5:432) jump the animation of all copies of wall # with wall texture # to step #.
(5:433) jump the animation of DragonSpeak Button # to step # for everyone in the Dream.
(5:434) reset the animation of all copies of item # in the Dream.
(5:435) reset the animation of all copies of floor # in the Dream.
(5:436) reset the animation of all copies of wall # with wall texture #.
(5:437) reset the animation of DragonSpeak Button # for everyone in the Dream.
(5:438) set the default animation delay of item # to # milliseconds.
(5:439) set the default animation delay of floor # to # milliseconds.
(5:440) set the default animation delay of wall # with wall texture # to # milliseconds.
(5:441) set the default animation delay of DragonSpeak Button # to # milliseconds for everyone in the Dream.
(5:442) jump the animation of the triggering furre's DragonSpeak Button # to step #.
(5:443) reset the animation of the triggering furre's DragonSpeak Button #.
(5:444) set the default animation delay of the triggering furre's DragonSpeak Button # to # milliseconds.
(5:445) jump the animation of all copies of effect # in the Dream to step #.
(5:446) reset the animation of all copies of effect # in the Dream.
(5:447) set the default animation delay of effect # to # milliseconds.
(5:448) jump the animation of all copies of lighting # in the Dream to step #.
(5:449) reset the animation of all copies of lighting # in the Dream.
(5:450) set the default animation delay of lighting # to # milliseconds.
(5:451) jump the animation of all copies of ambience # in the Dream to step #.
(5:452) reset the animation of all copies of ambience # in the Dream.
(5:453) set the default animation delay of ambience # to # milliseconds.




Now that you've read through the intermediate level tutorials, it may be a good time to check out the Introduction to Variables tutorial! If you're looking for a good reference on DS structure, you could also check out the DragonSpeak Reference page, which talks about how it all works in more detail, instead of in a tutorial style. If you have any further questions about this page, feel free to contact the Beekins in game by saying help I need a mason!

Account E-Mail

Password