I'm wondering if there's a possible workaround for this.
As usual with Ren'Py, there's many possible workaround.
The easiest one come from the screen featuring the smartphone:
Python:
screen smartphone():
# The smartphone image.
add "images/smartphone.jpg"
# Process all message.
for i in messages:
# displaying their content.
text "[i.text]":
# In either 'incoming" style or "outgoing" one.
style i.style
# Add a full transparent image button on top of everything.
imagebutton:
idle Solid( "#00000000" )
xpos 0 ypos 0
xsize config.screen_width ysize config.screen_height
action [Whatever action expected]
Another other, more complicated, but possibly easier to deal with when you works on the game, is to rely on
You must be registered to see the links
. You need to redefine the "say" screen to something that should more or less looks like this (wrote on the fly):
Python:
# Define the new needed style:
style namebox_incoming # Author of the incoming message
style say_incoming # Content of the incoming message
style namebox_outgoing # Author of the outgoing message
style say_outgoing # Content of the outgoing message
# Dictionary where the discussions and their messages will be stored.
default allSMS = {}
# A new parameter added, /SMS/. It will be either *None*, when it's a regular
# dialog line, or it will be the name of the discussion.
screen say(who, what, SMS=None):
style_prefix 'say'
# The default behavior
if not SMS:
window:
id 'window'
has vbox
if who is not None:
window:
id 'namebox'
style "namebox"
text who id 'who'
text what:
id 'what'
style_suffix 'dialogue'
if not renpy.variant("small"):
add SideImage() xalign 0.0 yalign 1.0
# The behavior when it's a SMS
if SMS:
# Put them all on a viewport
viewport:
yinitial 1.0
# Style it
# display all the SMS for this discussion
for author, txt in allSMS[SMS]:
vbox:
text author:
# Assuming that /MC_name/ is where the name of the
# MC is.
if from == MC_name:
style "namebox_outgoing"
else:
style "namebox_incoming"
text txt:
if from == MC_name:
style "say_outgoing"
else:
style "say_incoming"
# Then display the last message.
vbox:
text who id "who":
if who == MC_name:
style "namebox_outgoing"
else:
style "namebox_incoming"
text what id "what":
if who == MC_name:
style "say_outgoing"
else:
style "say_incoming"
# Finally add the message, and it's author, into the discussion.
allSMS[SMS].append( ( who, what ) )
If I haven't messed too much, it should be used this way:
Code:
label discussionWithMom:
mom "Hey honey, can you buy some butter when you come home from school ?" ( SMS="momPrivate" )
MC "Ok mom, but you'll have to suck my dick goodnight."( SMS="momPrivate" )
mom "Just that ? No problem, I was ready to give you my ass, but since you just want a BJ"( SMS="momPrivate" )
[...]
label discussionWithGirls:
sister "So, [sisBFF.name], still ready for tonight ?"( SMS="threesomePlaning" )
sisBFF "Ready ? I'm so ready that I already have to change my panties three times." ( SMS="threesomePlaning" )
sister "Slut ! ;)" ( SMS="threesomePlaning" )
sisBFF "It's why I'm your best friend :D" ( SMS="threesomePlaning" )
sister "You know me so well. No one eat my cunt like you bitch." ( SMS="threesomePlaning" )
MC "Er... Is this still a threesome, or have you forgot me ?" ( SMS="threesomePlaning" )
[...]
In the first label, you'll have a discussion between two persons. Incoming messages will come from the mother, outgoing from the MC.
In the second label, it will be a discussion with three persons. Both the sister and her best friend will be incoming messages, while MC ones will be outgoing.
And, if I haven't messed the screen too much, all this like if you where writing a regular scene with regular dialogs.
Edit: Added the only mandatory property for the
viewport
. It wasn't necessarily as obvious as I could have thought at first.