mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1424 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1424 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
###     Demo Script Example     ###
 | 
						|
 | 
						|
# This script, but not the artwork associated with it, is in the
 | 
						|
# public domain. Feel free to use it as the basis for your own
 | 
						|
# game.
 | 
						|
 | 
						|
# If you're trying to understand this script, I recommend skipping
 | 
						|
# down to the line beginning with 'label start:', at least on your
 | 
						|
# first read-through.
 | 
						|
 | 
						|
# This init block runs first, and sets up all sorts of things that
 | 
						|
# are used by the rest of the game. Variables that are set in init
 | 
						|
# blocks are _not_ saved, unless they are changed later on in the
 | 
						|
# program.
 | 
						|
 | 
						|
init:
 | 
						|
 | 
						|
    # Set up the size of the screen, and the window title.
 | 
						|
    $ config.screen_width = 800
 | 
						|
    $ config.screen_height = 600
 | 
						|
    $ config.window_title = "The Ren'Py Demo Game"
 | 
						|
 | 
						|
    # Declare the images that are used in the program.
 | 
						|
 | 
						|
    # Backgrounds.
 | 
						|
    image bg carillon = "carillon.jpg"
 | 
						|
    image bg whitehouse = "whitehouse.jpg"
 | 
						|
    image bg washington = "washington.jpg"
 | 
						|
    image bg onememorial = "1memorial.jpg"
 | 
						|
    image black = Solid((0, 0, 0, 255))
 | 
						|
 | 
						|
    # Character pictures.
 | 
						|
    image eileen happy = "9a_happy.png"
 | 
						|
    image eileen vhappy = "9a_vhappy.png"
 | 
						|
    image eileen concerned = "9a_concerned.png"
 | 
						|
 | 
						|
    # A character object. This object lets us have the character say
 | 
						|
    # dialogue without us having to repeatedly type her name. It also
 | 
						|
    # lets us change the color of her name.
 | 
						|
 | 
						|
    $ e = Character('Eileen', color=(200, 255, 200, 255))
 | 
						|
 | 
						|
# The start label marks the place where the main menu jumps to to
 | 
						|
# begin the actual game.
 | 
						|
 | 
						|
label start:
 | 
						|
 | 
						|
    # The save_name variable sets the name of the save game. Like all
 | 
						|
    # variables declared outside of init blocks, this variable is
 | 
						|
    # saved and restored with a save file.
 | 
						|
    $ save_name = "Introduction"
 | 
						|
 | 
						|
    # This variable is only used by our game. If it's true, it means
 | 
						|
    # that we won the date.
 | 
						|
    $ date = False
 | 
						|
 | 
						|
    # Clear the game runtime timer, so it doesn't reflect time spent
 | 
						|
    # sitting at the main menu.
 | 
						|
    $ renpy.clear_game_runtime()
 | 
						|
 | 
						|
    # Start some music playing in the background.
 | 
						|
    $ renpy.music_start('sun-flower-slow-drag.mid')
 | 
						|
 | 
						|
    # Now, set up the first scene. We first fade in our washington
 | 
						|
    # background, and then we dissolve in the image of Eileen on top
 | 
						|
    # of it.
 | 
						|
    scene bg washington with fade
 | 
						|
    show eileen vhappy with dissolve
 | 
						|
 | 
						|
    # Store the current version of Ren'Py into a variable, so we can
 | 
						|
    # interpolate it into the next line.
 | 
						|
    $ version = renpy.version()
 | 
						|
 | 
						|
    # Display a line of dialogue. In this case, we manually specify
 | 
						|
    # who's saying the line of dialogue. We also interpolate in the
 | 
						|
    # version of Ren'Py we're using.
 | 
						|
    "Girl" "Hi, and welcome to the %(version)s demo program."
 | 
						|
 | 
						|
    # This instantly replaces the very happy picture of Eileen with
 | 
						|
    # one showing her merely happy. It demonstrates how the show
 | 
						|
    # statement lets characters change emotions.
 | 
						|
    show eileen happy
 | 
						|
 | 
						|
    # Another line of dialogue.
 | 
						|
    "Girl" "My name is Eileen, and while I plan to one day star in a
 | 
						|
            real game, for now I'm here to tell you about Ren'Py."
 | 
						|
 | 
						|
    # This line used the e character object, which displays Eileen's
 | 
						|
    # name in green. The use of a short name for a character object
 | 
						|
    # lets us save typing when writing the bulk of the dialogue.
 | 
						|
    e "Ren'Py is a language and engine for writing and playing visual
 | 
						|
       novel games."
 | 
						|
 | 
						|
    e "Our goal is to allow people to be able to write the script for
 | 
						|
       a game, and with very little effort, turn that script into
 | 
						|
       a working game."
 | 
						|
 | 
						|
    e "I can tell you about the features of Ren'Py games, or how to write
 | 
						|
       your own game. What do you want to know about?"
 | 
						|
 | 
						|
    # This variable is used to save the choices that have been made in
 | 
						|
    # the main menu.
 | 
						|
    $ seen_set = [ ]
 | 
						|
 | 
						|
label choices:
 | 
						|
 | 
						|
    # We change the save name here.
 | 
						|
    $ save_name = "Question Menu"
 | 
						|
 | 
						|
    # This is the main menu, that lets the user decide what he wants
 | 
						|
    # to hear about.
 | 
						|
    menu:
 | 
						|
 | 
						|
        # The set menu clause ensures that each menu choice can only
 | 
						|
        # be chosen once.
 | 
						|
        set seen_set
 | 
						|
 | 
						|
        # This is a menu choice. When chosen, the statements in its
 | 
						|
        # block are executed.
 | 
						|
        "What are some user-visible features of Ren'Py games?":
 | 
						|
 | 
						|
            # We call the features label. The from clause needs to be
 | 
						|
            # here to ensure that save games work, even after we
 | 
						|
            # change the script. It was added automatically.
 | 
						|
            call features from _call_features_1
 | 
						|
 | 
						|
            # When we're done talking about features, jump back up
 | 
						|
            # to choices.
 | 
						|
            jump choices
 | 
						|
 | 
						|
        # Another choice.
 | 
						|
        "How do I write my own games with it?":
 | 
						|
            call writing from _call_writing_1
 | 
						|
            jump choices
 | 
						|
 | 
						|
        "Can you demonstrate more features to me?":
 | 
						|
            call demonstrate from _call_demonstrate_1
 | 
						|
            jump choices
 | 
						|
 | 
						|
        # This choice has a condition associated with it. It is only
 | 
						|
        # displayed if the condition is true (in this case, if we have
 | 
						|
        # selected at least one other choice has been chosen.)
 | 
						|
        "Where can I find out more?" if seen_set:
 | 
						|
            call find_out_more from _call_find_out_more_1
 | 
						|
            jump choices
 | 
						|
 | 
						|
        "Why are we in Washington, DC?":
 | 
						|
            call washington from _call_washington_1
 | 
						|
            jump choices
 | 
						|
 | 
						|
        "I think I've heard enough." if seen_set:
 | 
						|
            jump ending
 | 
						|
 | 
						|
 | 
						|
# This is the section on writing games.
 | 
						|
