I'm going to teach people how to make a moving cursor that can be used for a main menu
Difficulty: beginner
First, you will want to go to your player code and add this:
on enter do
cursor = 0
end
on draw do
label "{cursor}" at 0,0
end
The enter do event tells the playercode to change the cursor variable to be 0
On draw do tells the game to label the cursor value at 0,0 (the top left corner of the screen)
Now we are going to create three sprite tiles
Two will be your arrow tiles and one will be the cursor. Name your first tile to be cursor_up and the 2nd one to be cursor down. The cursor can be called cursor
Next you are going to want to create a world tile that is blank and solid.
Place your tiles somewhere on the map, but for this tutorial, we will be putting cursor_up at tile position 20,7 and cursor_down at 20,9. Place the player in the middle and put two solid world tiles between the player.
This will make it where the player can only interact with only cursor_up and cursor_down
Now for the code
cursor_down:
on interact do
if cursor<=0 then
cursor = 0
else
cursor--
end
end
When the player interacts with the tile (on interact do) if the value of the cursor variable is less than or equals to 0 then it will equal 0 or else the value of the cursor variable will be minus 1 or --
If the value of the cursor variable is 2 or more then the value of that variable will minus 1 every time you interact with that tile
cursor_up:
on interact do
if cursor>=3 then
cursor = 3
else
cursor++
end
end
Its similar to the cursor_down code, but if you interact with the tile, if the value of the cursor variable is greater than or equals 3 then the cursor variable will equals 3. You can change this to any number if you want your main menu to have more or less options
When you run the game, when you interact with the tiles, this should happen:
Now we are going to move the cursor
Actually, we are going to change the player code to be only this:
on draw do
label "{cursor}" at 0,0
end
For the room code, we are going to change it to this:
on enter do
cursor = 3
end
We are going to want to call the cursor tile cursor_icon
We are also going to place that cursor icon at 8,6 on the map
Now to to the updated code for cursor_up and cursor_down
on interact do
if cursor>=3 then
cursor = 3
else
cursor++
end
if cursor==3 then
tell 8,6 to
swap "cursor_icon"
tell 8,7 to
swap "white"
tell 8,8 to
swap "white"
end
end
end
else
if cursor==2 then
tell 8,6 to
swap "white"
tell 8,7 to
swap "cursor_icon"
tell 8,8 to
swap "white"
end
end
end
else
if cursor==1 then
tell 8,6 to
swap "white"
tell 8,7 to
swap "white"
tell 8,8 to
swap "cursor_icon"
end
end
end
end
end
end
end
This might look like giberish to you, but I'll explain what it all means.
Before, we had cursor_up only change the value of the variable of cursor from 0 to 3.
Under the first end statement there is an if statement that says:
If the cursor variable = 3 (==) tell the tile position 8,6 to swap that tile as "cursor_icon" (our cursor), then it tells the tile position 8,7, and 8,8 to swap as "white" (default blank tile)
else if the cursor variable = 2 then it tells the tile position 8,6 to swap as "white", the tile position 8,7 to to swap as the cursor tile and 8,8 as "white.
Again, else if the cursor variable = 1 then tell 8,6 to swap as "white", 8,7 to swap as "white", and 8,8 to swap as "white" (edited)
Now for cursor_down:
Its the same as before, but with the same exact code new code added to cursor_up:
on interact do
if cursor<=1 then
cursor = 1
else
cursor--
end
if cursor==3 then
tell 8,6 to
swap "cursor_icon"
tell 8,7 to
swap "white"
tell 8,8 to
swap "white"
end
end
end
else
if cursor==2 then
tell 8,6 to
swap "white"
tell 8,7 to
swap "cursor_icon"
tell 8,8 to
swap "white"
end
end
end
else
if cursor==1 then
tell 8,6 to
swap "white"
tell 8,7 to
swap "white"
tell 8,8 to
swap "cursor_icon"
end
end
end
end
end
end
end
The only difference is that we have to change the top portion of the code to be if cursor is less than or equals to 1 then it will equals 1.
When you run the code, this is what should happen:
The reason for the tile swap is for letting the cursor_icon to move around.
Now we will add Text onto the screen
Now back to the player code:
on draw do
label "{cursor}" at 0,0
if cursor>=1 then
label "play game" at 9,6
label "options" at 9,7
label "exit" at 9,8
else
end
end
Back to on draw. If the cursor >=1 then it will label "play game" at 9,6 and label "options" at 9,7, and label "exit" at tile position 9,8
While we are at it, we can also change the player sprite to be blank and do the same for cursor_up and cursor_down
When you run the code, this should happen:
We can go to the player code and comment out label "{cursor}" at 0,0
with //label "{cursor}" at 0,0
Now we are going to want to edit the player code and add a new event called on confirm do
// label "{cursor}" at 0,0
if cursor>=1 then
label "play game" at 9,6
label "options" at 9,7
label "exit" at 9,8
else
end
end
on confirm do
if cursor==3 then
tell "player" to
goto 12,9 in "start"
end
end
end
Confirm is the A button. If the cursor variable = 3 then tell the player to goto tile position 12,9 in the room "start". If you started with the default example game, there should be a room with floppies, a computer, and a exit.
Next we will want to go to the start room and create room code:
on enter do
cursor = 0
When you enter the start room, the variable cursor will = 0 and the start screen and cursor will not be displayed on the screen.
There is an issue though, our player is still invisible. There is a way to make the player show up correctly.
We are going to create a new player tile. It can be whatever you want it to be.
we are going to call the new player tile player_room
For the room code, we are going to add one more variable.
start room:
on enter do
cursor = 0
level_start = 1
end
menu room:
on enter do
cursor = 0
level_start = 0
end
Actually, one more thing, we will also want to add something to both room codes. Under the variable level_start, we are going to add this:
tell "player" to
call "playertype"
end
This will tell the player code to call a event, but that currently doesn't exist, so we are going to create that now. In the player code, we are going to create a new event.
on playertype do
if level_start==1 then
swap "player_room"
else
swap "player"
end
end
If the variable level_start = 1 then swap the player tile to the other player tile "player_room" else, if the variable doesn't = 1 then swap to "player"
When you run the code, this is how it should work:
You can go back into the player code and change the confirm event (press A) to where if cursor = 2 or cursor = 1 then they will do different things. Lets try that out real quick
on confirm do
if cursor==3 then
tell "player" to
goto 12,9 in "start"
end
end
if cursor== 1 then
fin "You cannot quit the game. There is no escape"
end
end
If cursor == 1 then the game will end with a message. In reality, you aren't exiting the game, but restarting the game. The only true way to exit the game is by pressing the menu button and selecting home
I hope this tutorial was helpful. If you liked the tutorial or have any criticisms with it, please let me know. Have a good night.