Tutorial 2 ‐ Rooms and exits - ThePix/QuestJS GitHub Wiki
...Continued from First steps.
A room is the same as a location; it is not necessarily a chamber in a building. I tend to use the words interchangeably.
Room descriptions
If you look back at the room, you will see it has a "desc" attribute; the description the user sees when entering the room.
In QuestJS terminology, the "user" is the person sat at a computer playing the game, whilst the "player" is the person in the game world that you user controls.
As with the "examine" attribute of the player, this can be a string or a function.
A second room
Add another room to the "data.js" file:
createRoom("kitchen", {
desc:'A clean room.',
west:new Exit("lounge"),
afterFirstEnter:function() {
msg("A fresh smell here!")
},
})
Quest 6 has a
msg
function for printing, just like Quest 5. The "function" keyword introduces the next bit as code, like a script in Quest 5.
We have an exit, heading to the lounge, which is a new
object of the type Exit
. We also need to create an exit going the other way:
createRoom("lounge", {
east:new Exit("kitchen"),
desc:"A smelly room with an old settee and a tv.",
})
Now if you reload the page, you can move from one room to the other.
Scripts
You may have noticed that the kitchen has a script (or a function in the usual JavaScript terminology) that fires when the player first enters the room. It was defined like this
afterFirstEnter:function() {
msg("A fresh smell here!")
},
Again, this is a name-value pair in the dictionary, with the name "afterFirstEnter", followed by a colon, as usual. Then we have the "function" keyword, followed by the parameters in curved brackets. There are no parameters in this case, but we still need the brackets. The code itself goes inside the curly braces, and has a single line - the msg
function that is used to print some text.
There are five attributes for rooms that can be given scripts that will run as the player moves about:
afterExit
beforeEnter
beforeFirstEnter
afterEnter
afterFirstEnter
Link
A Third Room, Using a Let us create a garage:
createRoom("garage", {
desc:'An empty garage.',
})
We now want an exit from the kitchen to the garage. Most of the time you will be adding exits that go both ways, so Quest has a shortcut to handle that. Set it up as a Link
in one room, and Quest will created the return exit for you.
createRoom("kitchen", {
desc:'A clean room.',
west:new Exit("lounge"),
north:new Link("garage"),
afterEnterFirst:function() {
msg("A fresh smell here!")
}
})
Note that the return exit can only be a simple exit and must be in the opposite direction. If you want to do anything else, just use an Exit
for each direction.
Locking the Door
We will have this new door locked, to illustrate how that is done. Exits are not saved when the user saves the game, so we do not set the exit itself to be locked, but instead a flag on the room. Add this extra line:
createRoom("kitchen", {
desc:'A clean room.',
west:new Exit("lounge"),
north:new Link("garage"),
afterEnterFirst:function() {
msg("A fresh smell here!")
}
exit_locked_north:true,
})
The exit will sometimes be locked and sometimes unlocked. For now, just try changing the "locked" attribute between true
and false
to confirm it works - we will look at unlocking it in the game later.
Continue to items...