label writing:
 | 
						|
 | 
						|
    # Change the title of the save games.
 | 
						|
    $ save_name = "Writing Games"
 | 
						|
 | 
						|
    # We start off with a bunch of dialogue.
 | 
						|
    e "If you want to write a game, we recommend that you read the
 | 
						|
       Ren'Py reference, which you can get from our web page,
 | 
						|
       http://www.bishoujo.us/renpy/."
 | 
						|
 | 
						|
    e "But here, we'll go over some of the basics of writing Ren'Py
 | 
						|
       scripts. It might make sense if you open the source for this
 | 
						|
       game."
 | 
						|
 | 
						|
    e "The source for this game can be found in the file
 | 
						|
       game/script.rpy."
 | 
						|
 | 
						|
    e "The goal of Ren'Py is to make writing the game similar to
 | 
						|
       typing up the script on the computer."
 | 
						|
 | 
						|
    e "For example, a line of dialogue is expressed by putting the
 | 
						|
       character's name next to the dialogue string."
 | 
						|
 | 
						|
    # A string by itself like this displays without a name associated
 | 
						|
    # with it. So it's useful for dialogue and narration.
 | 
						|
    "I somehow remember that strings by themselves are displayed as
 | 
						|
     thoughts or narration."
 | 
						|
 | 
						|
    e "The menu statement makes it easy to create menus."
 | 
						|
 | 
						|
    e "A number of statements let you control what is shown on the
 | 
						|
       screen."
 | 
						|
 | 
						|
    # This scene statement has a with clause associated with it. In
 | 
						|
    # this case (based on what is defined in the init clause at the
 | 
						|
    # top of this script), it causes a fade to black, and then back
 | 
						|
    # to the new scene.
 | 
						|
    scene bg whitehouse with fade
 | 
						|
 | 
						|
    e "The scene statement clears the scene list, which is the list of
 | 
						|
       things that are shown on the screen."
 | 
						|
 | 
						|
    # This shows an image, and dissolves it in.
 | 
						|
    show eileen happy with dissolve
 | 
						|
 | 
						|
    e "The show statement shows another image on the screen."
 | 
						|
 | 
						|
    # The at clause here, displays the character on the left side of
 | 
						|
    # the screen. The with clause causes us to slide from the old
 | 
						|
    # position to the new position.
 | 
						|
    show eileen happy at left with move
 | 
						|
 | 
						|
    e "Images can take at clauses that specify where on the screen
 | 
						|
       they are shown."
 | 
						|
 | 
						|
    show eileen vhappy at left
 | 
						|
 | 
						|
    e "Showing a new image with the same first part of the name
 | 
						|
       replaces the image in the scene list."
 | 
						|
 | 
						|
    hide eileen with dissolve
 | 
						|
 | 
						|
    e "Finally, the hide statement hides an image, which is useful
 | 
						|
       when a character leaves the scene."
 | 
						|
 | 
						|
    show eileen happy with dissolve
 | 
						|
 | 
						|
    e "Don't worry, I'm not going anywhere."
 | 
						|
 | 
						|
    e "The with statement is used to cause transitions to
 | 
						|
       happen. Transitions like fade..."
 | 
						|
 | 
						|
    # This statement hides the transient stuff from being included
 | 
						|
    # in the next fade.
 | 
						|
    with None
 | 
						|
 | 
						|
    # This with statement causes things to fade without changing the
 | 
						|
    # scene.
 | 
						|
    with fade
 | 
						|
 | 
						|
    e "... or dissolve ..."
 | 
						|
 | 
						|
    # In this block, the scene statement clears the scene list. So we
 | 
						|
    # have to reshow the eileen happy image, so that it appears that
 | 
						|
    # just the background is dissolving. Sneaky.
 | 
						|
    with None
 | 
						|
    scene bg washington
 | 
						|
    show eileen happy
 | 
						|
    with dissolve
 | 
						|
 | 
						|
    e "... are easily invoked."
 | 
						|
 | 
						|
    e "We now provide a series of user-interface functions, that allow
 | 
						|
       the programmer to create fairly complex interfaces."
 | 
						|
 | 
						|
    e "Ren'Py also includes a number of control statements, and even
 | 
						|
       lets you include python code."
 | 
						|
 | 
						|
    e "Rather than go into this here, you can read all about it in the
 | 
						|
       reference."
 | 
						|
 | 
						|
    e "You can see a number of features in action by asking me to
 | 
						|
       demonstrate them at the next menu."
 | 
						|
 | 
						|
    e "If you want to make changes, you can edit the script for this
 | 
						|
       game by editing game/script.rpy"
 | 
						|
 | 
						|
    e "When you've made a change, just re-run the game to see your
 | 
						|
       change in action."
 | 
						|
 | 
						|
    e "Would you like to know about something else?"
 | 
						|
 | 
						|
    # We return back up to the menu that lets the user pick a topic.
 | 
						|
    return
 | 
						|
 | 
						|
# This ends the well-commented portion of this script.
 | 
						|
 | 
						|
label features:
 | 
						|
 | 
						|
    $ save_name = "Features"
 | 
						|
 | 
						|
    e "Ren'Py provides a number of gameplay features, giving the user
 | 
						|
       a good experience while freeing up the game author to write his
 | 
						|
       game."
 | 
						|
 | 
						|
    e "What are some of these features? Well, first of all, we take
 | 
						|
       care of displaying the screen, as well as dialogue and menus."
 | 
						|
 | 
						|
    e "You can navigate through the game using the keyboard or the
 | 
						|
       mouse. If you've gotten this far, you've probably figured that
 | 
						|
       out already."
 | 
						|
 | 
						|
    e "Right-clicking or pressing escape will bring you to the game
 | 
						|
       menu."
 | 
						|
 | 
						|
    e "The game menu lets you save or load the game. Ren'Py doesn't
 | 
						|
       limit the number of save slots available. You can create as
 | 
						|
       many slots as you can stand."
 | 
						|
 | 
						|
    e "A preferences screen on the game menu lets you change the
 | 
						|
       fullscreen mode, control skipping, text speed, and
 | 
						|
       transitions, and turn sound and music on and off."
 | 
						|
 | 
						|
    e "The game menu also lets you restart or quit the game. But you
 | 
						|
       wouldn't want to do that, would you?"
 | 
						|
 | 
						|
    e "Finally, the game menu lets you set up the game
 | 
						|
       preferences. These preferences are saved between games."
 | 
						|
 | 
						|
    show eileen vhappy
 | 
						|
 | 
						|
    e "The next feature is really neat."
 | 
						|
 | 
						|
    show eileen happy
 | 
						|
 | 
						|
    menu rollback_menu:
 | 
						|
        "Would you like to hear about rollback?"
 | 
						|
 | 
						|
        "Yes.":
 | 
						|
            pass
 | 
						|
 | 
						|
        "No.":
 | 
						|
            jump after_rollback
 | 
						|
 | 
						|
 | 
						|
    e "Rollback is a feature that only Ren'Py has. It lets you go back
 | 
						|
       in time in a game."
 | 
						|
 | 
						|
    e "For example, you can go back to a menu and save or make a
 | 
						|
       different choice."
 | 
						|
 | 
						|
    e "You can access it by pressing page up or scrolling up on your
 | 
						|
       mouse wheel."
 | 
						|
 | 
						|
    e "Why don't you try it by going back to the last menu and
 | 
						|
       choosing 'No.' instead of 'Yes.'"
 | 
						|
 | 
						|
    e "Press page up or scroll up the mouse wheel."
 | 
						|
 | 
						|
    show eileen concerned
 | 
						|
 | 
						|
    e "Well, are you going to try it?"
 | 
						|
 | 
						|
    e "Your loss."
 | 
						|
 | 
						|
    e "Moving on."
 | 
						|
 | 
						|
