I know it's confusing, but called screens and called labels are two different mechanisms that absolutely don't react in the same way. So you don't need to call the labels from a called screen. You can still jump to labels like in your initial example, and you don't need to return from the labels you jumped to from the screen.
The problem of something like
show screen navigation
is double. There's the problem pointed by
@Rich , and there's also the fact that the player can quit the actual flow at anytime.
Take this by example :
Code:
label blabla:
show screen navigation
mc "Hello sis."
menu:
"compliment her":
mc "you look really good today."
sis "thanks."
$ sis_like += 1
"Say nothing":
pass
Like the player can quit the actual flow at anytime, he can by example do it right after the mc said that she look good. So, he'll have made the right choice, but he will not have the point for it, because he never reached this part.
Obviously, the fix for this particular example is to give the point before everything else, but it's still a flaw in the design to let the player quit in the middle of the action.
If the problem is that the navigation bar isn't always visible and it somehow break the design of the User Interface, you can use something like this :
[Note, I use
textbutton
for the example, because it simplify it. But obviously the exact same works with
imagemap
and
imagebutton
.]
Python:
# Flag to control the display of the navigation bar in the UI.
default disableNav = False
# The navigation bar when active.
screen myNav():
# Ensure that it will always be on top of the UI.
zorder 1
# Add the navigation bar.
use myNavButtons( True )
# The User Interface.
screen myUI():
# Whatever is needed in the UI.
vbox:
hbox:
text "Monday"
null width 5
text "noon"
# Add the navigation bar, unless it's disabled.
if disableNav is False:
use myNavButtons()
# The navigation bar, inactive by default.
screen myNavButtons( active=False):
vbox:
yalign 0.5
textbutton "Go here":
# Add the action only if the bar is active.
if active is True:
action Jump( "here" )
textbutton "Go there":
if active is True:
action Jump( "there" )
# An alternative is to have this when the bar
# is not active. But as you see the button still
# react, what can be confusing.
else:
action NullAction()
label start:
# The UI is always to show.
show screen myUI
"welcome to my example."
# But the navigation bar is active only now.
call screen myNav
label here:
"I'm here."
"The navigation bar is still visible."
"But it don't works."
"Now it will works again."
# Active the navigation bar again.
call screen myNav
"back here."
label there:
"I'm there."
# Temporarily remove the navigation bar, and it only,
# the User Interface is still visible.
$ disableNav = True
"But for this scene we need to get ride of the navigation bar."
"Ok, now we can have it back."
# Ok, the navigation bar can appear again.
$ disableNav = False
"END"
The "myUI" screen will always be visible and include the navigation bar by default. But the button are effectively active only when you call the "myNav" screen.
Plus, like the navigation bar is inside it's own screen, added by
You must be registered to see the links
, you don't have to define the buttons twice, which will limit the risk of bugs.