These files belong to Ren'Py version 1, which I never released publicly. This first version of Ren'Py really emphasized the Py portion of the name, with Ren'Py being essentially a set of Python libraries that made making Visual Novels, which I was calling Ren'Ai games back then, easier.
Basically, the way Ren'Py 1 worked was that what we'd call labels now were Python functions, which contained calls to other python functions to show and hide dialogue, and do the other things involved with displaying a visual novel. It's fair to say that this would be a very high-overhead language compared to modern Ren'Py.
Still, it included many of the features that we see on today's Ren'Py. The simple "game" that I wrote to test the engine includes equivalents to the scene, show, and hide statements. Show also had the current behavior of replacing a currently showing image, so it was easy to change emotions. The engine includes the ability to display menus, and to prompt the user for text like the renpy.input statement does now.
There was a Character object back then, but the use of the object was to organize images, rather than dialogue.
If I remember correctly, Ren'Py v1 took me a day or two to design, and one day to code. I abandoned it just as quickly, when I realized that it wouldn't be possible to make satisfying load and save code using Python only. I recycled some of the code into Ren'Py v2-3, and at least a little bit of it survived pretty much intact to today, such as the equivalent to the Frame displayable.
To celebrate 5 years, I'm posting a few screenshots, the example script, and the complete source code to Ren'Py 1. The latter includes a small fix so that it runs on my Ubuntu box. It requires pygame and numpy to run, and I've never tested it on Windows or Mac, so you'd be on your own there. You run it using the command:
Code: Select all
python main.py game1
Thanks go to Lemma, who created this forum, made Tales of Lemma 1, and gave me permission to use his Miko art in the demo. If he hadn't done these things, it would have been less likely that Ren'Py would have gotten going.
If anyone shows the slightest degree of interest, I'm considering posting a series of Ren'Py @ 5 messages between now and the 5th anniversary of the initial release of Ren'Py 4, the current codebase.
Complete Ren'Py v1 Demo Game source code:
Code: Select all
from renpy.locals import *
screen_width = 640
screen_height = 480
box_image = "box.png"
box_border = 15
box_vpadding = 6
box_hpadding = 15
line_height_fudge = -2
line_height_newline = 2
vbox_margin = 1
default_box_minheight = 125
text_color = (255, 255, 255, 255)
choice_color = (0, 255, 255, 255)
selected_color = (255, 255, 0, 255)
message_cps = 0
font_file = "/usr/share/fonts/truetype/freefont/FreeSans.ttf"
font_size = 16
say_width = screen_width - 10
say_yoffset = -5
say_label_width = 150
menu_width = screen_width - 10
menu_yoffset = -5
cmenu_width = screen_width / 2
prompt_width = int(0.75 * screen_width)
def img(n):
return image("lemma/Char%d.png" % n, key=[255, 0, 255])
store1 = image("s1.jpg")
dark = image("dark.jpg")
miko_images = {
'happy' : img(1),
'vhappy' : img(2),
'sad' : img(3),
'mad' : img(4),
'question' : img(5),
'tounge' : img(6),
'sweat' : img(7),
}
miko = Character(miko_images)
miko.name = "Miko"
def start_scene():
scene(store1)
show(miko, 'happy')
say(miko, "Hi, I'm Miko! What's your name?")
while True:
global user
user = prompt("My name is...", 16)
if not user:
show(miko, 'mad')
say(miko, "Why won't you tell me?")
else:
break
show(miko, 'happy')
say(miko, "Good to meet you, %s." % user)
menu("Where do you want to go?",
('The movies', movies_scene),
('The moon', start_moon))
def movies_scene():
scene(dark)
show(miko, 'happy')
say(miko, "Now we're at the movies, which is why it's so very dark.")
def start_moon():
show(miko, 'mad')
say(miko, "I'll send you to the moon!")
def default_scene():
scene(dark)
show(miko, 'question')
say(miko, "I don't know how we've gotten here, but we've fallen through to the default scene.")
say(user, "How will we get out of here?")
show(miko, 'happy')
say(miko, "Don't worry. I'll use my magic to get us back to the start scene.")
return start_scene
def console():
import code
ic = code.InteractiveConsole()
ic.interact("Type python commands, or run_fragment(frag) to run a fragment.")
return
def esc_menu():
cmenu("Command Menu",
"",
("Return to playing.", None),
("Go Interactive.", console),
("Quit.", quit))