label after_rollback:
 | 
						|
 | 
						|
    show eileen happy
 | 
						|
 | 
						|
    e "Ren'Py gives you a few ways of skipping dialogue. Pressing
 | 
						|
       control quickly skips dialogue you've seen at least once."
 | 
						|
 | 
						|
    e "Pressing Tab toggles the skipping of dialogue you've seen at
 | 
						|
       least once."
 | 
						|
 | 
						|
    e "Pressing page down or scrolling the mouse wheel down will let
 | 
						|
       you skip dialogue you've seen this session. This is useful
 | 
						|
       after a rollback."
 | 
						|
 | 
						|
    e "If you want to try these, you might want to rollback a bit
 | 
						|
       first, so you can skip over something you've seen already."
 | 
						|
 | 
						|
    e "Finally, Ren'Py has predictive image loading, so you rarely
 | 
						|
       have to wait for a new image to load."
 | 
						|
 | 
						|
    e "Remember, all these features are built into the engine or
 | 
						|
       standard library. So every game written with Ren'Py has them."
 | 
						|
 | 
						|
    e "Is there anything else you'd like to know about?"
 | 
						|
 | 
						|
    return
 | 
						|
 | 
						|
 | 
						|
label find_out_more:
 | 
						|
 | 
						|
    $ save_name = "Find Out More"
 | 
						|
 | 
						|
    e "There are a few places you can go to find out more about
 | 
						|
       Ren'Py."
 | 
						|
 | 
						|
    e "The Ren'Py homepage, http://www.bishoujo.us/renpy/, is probably
 | 
						|
       the best place to start."
 | 
						|
 | 
						|
    e "There, you can download new versions of Ren'Py, and read the
 | 
						|
       tutorial online."
 | 
						|
 | 
						|
    e "If you have questions, the best place to ask them is the Ren'Py
 | 
						|
       forum of the Lemmasoft forums."
 | 
						|
 | 
						|
    e "Just go to http://lemmasoft.renai.us/forums/, and click on
 | 
						|
       Ren'Py."
 | 
						|
 | 
						|
    e "We thank Blue Lemma for hosting our forum."
 | 
						|
 | 
						|
    e "Finally, feel free to email or IM us if you need help. You can
 | 
						|
       get the addresses to use from http://www.bishoujo.us/renpy/."
 | 
						|
 | 
						|
    e "We really want people to make their own games with Ren'Py, and
 | 
						|
       if there's anything we can do to help, just tell us."
 | 
						|
 | 
						|
    e "Is there anything I can help you with now?"
 | 
						|
 | 
						|
    return
 | 
						|
 | 
						|
label washington:
 | 
						|
 | 
						|
    $ save_name = "Washington, DC"
 | 
						|
 | 
						|
    e "We're in Washington, DC because over Summer 2004 American
 | 
						|
       Bishoujo's home base was just outside of DC."
 | 
						|
 | 
						|
    scene bg whitehouse
 | 
						|
    show eileen happy at left
 | 
						|
    with fade
 | 
						|
 | 
						|
    e "Even though we've moved back to New York, we took a bunch of
 | 
						|
       pictures, and decided to use them."
 | 
						|
 | 
						|
    show eileen concerned at left
 | 
						|
 | 
						|
    e "It was easier than drawing new pictures for this demo."
 | 
						|
 | 
						|
    show eileen happy at left
 | 
						|
 | 
						|
    e "Do you have a favorite landmark in or around DC?"
 | 
						|
 | 
						|
    menu:
 | 
						|
 | 
						|
        "The White House.":
 | 
						|
 | 
						|
            e "I was supposed to go on a tour of the West Wing, once."
 | 
						|
 | 
						|
            show eileen concerned
 | 
						|
 | 
						|
            e "They wouldn't let us in."
 | 
						|
 | 
						|
            e "The secret service guy who was supposed to show us
 | 
						|
               around was out of town that day."
 | 
						|
 | 
						|
            e "Too bad."
 | 
						|
 | 
						|
        "The National Mall.":
 | 
						|
 | 
						|
            e "It's always fun to go down to the national mall."
 | 
						|
 | 
						|
            e "You can visit the monuments, or see one of the
 | 
						|
               museums."
 | 
						|
 | 
						|
            e "I guess you could run out of things to do after a while
 | 
						|
               but I didn't over the course of a summer."
 | 
						|
 | 
						|
        "The Netherlands Carillon.":
 | 
						|
            jump netherlands
 | 
						|
 | 
						|
    jump post_netherlands
 | 
						|
 | 
						|
label netherlands:
 | 
						|
 | 
						|
    show eileen vhappy at left
 | 
						|
 | 
						|
    e "You've been to the Netherlands Carillon?"
 | 
						|
 | 
						|
    scene bg carillon
 | 
						|
    show eileen vhappy at left
 | 
						|
    with dissolve
 | 
						|
 | 
						|
    e "It may not be much to look at but the sound of the bells is
 | 
						|
       really neat."
 | 
						|
 | 
						|
    e "I love going there. Saturdays during the summer, they have
 | 
						|
       these recitals in the park where a guy comes and plays the
 | 
						|
       bells live."
 | 
						|
 | 
						|
    e "You can climb to the top and talk to him, if you're not afraid
 | 
						|
       of heights."
 | 
						|
 | 
						|
    e "Once, I saw a little girl there, maybe three or four years old.
 | 
						|
       The guy played the bumblebee song for here, and he even let her play the last
 | 
						|
       note. It was so cute!"
 | 
						|
 | 
						|
    e "I haven't been there for so long."
 | 
						|
 | 
						|
    menu:
 | 
						|
        "Would you like to go there sometime?":
 | 
						|
 | 
						|
            e "You mean, together?"
 | 
						|
 | 
						|
            e "Sure, why not. How does next Saturday sound?"
 | 
						|
 | 
						|
            e "It's a date."
 | 
						|
 | 
						|
            $ date = True
 | 
						|
 | 
						|
        "That sounds nice.":
 | 
						|
 | 
						|
            show eileen happy at left
 | 
						|
 | 
						|
            e "Well, it is."
 | 
						|
 | 
						|
label post_netherlands:
 | 
						|
 | 
						|
    scene bg washington
 | 
						|
    show eileen happy
 | 
						|
    with fade
 | 
						|
 | 
						|
    e "Anyway, is there anything else you want to know about Ren'Py?"
 | 
						|
 | 
						|
    return
 | 
						|
 | 
						|
