Desarrollo pausado

Hola a todos.

Lamentamos informar que desde hoy detenemos el desarrollo de Sticks & Stones.

El presupuesto que teníamos planificado resultó insuficiente para nuestra idea, y a pesar de que lo dimos todo, las circunstancias externas fueron en nuestra contra y no logramos superarlas. A veces es así. No es un mensaje de fin, es un mensaje de pausa.

Buscaremos la manera de conseguir tiempo y presupuesto para continuar.

Gracias a todos por los comentarios, vídeos y palabras de aliento durante estos meses. Ha sido una experiencia increíble.

¡Hasta pronto!

El equipo de Sticks & Stones.

Y al tipo que dijo “bullshit” en nuestra página de Steam: ¡A freir espárragos!

Daños y resistencias

En Sticks & Stones hemos optado por un sistema de daños y resistencias, lo que significa que un arma que puede ser poderosa contra un enemigo pero débil contra otro. Lo mismo ocurre con los enemigos, que pueden ser vulnerables o resistentes a los diferentes tipos de daño.

Tipos de daño

Los objetos que causan daño, como las armas, definen uno o varios tipos de daño.

  • Perforante
  • Aplastante
  • Cortante
  • Hendidor
  • Fuego
  • Disparo
  • Virtual

En nuestro código, utilizamos un enum para catalogarlos.

public enum DamageType
{
    Piercing,
    Crushing,
    Slashing,
    Cleaving,
    Fire,
    Shoot,
    Virtual
}

Un arma podría combinar varios tipos de daño, por ejemplo un garrote con pinchos combinaría daño aplastante y perforante. Además para cada tipo de daño se define la cantidad de daño, pero eso lo veremos más adelante.

Armas

Las armas tienen varias propiedades en común. En nuestro código las agrupamos con 3 interfaces: IInventariable, IEquippable y IDamageDealer.

public abstract class Weapon : Wearable,
    IInventariable,
    IEquippable,
    IDamageDealer
{
    ...
}

Inventariable: indica que las armas pueden colocarse en un inventario, como por ejemplo la mochila.

public interface IInventariable
{
    InventariableType InventariableType { get; }
 
    float Weight { get; }
 
    bool Stackable { get; }
 
    short InventoryValue { get; }
}

Equipable: indica que las armas pueden equiparse en el cuerpo de un personaje.

public interface IEquippable
{
    List<BodyPart> AllowedEquippableAreas { get; }
 
    bool TwoHandsUse { get; }
}

Dañino: cualquier objeto que puede causar daños.

/// <summary>
/// Cualquier cosa susceptible de causar daño.
/// </summary>
public interface IDamageDealer
{
    /// <summary>
    /// Objeto con la configuración e información sobre el daño.
    /// </summary>
    DamageSource DamageSource { get; }
 
    /// <summary>
    /// Indica si puede ser lanzado o arrojado.
    /// </summary>
    bool CanBeHurled { get; }
}

La parte más interesante es IDamageDealer que es la interface que indica que un objeto puede causar daño mediante la propiedad DamageSource, que habla de la cantidad y tipos de daño.

DamageSource básicamente contiene un diccionario donde la clave es el tipo de daño y el valor es un entero que indica la cantidad de daño.

public class DamageSource
{
    public readonly Dictionary<DamageTypeint> DamageByType;
 
    #region Constructor
    public DamageSource(Dictionary<DamageTypeint> types)
    {
        DamageByType = types;
    }
    #endregion
}

Inicialmente DamageSource tenía propiedades adicionales relacionadas con efectos negativos (debuff) que se aplicaban al atacar. Pero es una mecánica que por ahora vamos a omitir del videojuego.

Estos son ejemplos de objetos dañinos (armas principalmente) que tenemos configurados en Sticks & Stones.

stone-axe-icon  Hacha de piedra
Hendidor = 13
wooden-bow-icon  Arco de madera
Disparo = 5
wooden-club-icon  Mazo de madera
Aplastante = 25
bone-knife  Cuchillo de hueso
Perforante = 4
Cortante = 2
*Daño potencial = 6
wooden-arrows  Flecha de madera
Perforante = 8

