I am currently trying to make a phone text game. I have got most of functionality working except the part where I want to make the viewport of a screen to automatically scroll to the bottom when a new text comes in. I have already tried using YScrollValue but Renpy doesn't seem to recognize it, so I'm stuck on how to make it auto-scroll. I had to revert the code back to how it was before and this is what I currently have for my script.rpy and screens.rpy files: script.rpy # The script of the game goes in this file. # Declare characters used by this game. The color argument colorizes the # name of the character. define e = Character("Testing") default chat_messages = [] default chat_scroll_pos = 1.0 # Default to bottom python early: import enum class ChatAlign(enum.Enum): LEFT = 0 RIGHT = 1 # Function to add a message and refresh the screen def add_message(text, color = "#000000", align = ChatAlign.LEFT): chat_messages.append((text, color, align)) renpy.restart_interaction() # Forces UI refresh # The game starts here. label start: # Show a background. This uses a placeholder by default, but you can # add a file (named either "bg room.png" or "bg room.jpg") to the # images directory to show it. scene trudy_phone_message show screen phone_chat $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() $ add_message("This is a text from the sender", align = ChatAlign.RIGHT) $ renpy.pause() $ add_message("This is a text from the receiver", align = ChatAlign.LEFT) $ renpy.pause() return screens.rpy screen phone_chat(): frame: xsize 430 ysize 700 xpos 745 ypos 220 background "#FFFFFF" viewport: id "chat_scroll" draggable True mousewheel True ysize 694 vbox: spacing 10 xalign 0.5 for msg, color, align in chat_messages: hbox: xfill True if align == ChatAlign.LEFT: frame: background Frame("gui/leftBubble.png", 15, 15) xpadding 10 ypadding 5 xfill False xmaximum 300 xalign 0.0 xmargin 5 text msg color "#000000" size 15 elif align == ChatAlign.RIGHT: null width 100 # Pushes message to the right frame: background Frame("gui/rightBubble.png", 15, 15) xpadding 10 ypadding 5 xfill False xmaximum 300 xalign 1.0 xmargin 5 text msg color "#FFFFFF" size 15 vbar: value YScrollValue("chat_scroll") xalign 1.0 xsize 3 unscrollable "hide" Continue reading...