label ending:
 | 
						|
 | 
						|
    $ save_name = "Ending"
 | 
						|
 | 
						|
    e "Well, that's okay."
 | 
						|
 | 
						|
    e "I hope you'll consider using Ren'Py for your next game
 | 
						|
       project."
 | 
						|
 | 
						|
    show eileen vhappy
 | 
						|
 | 
						|
    e "Thanks for viewing this demo!"
 | 
						|
 | 
						|
    if date:
 | 
						|
        e "And I'll see you on Saturday."
 | 
						|
 | 
						|
    scene black with dissolve
 | 
						|
 | 
						|
    "Ren'Py and the Ren'Py demo were written by PyTom."
 | 
						|
 | 
						|
    'The background music is "Sun Flower Slow Drag" by S. Joplin
 | 
						|
     (1868-1917). Thanks to the Mutopia project for making it
 | 
						|
       available.'
 | 
						|
 | 
						|
    'The author would like to thank everyone who makes original
 | 
						|
     English-language bishoujo games, and the people on the Lemmasoft forums
 | 
						|
     who encouraged him.'
 | 
						|
 | 
						|
    "We can't wait to see what you do with this. Good luck!"
 | 
						|
 | 
						|
    $ minutes, seconds = divmod(int(renpy.get_game_runtime()), 60)
 | 
						|
    "It took you %(minutes)d minutes and %(seconds)d seconds to
 | 
						|
     finish this demo."
 | 
						|
 | 
						|
    $ renpy.full_restart()
 | 
						|
 | 
						|
 | 
						|
label speedtest:
 | 
						|
 | 
						|
    with None
 | 
						|
    scene bg whitehouse
 | 
						|
    show eileen happy
 | 
						|
    with dissolve
 | 
						|
 | 
						|
    e "Okay, I'm going to run the speedtest on your system."
 | 
						|
 | 
						|
    e "I'll only be testing the performance of the dissolve
 | 
						|
       transition. It taxes your system the most, as it needs to
 | 
						|
       redraw the entire screen each frame."
 | 
						|
 | 
						|
    $ frames = config.frames
 | 
						|
 | 
						|
    with None
 | 
						|
    scene bg washington
 | 
						|
    show eileen happy
 | 
						|
    with Dissolve(5.0)
 | 
						|
 | 
						|
    $ frames = config.frames - frames
 | 
						|
    $ fps = frames / 5.0
 | 
						|
 | 
						|
    e "Well, your system displayed %(frames)d frames in five
 | 
						|
       seconds. That's %(fps).1f fps."
 | 
						|
 | 
						|
    e "Remember, this is the worst-case speed, as usually we can just
 | 
						|
       draw the parts of the screen that have changed."
 | 
						|
 | 
						|
    e "Thanks for viewing the secret speed test."
 | 
						|
 | 
						|
    return
 | 
						|
 | 
						|
# Setup the secret key for the speedtest.
 | 
						|
init:
 | 
						|
    python:
 | 
						|
        config.keymap['speedtest'] = [ 'S' ]
 | 
						|
        config.underlay.append(renpy.Keymap(speedtest=renpy.curried_call_in_new_context('speedtest')))
 | 
						|
 | 
						|
 | 
						|
init:
 | 
						|
 | 
						|
    # This is just some example code to show the ui functions in
 | 
						|
    # action. You probably want to delete this (and the call to
 | 
						|
    # day_planner above) from your game. This code isn't really all
 | 
						|
    # that useful except as an example.
 | 
						|
 | 
						|
    python:
 | 
						|
        def day_planner():
 | 
						|
 | 
						|
            periods = [ 'Morning', 'Afternoon', 'Evening' ]
 | 
						|
            choices = [ 'Study', 'Exercise',
 | 
						|
                        'Eat', 'Drink', 'Be Merry' ]
 | 
						|
 | 
						|
            plan = { 'Morning' : 'Eat',
 | 
						|
                     'Afternoon' : 'Drink',
 | 
						|
                     'Evening' : 'Be Merry' }
 | 
						|
 | 
						|
            day = 'March 25th'
 | 
						|
 | 
						|
            stats = [
 | 
						|
                ('Strength', 100, 10),
 | 
						|
                ('Intelligence', 100, 25),
 | 
						|
                ('Moxie', 100, 100),
 | 
						|
                ('Chutzpah', 100, 75),
 | 
						|
                ]
 | 
						|
 | 
						|
            editing = None
 | 
						|
 | 
						|
            def button(text, selected, returns, **properties):
 | 
						|
                style = 'button'
 | 
						|
                style_text = 'button_text'
 | 
						|
 | 
						|
                if selected:
 | 
						|
                    style='selected_button'
 | 
						|
                    style_text='selected_button_text'
 | 
						|
 | 
						|
                ui.button(clicked=ui.returns(returns),
 | 
						|
                          style=style, **properties)
 | 
						|
                ui.text(text, style=style_text)
 | 
						|
 | 
						|
 | 
						|
            while True:
 | 
						|
 | 
						|
                # Stats Window
 | 
						|
                ui.window(xpos=0,
 | 
						|
                          ypos=0,
 | 
						|
                          xanchor='left',
 | 
						|
                          yanchor='top',
 | 
						|
                          xfill=True,
 | 
						|
                          yminimum=200,
 | 
						|
                          )
 | 
						|
 | 
						|
                ui.vbox()
 | 
						|
 | 
						|
                ui.text('Statistics')
 | 
						|
                ui.null(height=20)
 | 
						|
 | 
						|
                for name, range, value in stats:
 | 
						|
 | 
						|
                    ui.hbox()
 | 
						|
                    ui.text(name, minwidth=150)
 | 
						|
                    ui.bar(600, 22, range, value, ypos=0.5, yanchor='center')
 | 
						|
                    ui.close()
 | 
						|
 | 
						|
                ui.close()
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                # Period Selection Window.
 | 
						|
                ui.window(xpos=0,
 | 
						|
                          ypos=200,
 | 
						|
                          xanchor='left',
 | 
						|
                          yanchor='top',
 | 
						|
                          xfill=False,
 | 
						|
                          xminimum=300
 | 
						|
                          )
 | 
						|
 | 
						|
                ui.vbox(xpos=0.5, xanchor='center')
 | 
						|
                ui.text(day, xpos=0.5, xanchor='center', textalign=0.5)
 | 
						|
                ui.null(height=20)
 | 
						|
 | 
						|
                for i in periods:
 | 
						|
                    face = i + ": " + plan[i]
 | 
						|
                    button(face, editing == i, ("edit", i))
 | 
						|
 | 
						|
                ui.null(height=20)
 | 
						|
                ui.textbutton("Continue", clicked=ui.returns(("done", True)))
 | 
						|
                ui.null(height=20)
 | 
						|
                ui.close()
 | 
						|
 | 
						|
 | 
						|
                # Choice window.
 | 
						|
                if editing:
 | 
						|
                    ui.window(xpos=300,
 | 
						|
                              ypos=200,
 | 
						|
                              xanchor='left',
 | 
						|
                              yanchor='top',
 | 
						|
                              xfill=False,
 | 
						|
                              xminimum=500
 | 
						|
                              )
 | 
						|
 | 
						|
                    ui.vbox()
 | 
						|
                    ui.text("What will you do in the %s?" % editing.lower())
 | 
						|
                    ui.null(height=20)
 | 
						|
 | 
						|
                    for i in choices:
 | 
						|
                        button(i, plan[editing] == i, ("set", i),
 | 
						|
                               xpos=0, xanchor='left')
 | 
						|
 | 
						|
                    ui.close()
 | 
						|
 | 
						|
                # Window at the bottom.
 | 
						|
                ui.window()
 | 
						|
                ui.vbox()
 | 
						|
                ui.text("To get to the next screen, click the 'Continue' button.")
 | 
						|
                ui.close()
 | 
						|
 | 
						|
                type, value = ui.interact()
 | 
						|
 | 
						|
                if type == "done":
 | 
						|
                    break
 | 
						|
 | 
						|
                if type == "edit":
 | 
						|
                    editing = value
 | 
						|
 | 
						|
                if type == "set":
 | 
						|
                    plan[editing] = value
 | 
						|
                    editing = None
 | 
						|
 | 
						|
            return plan
 | 
						|
 | 
						|