En el caso de las armas de proyectil, cómo los arcos, el daño que acaban causando depende también del proyectil que lanzan. Simplificando, se puede decir que un arma de proyectil causa un daño equivalente al suyo más el del proyectil que lanza. Según los ejemplos anteriores, un arco de madera que lanza flechas de madera, tendría un daño potencial de 13 (5 de disparo y 8 de perforante).

Resistencia y vulnerabilidad al daño

La resistencia o vulnerabilidad al daño es una propiedad que se configura en los personajes, pero también afecta al entorno, como por ejemplo un árbol.

Similar a cómo ocurre en las armas, en el código utilizamos una interface que indica si un objeto puede recibir daño.

Esta interface se llama IVulnerable.

public interface IVulnerable
    {
        uint BaseHitPoints { get; }
 
        int CurrentHitPoints { getset; }
 
        Dictionary<DamageTypeint> ResistencesByDamageType { get; }
 
        DamageInfo GettingDamage(
            CharacterBase owner,
            IDamageDealer damageDealer,
            ProjectileWeapon projectileWeapon,
            float damageMultiplier,
            AttackProperties attackProperties);
    }

La propiedad interesante es ResistencesByDamageType, que consiste en un diccionario donde la clave es el tipo de daño y el valor es el porcentaje de resistencia o vulnerabilidad a ese tipo de daño. Un valor negativo indica que es vulnerable y un valor positivo que es resistente. La omisión de un tipo de daño indica que no le afectará ni positivamente ni negativamente, es decir, un objeto que no tiene configuradas resistencias o vulnerabilidades recibirá el daño potencial del arma (13 siguiendo el ejemplo del arco y flecha u 6 del cuchillo de hueso).

Como dije, no solo los personajes son vulnerables al daño, hay objetos del entorno que también lo son, como por ejemplo los árboles.

forest-tree
Hendidor = -50%
Aplastante = 99%
Perforante = 80%
Disparo = 90%
Cortante = 80%
Fuego = -80%

Se puede observar que los árboles son especialmente vulnerables al daño hendidor (el que producen las hachas) y al fuego, y muy resistentes al resto de daños.

Los principales enemigos de Sticks & Stones, la míticas Holo-Balls, configuran sus propias resistencias y vulnerabilidades. La finalidad es crear estrategias y elecciones de armas específicas para cada enfrentamiento. No queremos que exista una sola arma poderosa, queremos que cualquier arma pueda ser útil.

En definitiva, en Sticks & Stones hay que experimentar para conocer y aprender sobre los enemigos y las armas.

¿Crees que este nivel de profundidad en el sistema de daños le sienta bien al videojuego?

El Concursante – III

¿Cuál es mi nombre?

Por si quieres refrescar la memoria, estos son los capítulos anteriores de la serie “El Concursante”: 

Mr. Palo, nuestro maniquí de pruebas, iba a dar el siguiente paso. Cuando tuvimos el primer prototipo listo y probamos como se sentía el videojuego, lo siguiente fue darle un lavado de cara para ver hacia donde encaminábamos el apartado artístico.

Este fue el primer cambio que sufrió después del prototipo inicial.

screenshot-2016-mayo-12-jpg

Durante la siguiente semana probamos juguetear con los colores y añadimos algunos elementos nuevos.

screenshot-2016-mayo-17

Y un mes después llegamos a esta versión.

screenshot-2016-junio-10

Como puedes ver, Mr. Palo se alimentó bien durante ese tiempo, pues ahora se ve más rellenito y parece un concursante.

Desde este momento, nuestro magnífico maniquí pasó a tener nombre propio.

Ferguson.

T O    B E    C O N T I N U E D . . .

Las 300 recetas de crafting

Una de las mecánicas que ofrece el videojuego es el Crafting, combinar elementos para crear nuevos.

