Generally speaking you use
show screen
if you want to add a custom screen to the current UI. It will sit there and can be interacted with, but the game continues regardless of whether it is used or not. (think taskbar or toolbar or stats summary).
call screen
is more or less the same thing, except the game doesn't continue until the player interacts with the screen in a way that triggers an action.
Most new developers don't understand the difference and use
show screen
too often, when they really should be using
call screen
.
I mention all that because both have been mentioned and I want to make sure you don't fall into the trap.
Meanwhile, back to your original problem (which I'll admit, I'd missed the "tutorial" aspect of.)
It's RenPy, so there are lots of possible solutions. The ones mentioned already are all good.
But I'll add another one for you to consider.
Python:
default saw_rosesarered_tutorial = False
screen rosesarered():
modal True
textbutton "<CLICK ME>":
xalign 0.9 yalign 0.2
action Jump("playthru_continue")
textbutton "<EXIT>":
xalign 0.9 yalign 0.9
action Jump("the_end")
if saw_rosesarered_tutorial == False:
text "This text will only appear the first time the screen is displayed (and subsequently closed)":
xalign 0.1 yalign 0.8
on "hide" action SetVariable("saw_rosesarered_tutorial", True)
label start:
scene black with fade
"*** START ***"
label repeat_rosesarered:
call screen rosesarered
"Should never reach here."
label playthru_continue:
"You hit the button, well done."
"Another line of text"
jump repeat_rosesarered
label the_end:
screen black with fade
"*** THE END ***"
return
This doesn't have the narrator or main character delivering dialogue, but instead has text which is shown as part of the screen only the first time the screen is displayed. After that, the variable is set to
True
and therefore the text isn't shown next time. That seems in keeping with the idea of a tutorial, and means the player can avoid clicking the button, but will see the "hint" or however you want to think about it, the first time they view that screen.
I could have removed the
on "hide action SetVariable()"
and instead used:
action [ SetVariable("saw_rosesarered_screen", True), Jump("playthru_continue") ]
But this is the thing about RenPy, there's always another way of doing something.