…y ya no lo es. Una puerta ha aparecido, pero esta puerta tiene una condición, la puerta solo se abrirá si Willem Dafoe está en la zona. Esta puerta en el código se ve así:
"Hay una puerta"
if dafoe:
"La puerta se abrió"
else:
"La puerta no se abrió"
"Continuemos"
El comando if abre un código que solo se ejecutará si una condición especifica se cumple, en este caso «La puerta se abrió» solo aparecerá si Dafoe está en algún lado, de no estar se ejecuta el comando en el bloque else. El problema es que tal cual como está la cosa Ren’Py lanzará un error pues para lo que le concierne, Dafoe no existe. Para informarle a Ren’Py que Dafoe existe lo declaramos en el bloque init.
init:
$ dafoe = False
label start:
"Hay una puerta"
##########################
if dafoe:
"La puerta se abrió"
else:
"La puerta no se abrió"
##########################
"Continuemos"
Con esto el juego ahora sabe que el duende verde existe… pero no está en las cercanías, así que al llegar a la sección con el if y el else (Que separamos usando #############) ejecutará el else y mostrará «La puerta no se abrió». Si cambiaramos la cosa en el bloque init a True entonces significa que Dafoe está en la cercanía, así que la puerta se abrirá.
Peeeeeeeeero eso no es muy divertido, la idea es darle al jugador la opción de decidir si Dafoe está o no en las cercanías. Para eso hacemos un menu:
init:
$ dafoe = False
label start:
"Hay una puerta"
menu:
"Y Willem Dafoe está cerca":
$ dafoe = True
"Y no hay nadie más en la cercanía":
pass
##########################
if dafoe:
"La puerta se abrió"
else:
"La puerta no se abrió"
##########################
"Continuemos"
Nótese que siempre colocamos «dafoe» y nunca «Dafoe». Las variables son sensibles a las mayúsculas y no pueden ser palabras separadas (Pueden escribir Ultra7, ultra7 o incluso ultra_7 pero no ultra 7). En la misma vena no pueden usar símbolos matemáticos como + o – como nombre.
En fin, ahora el jugador tiene completa potestad sobre si Dafoe está o no en las cercanías y si la puerta se abrirá o no. Fíjense en que colocamos $ en el bloque de menu, cuando el programa pase por esta parte cambiará la variable según se indique y como se indique (En este caso el simbolo de = cambia su valor de False a True, dejamos pass en la otra opción pues es un comando que le dice al menu que no haga nada pues dafoe igual es False por defecto) con esto en mente podemos cambiar variables a medida que el juego avanza en lugar de que tenga que ocurrir solo en menus.
Una cosa curiosa es que si no tuviera el bloque else, entonces el flujo del juego haría que la puerta fuera más algo que solo ocurre si Dafoe está en la cercania pero que de no estar ni cuenta de que está ahí se daría.
init:
$ dafoe = False
label start:
"Hay una ruta"
menu:
"Y Willem Dafoe está cerca":
$ dafoe = True
"Y no hay nadie más en la cercanía":
pass
##########################
if dafoe:
"Hey niña, mira esa puerta"
"Interesante"
##########################
"Continuemos"
Sin el bloque else, en lugar de indicar incluso ante la carencia de Dafoe que hay una puerta, la puerta solo se hará notar de estar Dafoe cerca.
Pero digamos que queremos invertir la condición, que la puerta solo se abrirá si Dafoe NO está cerca, para ello hacemos un simple cambio.
init:
$ dafoe = False
label start:
"Hay una puerta"
menu:
"Y Willem Dafoe está cerca":
$ dafoe = True
"Y no hay nadie más en la cercanía":
pass
##########################
if not dafoe:
"La puerta se abrió"
else:
"La puerta no se abrió"
##########################
"Continuemos"
Fíjense que if dafoe cambió a if not dafoe. Si if busca que la variable sea True, entonces if not busca que la variable sea False. Con este cambio hemos invertido las condiciones para que la puerta se abra.
Lo que hemos visto acá se le conoce como «Booleans», y en el caso de los videojuegos se les suele llamar «Flags», son perfectos para indicar en el codigo que algo ocurrió (O no).
Pero las variables pueden hacer más que esto.