En los inicios—empieza a quedar lejos—hablábamos de poder elaborar 300 elementos—que no espartanos—.  Hoy tenemos una visión muy distinta, creemos que habrá menos de 100. No por un tema de tiempo o coste—que podría ser un motivo totalmente válido—, sino por un tema de diseño. Creemos que le sienta mejor al videojuego, es más, es él quien lo pide.

Se trata de un videojuego difícil en el que hay que jugar varias partidas para ganar. Es necesario adquirir conocimiento y habilidad para superar el reto. Eso implica repetir, repetir y repetir.

El motivo inicial de pensar en 300 recetas—¡This is Sparta!—era en pro de la variedad, porque creemos que ayuda a que el factor de repetición no sea un lastre. Sin embargo, cuando nos hemos puesto a pensar qué puede construirse en un bosque, nos hemos dado cuenta de que estamos limitados. Esto sumado al echo de que no es un videojuego puramente de supervivencia, está más orientado a la acción y combate y por consiguiente el crafting está orientado a las armas, dejando en segundo plano los elementos de supervivencia.

Teniendo en cuenta esto, ¿Qué cosas podemos construir con lo que encontramos en un bosque?—Por supuesto, estamos abiertos a sugerencias—.

En cuanto a armas pensamos en: hacha, escudo, lanza, garrote, mazo, arco, flecha, honda, tirachinas, boomerang, cuchillo, ballesta, virote, cerbatana, dardo… En algunos casos en sus versiones de madera, bambú o hueso.

En cuanto elementos de supervivencia: bolsa de agua, saco para llevar cosas extras, carcaj y poco más. Descartamos muchas opciones porque no aportan a la jugabilidad, sobretodo por no tratarse de un videojuego puro de supervivencia, dónde tendría sentido construir huertos, refugios, muros, espantapájaros, para-rayos, sombreros, vendajes… En Sticks & Stones solo tenemos que preocuparnos por el hambre, la hidratación y el espacio en la mochila. No existen factores que puedan dañar al concursante, pues la fauna no es hostil y los enemigos son robots diseñados por el show con una IA incapaz de dañar al concursante.

Todo esto no anula el echo de que la variedad sigue siendo necesaria para lidiar con el factor repetitivo, pero debemos buscar otras formas de conseguirla. En este sentido estamos diseñado algunas mecánicas nuevas, que no solo encajan en el contexto del juego, sino que lo potencian. Se trata del crafting tecnológico, pero no voy a hacer spoiler, lo dejo para otro post 🙂

 

¡Celebrando el Greenlit!

Después de mucho sudor y lagrimas…

¡¡Hemos conseguido el aprobado en Steam Greenlight!!

greenlit

Ha sido toda una sorpresa y hemos vivido la incertidumbre y el desconcierto de no saber cuan lejos estábamos de conseguirlo durante todo el proceso.

Queremos compartir el camino, para que otros que se encuentren en la misma situación que nosotros, puedan tener referencias que les puedan guiar o servir de ayuda.

Iniciamos el proceso el 10 de febrero y nos dieron luz verde el 1 de marzo. Pasaron 20 días y esta ha sido la evolución.

Evolución general de estadísticas
greenlight-stats

Última foto después de la aprobación
greenlight-last-snapshot

Gráfica de visualizaciones y votos
greenlight-last-snapshot-graph

Los que estáis viviendo esta experiencia por primera vez, sabréis lo difícil que es conseguir visibilidad para vuestro videojuego.

Desde la publicación en Greenlight, hemos puesto todos nuestros esfuerzos en promocionar el videojuego. Facebook y Twitter son nuestras redes principales, pero también hemos abierto un canal de Youtube, contactado con youtubers y prensa —¡Nos escribieron un artículo en Hobby Consolas!—. Hemos participado en foros aportando nuestro granito a la comunidad, junto con este Blog… Y siempre que podemos nos apuntamos a eventos como las quedas informales de desarrollo de videojuegos, Barcelona Games World, en fin… En todos los fregaos que podemos.

Volviendo a Greenlight, cuando salimos de las primeras páginas de los más recientes la cosa se estancó. Se puede ver en el gráfico un pico inicial que corresponden con los dos primeros días.