init:
 | 
						|
    image movie = Movie()
 | 
						|
 | 
						|
    python:
 | 
						|
        povname = ""
 | 
						|
        pov = DynamicCharacter("povname", color=(255, 0, 0, 255))
 | 
						|
 | 
						|
    $ ectc = Character('Eileen', color=(200, 255, 200, 255),
 | 
						|
                       ctc = anim.Blink("arrow.png"))
 | 
						|
 | 
						|
    $ ectcf = Character('Eileen', color=(200, 255, 200, 255),
 | 
						|
                        ctc = anim.Blink("arrow.png", xpos=760, ypos=560),
 | 
						|
                        ctc_position="fixed")
 | 
						|
 | 
						|
    image eileen animated = Animation(
 | 
						|
        "9a_vhappy.png", 1.0,
 | 
						|
        "9a_happy.png", 1.0)
 | 
						|
 | 
						|
    image smanim = anim.SMAnimation(
 | 
						|
        "r",
 | 
						|
        anim.State("r", Solid((255, 0, 0, 255))),
 | 
						|
        anim.State("g", Solid((0, 255, 0, 255))),
 | 
						|
        anim.State("b", Solid((0, 0, 255, 255))),
 | 
						|
 | 
						|
        anim.Edge("r", .5, "g", dissolve),
 | 
						|
        anim.Edge("r", .5, "b", dissolve),
 | 
						|
 | 
						|
        anim.Edge("g", .5, "r", dissolve),
 | 
						|
        anim.Edge("g", .5, "b", dissolve),
 | 
						|
 | 
						|
        anim.Edge("b", .5, "r", dissolve),
 | 
						|
        anim.Edge("b", .5, "g", dissolve),
 | 
						|
        )
 | 
						|
 | 
						|
    image cyan base = Image("cyan.png")
 | 
						|
 | 
						|
    image cyan crop = im.Crop("cyan.png", 100, 0, 100, 200)
 | 
						|
 | 
						|
    image cyan composite = im.Composite((200, 300),
 | 
						|
                                        (0, 0), "cyan.png",
 | 
						|
                                        (0, 50), "cyan.png",
 | 
						|
                                        (0, 100), "cyan.png")
 | 
						|
 | 
						|
    image cyan green = im.Map("cyan.png", bmap=im.ramp(0, 0))
 | 
						|
 | 
						|
    image cyan alpha = im.Alpha("cyan.png", 0.5)
 | 
						|
    image eileen alpha = im.Alpha("9a_happy.png", 0.5)
 | 
						|
 | 
						|
    $ cyanpos = Position(xpos=700, xanchor='right', ypos=100, yanchor='top')
 | 
						|
 | 
						|
init:
 | 
						|
 | 
						|
    $ slowcirciris = ImageDissolve("circiris.png", 5.0, 8)
 | 
						|
    $ circirisout = ImageDissolve("circiris.png", 1.0, 8)
 | 
						|
    $ circirisin = ImageDissolve("circiris.png", 1.0, 8, reverse=True)
 | 
						|
    $ demotrans = ImageDissolve("demotrans.png", 3.0, 128)
 | 
						|
 | 
						|
    image circiris = "circiris.png"
 | 
						|
 | 
						|
