# ============================================================ # Pattern 2: Jump + Return (Subroutine Pattern) # ============================================================ # This timeline CALLS a sub-timeline (gym_pattern2_subroutine.dtl) # which does some work, then RETURNS control back here. # ============================================================ label start join Miko center join Advisor right Miko (neutral): I'm in the caller timeline. Advisor (pl5): Let me check something in the subroutine... # Save current position and jump to the subroutine jump gym_pattern2_subroutine/start # Execution resumes HERE after the subroutine calls "return" label after_return Miko (joy): Welcome back! The subroutine finished. Advisor (pl5): Notice how we resumed right where we left off. [wait time="1.0"] # Let's demonstrate: the subroutine set a variable if {Gym.sub_value} == 42: Miko (smile): The subroutine set `Gym.sub_value` to {Gym.sub_value}! Advisor (pl5): Variables set in subroutines persist after return. else: Miko (doubt): Hmm, the subroutine didn't set the value correctly. Advisor (doubt): Something went wrong — `Gym.sub_value` is {Gym.sub_value}. [wait time="1.5"] Miko (neutral): That's the subroutine pattern in a nutshell! Advisor (pl5): Jump → work → return. Powerful for reusable dialog chunks. [wait time="1.0"] jump gym_main/menu