Nuestra actividad en las redes no aumentaba el tráfico, así que decidimos mirar otras alternativas. Nunca hemos querido comprar votos, es algo que está fuera de nuestros intereses. Lo que necesitábamos era generar tráfico en nuestra página, atraer la atención y que la gente decidiera su voto—para bien o para mal—.

Por Twitter nos habían llegado mensajes ofreciéndonos servicios para generar tráfico. Miramos cómo funcionaban y decidimos contratar algunos. El resultado es el gran pico que se observa en la gráfica, se puede ver que conseguimos un montón de visitas, pero solo un porcentaje muy bajo se convierten en votos. Esto es mucho mejor que nada 🙂

Después de los efectos positivos que obtuvimos gracias a los servicios contratados y a nuestra perseverancia en las redes, vino de nuevo el bajón. Punto en el que empezábamos a plantearnos buscar alternativas. Pero en el momento menos esperado, parece que el señor o señora de Steam Greenlight que va aprobando indies, nos puso su sello.

Ahora estamos felices. Muy felices. De celebración por conseguirlo. Pero esto es solo el principio, nos queda mucho desarrollo por delante, tenemos que conseguir presupuesto para poder terminar Sticks & Stones.

Esto solo acaba de empezar…

¡Muchísimas gracias a todos y a todas por vuestro apoyo!

 

Clarisse, un indie desarrollado por Not Human Games

Hace poco hemos conocido un videojuego que está desarrollando Not Human Games, llamado Clarisse. Como nosotros, están en proceso de aprobación en Greenlight.

clarisse-animated

Creo que el videojuego es bueno y merece tener éxito, y por eso, me he decidido a redactar este post, para ayudarles a que lo conozca más gente.

Me he sentido especialmente identificado con ellos, pues es su primer videojuego y le están poniendo todo el esfuerzo y cariño posible. Eso se nota.

Aquí puedes ver el trailer oficial.

Una pincelada sobre el juego, sacada de un extracto contado por ellos.

Clarisse es un juego de mecánicas point and click con un fuerte componente narrativo enfocado en la investigación y en las respuestas emocionales del jugador.

El jugador adquirirá el rol de una inteligencia artificial llamada Clarisse, que fue creada para ayudar a un importante científico (el Dr. Matt) en sus investigaciones.

Trabajarás en una avanzada instalación científica y aprenderás por medio de diferentes mecánicas y experiencias narrativas que te darán la oportunidad de saber más sobre el experimento, el Dr. Matt e incluso sobre tí.

Disponen de una demo que he tenido el placer de jugar. La verdades que la he disfrutando mucho y me he quedado con ganas de más.

Si quieres saber más, puedes visitar su página en Steam Greenlight.

¡Les deseo toda la suerte!

 

Coqueteando con los cambios climáticos

Sticks & Stones – juego difícil e iterativo, donde prima nuestra habilidad y aprendizaje versus la memorización.

Bajo esta sencilla premisa, siempre hemos tenido en el horizonte a un Goliat con su mirada intimidante e inquietante, advirtiéndonos: variedad, variedad, variedad.

En un juego en el que perder está a la orden del día, y avanzar se hace duro pero muy satisfactorio, se presentan retos a nivel de diseño. Y la palabra variedad es de las que mejor definen muchas de las soluciones.

No es la primera vez que os hablamos sobre esto en el Blog:

Y volvemos a la carga del barco variedad coqueteando con los cambios climáticos… a ver qué os parecen:

¿Qué os parecen?

Si os gusta, compartid entre vuestros amigos.

El diseño de los alijos de supervivencia

deathSticks & Stones es un Rogue-like, y como tal, la elevada dificultad y la permadeath (muerte permanente) forman parte de sus características principales. Vamos a tener que jugar una y otra vez para conseguir ganar este reality show.

A nivel de diseño esto nos pone en un aprieto, pues tenemos que conseguir que la experiencia de juego no se haga pesada o aburrida.

