So far, so good, but walking around in a room is pretty boring, right?
Also, if you move the character to the right side of the room, it walks over the barrels in the background.
Let’s fix both and start by making the room interactive.
Adding an activity
Let’s make Graham comment on the “Free cocktails” note on the blackboard.
ESCItem node to the
ESCRoom and call it “Blackboard”. Set
Global id parameter to “blackboard”.
Next, add a
CollisionPolygon2D node to the
ESCItem node and draw
a polygon around the blackboard image in the background. This will make
that area a hotspot to click on.
ESCItem node also has a
Tooltip parameter that can be used
by UIs to display a hint about the item when the mouse is hovering over
it. For example, the simplemouse UI displays the tooltip next to
the mouse cursor.
Now that we told Escoria that the blackboard area is interactive, we still need to tell it what to do if the player, for example, uses the verb “look” on it.
For this, we go back to ESC. First, we create a new ESC file in the pub folder and call it “blackboard.esc”.
We connect this to the blackboard item. The blackboard item should look like this now:
Using events, we can tell Escoria what to do when the player carries out actions on the item.
Events are called in much the same way as the verbs that the player uses.
Escoria uses the term “verb” to describe the action that the player wants to carry out. In the “9 verbs” UI, this is achieved with buttons that represent each verb directly (like “look”, “use” or “walk”). In the simple mouse UI, the verb is expressed by different mouse cursors (e.g. a magnifying glass expresses the “look” verb).
An example of an event might be if we want to make Graham say something when the player “looks” at the blackboard.
For this, we add a new event
:look to our ESC file and use the
command to make Graham talk:
:look say graham "That's good to hear. I'm thirsty."
say command expects the player character’s global ID as the first
parameter and the text to say as the second parameter. (See the
If you don’t define an
ESCLocation in your player scene, dialog will
appear at the top of the screen.
So add an
ESCLocation as a child of
Name this node “dialog_position” (this name is mandatory).
By default, dialog will appear under the character. You can move the node above Graham’s head to have dialog appear in a more regular location.
Try it out! Depending on which UI you chose, select either the look verb or the look cursor and click on the blackboard. You should notice that Graham will neither walk to the blackboard nor speak the line we coded above.
By default, Escoria uses the
ESCItem’s position when the player
attempts to reach it. The blackboard
ESCItem is located at position
(0,0) in the room. Since this position is out of reach (i.e. it is not
included in the
NavigationPolygon in the
ESCTerrain), Graham is
unable to reach it.
To fix this issue, we need to add an interaction position to the blackboard
ESCItem so that Escoria will then use this specific position instead of
ESCItem position itself.
Simply add a new
ESCLocation node as a child of the blackboard
and move it in front of the blackboard, around position
Run the game again: Graham should now walk to the blackboard and the text above should be displayed.
Making the player walk behind items
The other thing we should address is making Graham move behind the barrels instead of overtop of them in order to achieve a three-dimensional effect.
For this, we’ve added an asset that only includes the barrels on a transparent background.
Again, add a new node to the
ESCRoom node and select
ESCItem as the node type. Name it “Barrels”. Add a
Sprite node to
this new item and set the texture to the foreground barrels picture.
You can use a lot of different node types as children of
where it makes sense to -
Polygon2D for example.
If you use a control node like
they will cause problems with mouse interactions. You will need to
modify the properties of the
ColorRect and set the
“Mouse Filter” setting to “Ignore”.
Move the new item so it is directly over the barrels in the background. You can use the arrow keys of your keyboard for more precision.
To make Graham walk behind the barrels, Escoria uses a little trick:
z-index is used by Godot to know which object to draw first.
Objects with a lower z-index are drawn first while objects with a higher z-index are drawn last which are drawn over the ones with a lower z-index ( this is in addition to the node order in the scene tree where the bottom-most nodes are drawn last).
Escoria constantly updates the parameter
z-index of the player character to
match the value of its y axis. This makes it possible to define objects where
the player walks behind and in front of depending on its y position.
See this graphic:
When the character is at y position 95, it stands behind the table. At y position 105, it stands in front of the table. To achieve this effect in Escoria, we simply set the “z-index” property of the table item to 100.
For the barrels, though, the character should never walk in front of them,
only behind them. So we can set the barrels’
z-index property to the
height of the background, or simply 1.000 for this example.
To figure out the proper value of the
z-axis parameter, you can use the
ruler feature of Godot to measure the y position of where the base
position of your character needs to be to switch to walking in front.
Z As Relative, is checked by default, meaning that
z-axis property will also take the
z-axis property of its
parent (in this case, the
ESCRoom node). Usually, the
property of the parent is set to 0, but keep this in mind in case it isn’t
and the walkbehind effect doesn’t work properly.