¡Extra!
Labels
Profundicemos acá más sobre los labels y como funcionan.
Los labels son «Portales» en el flujo del programa, marcas que podemos llamar o a las que podemos volver a conveniencia. Si tenemos en el juego algo como:
label start:
"A"
"B"
label afterintro:
"C"
return
Entonces podemos colocar la opción de volver a empezar saltándose «A» y «B». Los labels no cortan el flujo del juego, por lo cual el juego avanzará sin problema desde el label donde empieza atravesando otros labels en el proceso.
Los labels se declaran cuando son incluídos en el código, si se trata de hacer algo con un label que no ha sido usado el programa arrojará error diciendo que el label no existe.
Existen dos operaciones que podemos hacer con labels:
jump
Cuando le decimos al juego que salte a un label, el control del juego pasará a ese label en especifico, y de encontrarse con un return el juego terminará.
La principal ventaja de este comando además de que permite más orden sobre que ocurre y cuando, es que permite dividir la historia entre varios archivos. Mientras los archivos .rpy estén dentro de la carpeta game del proyecto, Ren’Py los considerará parte del programa. Así que digamos que tenemos esto en script.rpy:
label start:
"A"
jump part2
Siempre y cuando hayas colocado «label part2:» en alguno de los archivos dentro de game, el juego saltará a el así no esté en script.rpy.
El otro comando que se puede usar con labels es:
call
Que es básicamente lo mismo que jump pero el control pasará solo hasta que se encuentre con un return. Esto significa que al toparse con return o el final del archivo en el otro label, el juego retomará exactamente donde se quedó. Si escribimos esto:
label start:
"A"
call part2
"C"
return
label part2:
"B"
return
El juego mostrará «A», llamará al label para mostrar «B», terminará el label y volverá donde se quedó para mostrar «C» y luego terminar el juego. Si call fuera jump entonces mostraría «B» y terminaría pues se pasó el control total a part2.
La teoría dicta que return pasa el control a un contexto más bajo (Con el más bajo siendo el main menu) y call crea un contexto nuevo encima del que se está ejecutando, si dentro de un label al que se le hizo call se hace call de nuevo entonces serían necesarios dos return para volver al flujo normal.
Si están dentro de un call, pero quieren terminar el juego entonces en lugar de return habría que colocar $renpy.full_restart() (full_restart tiene más funciones, pero las veremos luego).
Además de esto, hay dos labels especiales que hay que tomar en cuenta.
start
Es el label para iniciar por defecto. Si se meten en screens.rpy y buscan la parte que dice Start(), podrían escribir Start(«dingus») y el juego iniciaría en el label «dingus» en lugar de en start. Es solo el label por defecto de Ren’Py.
splashscreen
Este es un label que se ejecutará antes de que el juego llegue al menú principal. En splashscreen se pueden incluir intros, videos y cosas similares. Notese que como todo label debe terminar con return.