A grandes rasgos, la estructura del videojuego se puede resumir en planificación+combate. La parte de combate no es problema, es pura acción y la diversión está asegurada. Sin embargo, en la parte de planificación, que incluye: exploración, supervivencia, recolección y crafting, es donde debemos andar con más cuidado, porque son mecánicas lentas. Es aquí donde entran en juego los alijos de supervivencia.game-structure

Los alijos de supervivencia serán una de las mecánicas, entre otras tantas, que ayudarán a que la parte de planificación sea más entretenida. Lo que se pretende con los alijos, es potenciar la exploración añadiendo un pequeño componente aleatorio que otorgará ventajas al concursante entre partidas.

karmaA un nivel contextual, los alijos de supervivencia son creados por los mismos concursantes, como una forma para ayudarse entre ellos. Aquí jugamos un poco con el Karma, pues la idea es que si escondes algo bueno en un alijo para que otro se lo encuentre, tu Karma será positivo y es posible que alguien te devuelva ese favor. Aterrizando este concepto en el juego, la idea es que si en una partida escondes algo de valor, en tu siguiente partida encontrarás algo de valor equivalente.

Esta mecánica es una de las pocas que transciende entre partidas, ofreciendo al jugador una manera de comunicarse entre ellas y otorgandole ventajas que le permitan avanzar cada vez más lejos. Además está perfectamente integrada en el contexto, para que el jugador pueda sentir lo duro que es el reto que propone el reality show y decida si quiere ayudar a otros—o a sí mismo-—a obtener el premio.

Hasta aquí el concepto, pero ahora explico como resolvemos esta mecánica y que se va a encontrar el jugador durante la partida.

En la zona central, especialmente diseñada para planificarse y donde comienza la partida, el concursante tendrá que explorar, recolectar y construir cosas. En definitiva, preparase para la supervivencia y el combate. Durante la exploración, si se presta la suficiente atención al entorno, podremos encontrar el alijo, que se descubrirá por emitir un sutil brillo intermitente. Al situarnos en el origen del brillo se habilitará una opción para cavar en el suelo. No será necesario ninguna herramienta, el concursante cavará con sus propias manos poniendo al descubierto el botín, del que podremos coger todo lo que queramos y/o dejar cosas para que el próximo concursante las encuentre.

Internamente los objetos del juego tienen un valor, que se utiliza para calcular el valor total del alijo.

Por ejemplo, un alijo de valor 18 podría contener objetos que sumen hasta un total de 18:

1 × Lanza de madera (8) 1*8 = 8  wooden-spear
1 × Cuchillo de hueso (10)  1*10 = 10  bone-knife
wooden-spearbone-knife = 18

4 × Flecha de madera (3)  4*3 = 12  wooden-arrowswooden-arrowswooden-arrowswooden-arrows
1 × Cuerda (4) 1*4 = 4  rope
wooden-arrowswooden-arrowswooden-arrowswooden-arrows rope = 16

Este factor aleatorio, permitirá que el jugador pueda encontrar y utilizar objetos que no conoce, incentivando la experimentación con el crafting y añadiendo un punto de emoción al encontrar el alijo.

Esto es todo por ahora en cuanto los alijos de supervivencia, pero tenemos varios puntos abiertos, como por ejemplo si hay límite máximo en el valor de un alijo o si hay un número máximo de objetos que puede contener. También nos preguntamos: ¿se debe enterrar el alijo para considerase válido?

Te animo a que opines sobre está mecánica y nos ayudes a decidirnos por las dudas pendientes que nos quedan.

¡Muchas gracias!

 

Generación Procedural o cómo generar escenarios sexys

Querido lector. Si tienes curiosidad de ver cómo las matemáticas pueden ayudar a generar mapas aleatorios tan hermosos como el siguiente, ¡este es tu articulo! Agárrate que vienen curvas.

central-zone-2

En cada partida de Sticks & Stones, los mapas son diferentes, para que el jugador no pueda memorizarlos y haga uso de la habilidad y su experiencia para superarlos. Además, es un juego difícil, donde se repite una y otra vez lo mismo. Por lo tanto, la variedad es una característica esencial en la generación de mapas.