label demonstrate:
 | 
						|
 | 
						|
    scene bg washington
 | 
						|
    show eileen happy
 | 
						|
 | 
						|
    e "I can give you a demonstration of some of the features in
 | 
						|
       Ren'Py, but you'll have to tell me what it is you'd like to
 | 
						|
       have demonstrated."
 | 
						|
 | 
						|
    menu demo_menu:
 | 
						|
 | 
						|
        "Simple transitions, updated in 4.8.5":
 | 
						|
 | 
						|
            e "Okay, I can tell you about simple transitions. We call
 | 
						|
               them simple because they aren't that flexible."
 | 
						|
 | 
						|
            e "But don't let that get you down, since they're the
 | 
						|
               transitions you'll probably use the most."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg whitehouse
 | 
						|
            show eileen happy
 | 
						|
            with dissolve
 | 
						|
 | 
						|
            e "The dissolve transition is probably the most useful,
 | 
						|
               blending one scene into another."
 | 
						|
 | 
						|
            with None
 | 
						|
            with fade
 | 
						|
 | 
						|
            e "The fade transition fades to black, and then fades back
 | 
						|
               in to the new scene."
 | 
						|
 | 
						|
            e "If you're going to stay at a black screen, you'll
 | 
						|
               probably want to use dissolve rather than fade."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with pixellate
 | 
						|
 | 
						|
            e "The pixellate transition pixellates out the old scene,
 | 
						|
               switches to the new scene, and then unpixellates that."
 | 
						|
 | 
						|
            e "It's probably not appropriate for most games, but we
 | 
						|
               think it's kind of neat."
 | 
						|
 | 
						|
            e "Finally, we can point out that motions can be used as
 | 
						|
               transitions."
 | 
						|
 | 
						|
            "..."
 | 
						|
 | 
						|
            "......"
 | 
						|
 | 
						|
            $ renpy.play('punch.wav')
 | 
						|
            with vpunch
 | 
						|
 | 
						|
            e "Hey! Pay attention."
 | 
						|
 | 
						|
            e "I was about to demonstrate vpunch... well, I guess I just
 | 
						|
               did."
 | 
						|
 | 
						|
            $ renpy.play('punch.wav')
 | 
						|
            with hpunch
 | 
						|
 | 
						|
            e "We can also shake the screen horizontally, with hpunch."
 | 
						|
 | 
						|
        "ImageDissolve transitions, added in 4.8.7.":
 | 
						|
 | 
						|
            e "ImageDissolve allows us to have dissolve transitions that are
 | 
						|
               controlled by images."
 | 
						|
 | 
						|
            e "This lets us specify very complex transitions, fairly
 | 
						|
               simply."
 | 
						|
 | 
						|
            e "Let's try some, and then I'll show how they work."
 | 
						|
 | 
						|
            e "There are two ImageDissolve transitions present by
 | 
						|
               default in the standard library."
 | 
						|
 | 
						|
            scene black with blinds
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with blinds
 | 
						|
 | 
						|
            e "The blinds transition opens and closes what looks like
 | 
						|
               vertical blinds."
 | 
						|
 | 
						|
            scene black with squares
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with squares
 | 
						|
 | 
						|
            e "The squares transition uses these squares to show
 | 
						|
               things."
 | 
						|
 | 
						|
            e "I'm not sure why anyone would want to use it, but it
 | 
						|
               was used in some translated games, so we added it."
 | 
						|
 | 
						|
            e "There are also a few transitions that aren't in the
 | 
						|
               standard library."
 | 
						|
 | 
						|
            e "These ones require images the size of the screen, and
 | 
						|
               so we couldn't include them as the size of the screen
 | 
						|
               can change from game to game."
 | 
						|
 | 
						|
            e "You can find them defined in the source of the demo
 | 
						|
               script."
 | 
						|
 | 
						|
            scene black with circirisin
 | 
						|
 | 
						|
            e "We can hide things with a circirisin..."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with circirisout
 | 
						|
 | 
						|
            e "... and show them again with a circirisout."
 | 
						|
 | 
						|
            e "It's even possible to have weird custom transitions."
 | 
						|
 | 
						|
            scene circiris with demotrans
 | 
						|
 | 
						|
            e "What we're showing here is the picture that's used in
 | 
						|
               the circiris transitions."
 | 
						|
 | 
						|
            e "If you take a look, the center of it is white, while
 | 
						|
               the edges are darker."
 | 
						|
 | 
						|
            e "When we use an ImageDissolve, the white will dissolve
 | 
						|
               in first, followed by progressively darker colors."
 | 
						|
 | 
						|
            e "Let's try it."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with slowcirciris
 | 
						|
 | 
						|
 | 
						|
            e "It's also possible to reverse the transition, so that
 | 
						|
               the black pixels are dissolved in first."
 | 
						|
 | 
						|
        "CropMove transitions, added in 4.5.":
 | 
						|
 | 
						|
            e "The CropMove transition class lets us provide a wide
 | 
						|
               range of transition effects."
 | 
						|
 | 
						|
            hide eileen with dissolve
 | 
						|
 | 
						|
            e "I'll stand offscreen, so you can see some of its modes. I'll read
 | 
						|
               out the mode name after each transition."
 | 
						|
 | 
						|
            scene bg whitehouse with wiperight
 | 
						|
 | 
						|
            e "We first have wiperight..."
 | 
						|
 | 
						|
            scene bg washington with wipeleft
 | 
						|
 | 
						|
            e "...followed by wipeleft... "
 | 
						|
 | 
						|
            scene bg whitehouse with wipeup
 | 
						|
 | 
						|
            e "...wipeup..."
 | 
						|
 | 
						|
            scene bg washington with wipedown
 | 
						|
 | 
						|
            e "...and wipedown."
 | 
						|
 | 
						|
            e "Next, the slides."
 | 
						|
 | 
						|
            scene bg whitehouse with slideright
 | 
						|
 | 
						|
            e "Slideright..."
 | 
						|
 | 
						|
            scene bg washington with slideleft
 | 
						|
 | 
						|
            e "...slideleft..."
 | 
						|
 | 
						|
            scene bg whitehouse with slideup
 | 
						|
 | 
						|
            e "...slideup..."
 | 
						|
 | 
						|
            scene bg washington with slidedown
 | 
						|
 | 
						|
            e "and slidedown."
 | 
						|
 | 
						|
            e "While the slide transitions slide in the new scene, the
 | 
						|
               slideaways slide out the old scene."
 | 
						|
 | 
						|
            scene bg whitehouse with slideawayright
 | 
						|
 | 
						|
            e "Slideawayright..."
 | 
						|
 | 
						|
            scene bg washington with slideawayleft
 | 
						|
 | 
						|
            e "...slideawayleft..."
 | 
						|
 | 
						|
            scene bg whitehouse with slideawayup
 | 
						|
 | 
						|
            e "...slideawayup..."
 | 
						|
 | 
						|
            scene bg washington with slideawaydown
 | 
						|
 | 
						|
            e "and slideawaydown."
 | 
						|
 | 
						|
            e "We also have a couple of transitions that use a
 | 
						|
               rectangular iris."
 | 
						|
 | 
						|
            scene bg whitehouse with irisout
 | 
						|
 | 
						|
            e "There's irisout..."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with irisin
 | 
						|
 | 
						|
            e "... and irisin."
 | 
						|
 | 
						|
            e "It's enough to make you feel a bit dizzy."
 | 
						|
 | 
						|
        "Positions and movement, updated in 4.8.":
 | 
						|
 | 
						|
            e "I'm not stuck standing in the middle of the screen,
 | 
						|
               even though I like being the center of attention."
 | 
						|
 | 
						|
            e "Positions, given with an at clause, specify where I'm
 | 
						|
               standing."
 | 
						|
 | 
						|
            e "The move transition moves around images that have
 | 
						|
               changed position."
 | 
						|
 | 
						|
            e "For example..."
 | 
						|
 | 
						|
            show eileen happy at offscreenleft with move
 | 
						|
 | 
						|
            e "I can move over to the offscreenleft position, just off
 | 
						|
               the left side of the screen."
 | 
						|
 | 
						|
            show eileen happy at left with move
 | 
						|
 | 
						|
            e "The left position has my left side border the left
 | 
						|
               margin of the screen."
 | 
						|
 | 
						|
            show eileen happy at center with move
 | 
						|
 | 
						|
            e "I can also move to the center..."
 | 
						|
 | 
						|
            show eileen happy at right with move
 | 
						|
 | 
						|
            e "... the right ..."
 | 
						|
 | 
						|
            show eileen happy at offscreenright with move
 | 
						|
 | 
						|
            e "... or even to offscreenright, off the right-hand side
 | 
						|
               of the screen."
 | 
						|
 | 
						|
            show eileen happy at right with move
 | 
						|
 | 
						|
            e "We don't limit you to these five positions either. You
 | 
						|
               can always create your own Position objects."
 | 
						|
 | 
						|
            # This is necessary to restart the time at which we are
 | 
						|
            # shown.
 | 
						|
            hide eileen happy
 | 
						|
 | 
						|
            show eileen happy at Move((1.0, 1.0, 'right', 'bottom'),
 | 
						|
                                      (0.0, 1.0, 'left', 'bottom'),
 | 
						|
                                      4.0, repeat=True, bounce=True)
 | 
						|
 | 
						|
            e "It's also possible to have a movement happen while
 | 
						|
               showing dialogue on the screen, using the Move function."
 | 
						|
 | 
						|
            e "Move can repeat a movement, and even have it bounce
 | 
						|
               back and forth, like I'm doing now."
 | 
						|
 | 
						|
            scene bg onememorial at Pan((0, 800), (0, 0), 10.0) with dissolve
 | 
						|
 | 
						|
            e "Finally, we can pan around an image larger than the
 | 
						|
               screen, using the Pan function in an at
 | 
						|
               clause."
 | 
						|
 | 
						|
            e "That's what we're doing now, panning up a picture of
 | 
						|
               the memorial to the Big Red One."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with dissolve
 | 
						|
 | 
						|
        "Animation, updated in 4.8.5":
 | 
						|
 | 
						|
            e "Ren'Py supports a number of ways of creating
 | 
						|
               animations."
 | 
						|
 | 
						|
            e "These animations let you vary images, independent of
 | 
						|
               the user's clicks."
 | 
						|
 | 
						|
            show eileen animated
 | 
						|
 | 
						|
            e "For example, I'm switching my expression back and
 | 
						|
               forth, once a second."
 | 
						|
 | 
						|
            e "Even though you clicked, I'm still doing it."
 | 
						|
 | 
						|
            e "This is an example of the Animation function at work."
 | 
						|
 | 
						|
            show eileen happy
 | 
						|
 | 
						|
            e "The Animation function is limited to simple lists of
 | 
						|
               images, with fixed delays between them."
 | 
						|
 | 
						|
            e "The sequence can repeat, or can stop after one
 | 
						|
               go-through."
 | 
						|
 | 
						|
            e "If you want more control, you can use the
 | 
						|
               anim.SMAnimation function."
 | 
						|
 | 
						|
            e "It can randomly change images, and even apply
 | 
						|
               transitions to changes."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene smanim
 | 
						|
            show eileen happy
 | 
						|
            with dissolve
 | 
						|
 | 
						|
            e "Here, we randomly dissolve the background between red,
 | 
						|
               green, and blue images."
 | 
						|
 | 
						|
            e "Psychadelic."
 | 
						|
 | 
						|
            with None
 | 
						|
            scene bg washington
 | 
						|
            show eileen happy
 | 
						|
            with dissolve
 | 
						|
 | 
						|
            e "It's probably best if we stop here, before somebody's
 | 
						|
               brain explodes."
 | 
						|
 | 
						|
        "Text tags, updated in 5.1.4.":
 | 
						|
 | 
						|
            e "Text tags let us control the appearance of text that is
 | 
						|
               shown to the user."
 | 
						|
 | 
						|
            e "Text tags can make text {b}bold{/b}, {i}italic{/i}, or
 | 
						|
               {u}underlined{/u}."
 | 
						|
 | 
						|
            e "They can make the font size {size=+12}bigger{/size} or
 | 
						|
               {size=-8}smaller{/size}."
 | 
						|
 | 
						|
            e "They let you pause{w} the display of the text,
 | 
						|
               optionally with{p}line breaks."
 | 
						|
 | 
						|
            e "They let you include {image=slider_idle.png} images
 | 
						|
               inside text."
 | 
						|
 | 
						|
            e "They can even change the
 | 
						|
               {color=#f00}color{/color}
 | 
						|
               {color=#ff0}of{/color}
 | 
						|
               {color=#0f0}the{/color}
 | 
						|
               {color=#0ff}text{/color}."
 | 
						|
 | 
						|
            e "There are also bold, italic, and underline style properties, which can
 | 
						|
               be styled onto any text."
 | 
						|
 | 
						|
            e "If you find yourself using text tags on every line, you
 | 
						|
               should probably look at style properties instead."
 | 
						|
 | 
						|
            e "Used with care, text tags can enhance {b}your{/b} game."
 | 
						|
 | 
						|
            e "{u}Used{/u} with {i}abandon,{/i} they {b}can{/b} make {b}your{/b}
 | 
						|
               game {color=#333}hard{/color} {color=#888}to{/color} {color=#ccc}read{/color}."
 | 
						|
 | 
						|
            e "With great power comes great responsibility, after all."
 | 
						|
 | 
						|
            e "And we want to give you all the power you need."
 | 
						|
 | 
						|
 | 
						|
        "Music, sound and movies, updated in 4.5.":
 | 
						|
 | 
						|
            e "Ren'Py supports a number of multimedia functions."
 | 
						|
 | 
						|
            e "You're probably hearing music playing in the
 | 
						|
               background."
 | 
						|
 | 
						|
 | 
						|
            $ renpy.music_stop(fadeout=0.5)
 | 
						|
            e "We can stop it..."
 | 
						|
 | 
						|
 | 
						|
            $ renpy.music_start('sun-flower-slow-drag.mid')
 | 
						|
            e "... and start it playing again."
 | 
						|
 | 
						|
            # This plays a sound effect.
 | 
						|
            $ renpy.play("18005551212.wav")
 | 
						|
 | 
						|
            e "We can also play up to eight channels of sound effects
 | 
						|
               on top of the music."
 | 
						|
 | 
						|
            e "We ship, in the extras/ directory, code to support
 | 
						|
               characters having voice."
 | 
						|
 | 
						|
            e "Finally, we support playing mpeg movies."
 | 
						|
 | 
						|
            if renpy.exists('Eisenhow1952.mpg'):
 | 
						|
 | 
						|
                e "Since you downloaded the Eisenhower commercial, I can show
 | 
						|
                   it to you as a cutscene."
 | 
						|
 | 
						|
                e "You can click to continue if it gets on your nerves too
 | 
						|
                   much."
 | 
						|
 | 
						|
                $ renpy.movie_cutscene('Eisenhow1952.mpg', 63.0)
 | 
						|
 | 
						|
                hide eileen
 | 
						|
                show movie at Position(xpos=420, ypos=25, xanchor='left', yanchor='top')
 | 
						|
                show eileen happy
 | 
						|
 | 
						|
                $ renpy.movie_start_displayable('Eisenhow1952.mpg', (352, 240))
 | 
						|
 | 
						|
                e "Ren'Py can even overlay rendered images on top of a movie,
 | 
						|
                   although that's more taxing for your CPU."
 | 
						|
 | 
						|
                e "It's like I'm some sort of newscaster or something."
 | 
						|
 | 
						|
                $ renpy.movie_stop()
 | 
						|
                hide movie
 | 
						|
 | 
						|
            else:
 | 
						|
 | 
						|
                e "You haven't downloaded the Eisenhower commercial, so we
 | 
						|
                   can't demonstrate it."
 | 
						|
 | 
						|
            e "That's it for multimedia."
 | 
						|
 | 
						|
        "Image Operations, added in 4.8.5":
 | 
						|
 | 
						|
            e "Image operations allow one to manipulate images as they
 | 
						|
               are loaded in."
 | 
						|
 | 
						|
            e "These are efficent, as they are only evaluated when an
 | 
						|
               image is first loaded."
 | 
						|
 | 
						|
            e "This way, there's no extra work that needs to be done
 | 
						|
               when each frame is drawn to the screen."
 | 
						|
 | 
						|
            show eileen happy at left with move
 | 
						|
            show cyan base at cyanpos with dissolve
 | 
						|
 | 
						|
            e "Let me show you a test image, a simple cyan circle."
 | 
						|
 | 
						|
            e "We'll be applying some image operations to it, to see
 | 
						|
               how they can be used."
 | 
						|
 | 
						|
            show cyan crop at cyanpos with dissolve
 | 
						|
 | 
						|
            e "The im.Crop operation can take the image, and chop it
 | 
						|
               up into a smaller image."
 | 
						|
 | 
						|
            show cyan composite at cyanpos with dissolve
 | 
						|
 | 
						|
            e "The im.Composite operation lets us take multiple images,
 | 
						|
               and draw them into a single image."
 | 
						|
 | 
						|
            e "While you can do this by showing multiple images, this
 | 
						|
               is more efficent, if more complex."
 | 
						|
 | 
						|
            show cyan green at cyanpos with dissolve
 | 
						|
 | 
						|
            e "The im.Map operation lets us mess with the red, green,
 | 
						|
               blue, and alpha channels of an image."
 | 
						|
 | 
						|
            e "In this case, we removed all the blue from the image,
 | 
						|
               leaving only the green component of cyan."
 | 
						|
 | 
						|
            show cyan alpha at cyanpos with dissolve
 | 
						|
 | 
						|
            e "The im.Alpha operation can adjust the alpha channel on
 | 
						|
               an image, making things partially transparent."
 | 
						|
 | 
						|
            show eileen alpha at left with dissolve
 | 
						|
 | 
						|
            e "It's useful if a character just happens to be ghost."
 | 
						|
 | 
						|
            with None
 | 
						|
            hide cyan
 | 
						|
            show eileen happy at left
 | 
						|
            with dissolve
 | 
						|
 | 
						|
            e "But that's not the case with me."
 | 
						|
 | 
						|
            show eileen happy with move
 | 
						|
 | 
						|
 | 
						|
        "User interaction.":
 | 
						|
 | 
						|
            e "Ren'Py gives a number of ways of interacting with the
 | 
						|
               user."
 | 
						|
 | 
						|
            e "You've already seen say statements and menus."
 | 
						|
 | 
						|
            e "We can also prompt the user to enter some text."
 | 
						|
 | 
						|
            $ povname = renpy.input("What is your name?")
 | 
						|
 | 
						|
            pov "My name is %(povname)s."
 | 
						|
 | 
						|
 | 
						|
            e "Imagemaps let the user click on an image to make a
 | 
						|
               choice."
 | 
						|
 | 
						|
            # This is an imagemap. It consists of two images, and a list of
 | 
						|
            # hotspots. For each hotspot we give the coordinates of the left,
 | 
						|
            # top, right, and bottom sides, and the value to return if it is
 | 
						|
            # picked.
 | 
						|
 | 
						|
            $ result = renpy.imagemap("ground.png", "selected.png", [
 | 
						|
                (100, 100, 300, 400, "eileen"),
 | 
						|
                (500, 100, 700, 400, "lucy")
 | 
						|
                ])
 | 
						|
 | 
						|
            # We've assigned the chosen result from the imagemap to the
 | 
						|
            # result variable. We can use an if statement to vary what
 | 
						|
            # happens based on the user's choice.
 | 
						|
 | 
						|
            if result == "eileen":
 | 
						|
                show eileen vhappy
 | 
						|
                e "You picked me!"
 | 
						|
 | 
						|
            elif result == "lucy":
 | 
						|
                show eileen concerned
 | 
						|
                e "It looks like you picked Lucy."
 | 
						|
 | 
						|
                # Eileen is being a bit possesive here. :-P
 | 
						|
                if date:
 | 
						|
                    e "You can forget about Saturday."
 | 
						|
                    $ date = False
 | 
						|
 | 
						|
            show eileen happy
 | 
						|
 | 
						|
            e "While these constructs are probably enough for most
 | 
						|
               visual novels, dating simulations may be more
 | 
						|
               complicated."
 | 
						|
 | 
						|
            e "The ui functions allow you to create quite complicated
 | 
						|
               interfaces."
 | 
						|
 | 
						|
            e "For example, try the following scheduling and stats screen,
 | 
						|
               which could be used by a stat-based dating simulation."
 | 
						|
 | 
						|
            $ day_planner()
 | 
						|
 | 
						|
            e "The ui functions can be used to rewrite many parts of
 | 
						|
               the interface."
 | 
						|
 | 
						|
            e "Hopefully, this gives you enough power to write any
 | 
						|
               visual novel you want."
 | 
						|
 | 
						|
        "Potpourri, added in 5.1.2.":
 | 
						|
 | 
						|
            e "Welcome to the potpourri section of the demo."
 | 
						|
 | 
						|
            e "Here, we demonstrate features that don't fit in any of
 | 
						|
               the other sections, but don't warrant their own
 | 
						|
               section."
 | 
						|
 | 
						|
            ectc "Here, we demonstrate a click to continue
 | 
						|
                  indicator. In this example, it's nestled in with the
 | 
						|
                  text."
 | 
						|
 | 
						|
            ectc "This also demonstrates the use of the anim.Blink
 | 
						|
                  function."
 | 
						|
 | 
						|
            ectcf "A click to continue image can also be placed at a
 | 
						|
                   fixed location on the screen."
 | 
						|
 | 
						|
            e "That's it for now."
 | 
						|
 | 
						|
 | 
						|
        " " # Empty, so we have a blank line.
 | 
						|
 | 
						|
        "That's enough for me.":
 | 
						|
 | 
						|
            return
 | 
						|
 | 
						|
    e "Is there anything else you want demonstrated?"
 | 
						|
 | 
						|
    jump demo_menu
 | 
						|
 | 
						|
 | 
						|
# Here, are a number of customizations that make the game look
 | 
						|
# better. We place them down here at the bottom, to make the first few
 | 
						|
# lines of the script look better.
 | 
						|
#
 | 
						|
# These can be deleted without issue, if you do not want them.
 | 
						|
 | 
						|
init:
 | 
						|
 | 
						|
    # Change some styles, to add images in the background of
 | 
						|
    # the menus and windows.
 | 
						|
    $ style.mm_root_window.background = Image("mainmenu.jpg")
 | 
						|
    $ style.gm_root_window.background = Image("gamemenu.jpg")
 | 
						|
    $ style.window.background = Frame("frame.png", 25, 25)
 | 
						|
 | 
						|
    # Change the look of the slider.
 | 
						|
    $ style.bar.left_gutter = 10
 | 
						|
    $ style.bar.right_gutter = 12
 | 
						|
    $ style.bar.left_bar = Frame("slider_full.png", 10, 0)
 | 
						|
    $ style.bar.right_bar = Frame("slider_empty.png", 12, 0)
 | 
						|
    $ style.bar.thumb = Image("slider_idle.png")
 | 
						|
    $ style.bar.hover_thumb = Image("slider_hover.png")
 | 
						|
    $ style.bar.thumb_shadow = Image("slider_shadow.png")
 | 
						|
    $ style.bar.thumb_offset = -10
 | 
						|
 | 
						|
    # Change some styles involving the margins and padding of the
 | 
						|
    # default window. (We need this, as we use a frame image that
 | 
						|
    # includes a drop-shadow.)
 | 
						|
    $ style.window.xmargin = 0
 | 
						|
    $ style.window.ymargin = 0
 | 
						|
    $ style.window.xpadding = 20
 | 
						|
    $ style.window.top_padding = 5
 | 
						|
    $ style.window.bottom_padding = 15
 | 
						|
 | 
						|
    # Interface sounds, just for the heck of it.
 | 
						|
    $ style.button.activate_sound = 'click.wav'
 | 
						|
    $ style.imagemap.activate_sound = 'click.wav'
 | 
						|
    $ library.enter_sound = 'click.wav'
 | 
						|
    $ library.exit_sound = 'click.wav'
 | 
						|
    $ library.sample_sound = "18005551212.wav"
 | 
						|
 | 
						|
    # Select the transitions that are used when entering and exiting
 | 
						|
    # the game menu.
 | 
						|
    $ library.enter_transition = pixellate
 | 
						|
    $ library.exit_transition = pixellate
 | 
						|
 | 
						|
# The splashscreen is called, if it exists, before the main menu is
 | 
						|
# shown the first time. It is not called if the game has restarted.
 | 
						|
 | 
						|
# We'll comment it out for now.
 | 
						|
#
 | 
						|
# label splashscreen:
 | 
						|
#     scene black
 | 
						|
#     show text "American Bishoujo Presents..." with dissolve
 | 
						|
#     $ renpy.pause(1.0)
 | 
						|
#     hide text with dissolve
 | 
						|
#
 | 
						|
#     return |