Por José Román Hdez / @Manz
Creador de Emezeta.com
Colaborador en Naukas.com
¿Quién no sabe usar un navegador?
Simplemente, centrarse en la historia
Porque todo es mejor con amigos (o rivales)
En cualquier lugar.
En cualquier momento.
Cualquiera puede participar y colaborar
Si no tenemos un servidor de alojamiento...
Descomprime en la carpeta de tu servidor web.
Ahora... ¡simplemente accede desde un navegador!
En la carpeta games se encuentran los diferentes juegos.
El motor incluye un juego de ejemplo: default.
Escenas del lugar, imágenes del objeto (inventario), música, etc...
Recomendaciones: Formato JPEG, 700x300 píxels. HDR.
Gracias a Abandonalia, Abandonado a su suerte y Iñaki Couceiro
Recomendaciones: Formato JPEG, 128x128 píxels.
Conversaciones de los usuarios en las diferentes localidades
Contenido | Carpeta | Archivo | ¿Qué contiene? |
---|---|---|---|
Localidades | data | _______.json | Mirar, andar, etc... |
Objetos | data | items.json | Items de inventario |
Jugadores | users | _______.json | inventario, acciones... |
Crearemos un archivo de texto en la carpeta «data».
Por ejemplo, calle.json
Creamos un bloque inicial vacío.
{
}
Los bloques se crean mediante llaves { }
Cada elemento que crearemos tendrá esta estructura:
"elemento": "valor"
"elemento": ["valor1", "valor2", ... ]
En el bloque info especificaremos información del lugar:
{
"info": {
}
}
Por ejemplo, el nombre, imagen y descripción:
{
"info": {
"name": "lugar",
"image": "lugar.jpg",
"description": "Esta parece la zona más vieja del pueblo. Varias casas antiguas aparecen a lo largo de la calle, y sus puertas, cerradas. Algunas grandes macetas adornan la estancia. Un poste de madera sujeta un cartel."
}
}
(Las imágenes deben situarse en la carpeta «assets»)
¡Ojo a las comas!
Creamos un nuevo bloque llamado data:
{
"info": {
...
},
"data": {
}
}
Dentro, creamos un nuevo bloque llamado exits:
{
"info": {
...
},
"data": {
"exits": {
}
}
}
Y los lugares a los que podemos ir:
{
"info": {
...
},
"data": {
"exits": {
"sur": "taberna",
"oeste": "hospital",
"este": "prision"
}
}
}
Por ejemplo, al sur se llega al lugar taberna.json
Norte, sur, este, oeste, subir, bajar, entrar, salir.
Con condiciones (necesitas la llave roja):
{
"info": {
...
},
"data": {
"exits": {
"sur": {
"required" : "llave roja",
"target" : "taberna",
"excuse" : "La puerta está cerrada con llave."
}
}
}
}
Creamos un archivo items.json donde colocaremos TODOS los items que podemos guardar en nuestro inventario.
Con condiciones (necesitas la llave roja):
{
"llave roja": {
"room": "calle.json",
"image": "llave_roja.jpg",
"look": "Una paqueña llave roja.",
"message": "He cogido la llave roja."
},
...
}
Los items son objetos de inventario.
Las acciones son hechos transparentes.
Al visitar un lugar, se crea la acción lugar_visited.
Al mirar un objeto (con condiciones superadas), se crea la acción objeto_seen.
Si tienes brújula llegas, si no la tienes, te pierdes:
{
"info": {
...
},
"data": {
"exits": {
"sur": {
"required" : "brujula",
"target" : "casabosque",
"else" : "bosque"
}
}
}
}
Objetos de inventario, en items.json.
Objetos del lugar, en el archivo concreto: calle.json.
Objetos de inventario: en items.json.
{
"info": {
...
},
"data": {
...
},
"mirar": {
"muro": "Hay un muro de ladrillos justo delante de ti.",
"ladrillo": "Ladrillos pequeños, rojos y de aspecto antiguo."
}
}
Nombre general: alternativa1, alternativa2...
{
...
"synonyms" : {
"ladrillo": ["ladrillos", "bloque", "bloques"]
},
"mirar": {
"muro": "Hay un muro de ladrillos justo delante de ti.",
"ladrillo": "Ladrillos pequeños, rojos y de aspecto antiguo."
}
}
Crear una acción y aumentar puntos:
{
...
"mirar": {
"pared": {
"message": "Hay una sospechosa inscripción que dice «45823».",
"setAction": "inscripcion_vista"
}
}
}
Útil para contadores (inc +1):
{
...
"mirar": {
"pared": {
"message": "Hay una sospechosa inscripción que dice «45823».",
"setAction": "inscripcion_vista",
"inc" : "score"
}
}
}
También es posible decrementar y/o especificar la cantidad:
{
...
"mirar": {
"pared": {
"message": "Hay una inscripción maligna: «BELÉN ESTEBAN».",
"setAction": "inscripcion_maligna_vista",
"dec" : "score@5"
}
}
}
Es posible especificar condiciones más complejas en required:
{
"info": {
...
},
"data": {
"exits": {
"sur": {
"required" : "brujula",
"target" : "casabosque",
"else" : "bosque"
}
}
}
}
Al margen del final oficial de la historia, es posible (y recomendable) crear finales alternativos.
Creamos bloque ends, dentro del bloque data del lugar donde quieres que finalice la aventura:
{
"data": {
"exits": {
...
},
"ends": {
"good": {
"required": ["house_visited", "mapa_seen", "#score@200"],
"title": "Good ending",
"text": "Mensaje del final",
"showscore": "score"
}
}
}
}
También se puede usar target para redirigir a una URL.
Lo que está por venir...
Contacto: manz@emezeta.com