Crear pantallas lo más mutables, bonitas y orgánicas posibles, es una muy buena manera de conseguir esta variedad ¿Pero cómo se puede lograr esto? Con algo llamado generación procedural:

En computación generación procedural es el método de creación de datos con algoritmos en lugar de forma manual

Es decir, que para generar las pantallas es necesario recurrir a las matemáticas y a sus fórmulas. ¡Ah! Las matemáticas… yo siempre me preguntaba de pequeño que para qué diablos sirven las matemáticas en la vida… 😛

Volviendo al tema, para nuestra generación de mapas, hemos usado un algoritmo llamado Perlin Noise. Para entender su funcionamiento, vamos a imaginarnos una onda de radio. Y que mediante 3 parámetros (frecuencia, amplitud y octavas), podemos llegar a cambiar su apariencia. En el siguiente gráfico hay algunos ejemplos visuales:

perlinnoise

  • La frecuencia determina el número de ondas
  • La amplitud determina la altura de las ondas
  • Las octavas determina la suavidad de las ondas

Una vez explicado esto, vayamos a cómo implementar esta onda a nuestra generación de mapas. Para ello, primero vamos a crear celdas con texturas totalmente planas. En nuestro ejemplo vamos a usar un mapa de 3×3.

1

A continuación se genera un Perlin Noise de 3 dimensiones XYZ para cada una de las celdas. Donde la XY son las coordenadas del píxel, y la Z es la ALTURA.

En la siguiente animación tenéis 3 muestras de 3 generaciones distintas de Perlin Noise. Fijaos en lo diferentes que pueden llegar a ser unos mapas de otros. Para facilitar su visualización, se ha establecido una franja de color distinto a cada una de las ALTURAs.

5-7-6

Ahora solo falta establecer una relación entre ALTURATEXTURA. En este caso usamos la misma que utilizan los mapas topográficos,

world_map

Para nuestro ejemplo vamos a usar la siguiente relación:

[∞ .. 300] = Hierba
[0 .. -200] = Tierra
[-500 .. -700] = Tierra con piedras
[-900 .. ∞] = Agua (transparencia del 10%) 

Y estas son las texturas que vamos a usar para la generación:

texturas

Si metemos en una coctelera el Perlin Noise, las franjas de terreno y las texturas, obtenemos este resultado:

5-7-6

Si este proceso lo repetimos, variando únicamente uno de los valores base como puede ser la frecuencia, la amplitud o las octavas, el resultado puede llegar a cambiar bastante.

Amplitud = 1 (menos diferencia entre altura mínima y máxima)

5-1-6

5-1-6

Frecuencia = 1 (espacio entre cambios de altura más espaciados)

1-7-6

1-7-6

Octavas = 1 (transición entre alturas mucho más suavizada)

5-7-1

5-7-1

Mediante este sencillo proceso de configurar un Perlin Noise, estableciendo las franjas de terreno y texturas,  podemos obtener resultados como estos:

magma

meadowsnowedswampdesertwater

Llegados a este punto, lo único que falta por hacer es colocar objetos en el terreno, y para ello volveremos a usar la ALTURA y vincular en este caso OBJETOS (usando un % de aparición).

Veamos un ejemplo:

[∞ .. 500] = Árboles
[500..0] = Plantas, flores
[0 .. -200] = Rocas
[-500 .. -700] = Piedras, árboles secos
[-900 .. ∞] = Juncos

¡¡Y aquí tenéis el resultado!! forest

¿No es fascinante lo natural que parecen los objetos una vez colocados?

La ventaja de configurar todo el escenario en base al concepto de la ALTURA, es que si se desplaza la base de esta ALTURA, el escenario cambia:

forest

Si ahora le aplicamos un efecto de desenfoque en la parte superior e inferior, además de unos bonitos rayos de luz, obtenemos el aspecto que tiene en la actualidad el juego:

central-zone-2

Si te ha gustado el artículo: comenta y comparte.

¡Gracias!