Programando un juego de navegador

muertet
ForoCoches: Miembro
#1




Explora habitaciones, derrota monstruos, conoce a otros jugadores y haz misiones en un mundo retro de píxeles. Bienvenido a Cubity.







El comienzo

Si tuviera que decir qué juego tuvo el mayor impacto en mi vida, no dudaría ni un segundo: Habbo Hotel.
La última versión disponible de Windows era Windows XP. Internet estaba lleno de juegos Flash y experimentos.

Habbo Hotel era un mundo en sí mismo: explorabas habitaciones laberínticas, hacías amigos y aprendías grandes lecciones cuando te estafaban y perdías todos tus "furnis".
Yo quería más. Soñaba con algún día salir del hotel y explorar esta pantalla y el resto del mundo Habbo:


Así que estaba claro. Tenía que crear mi propio hotel, tenía que aprender a programar.
Habbo moldeó mi vida no solo por el mundo que me presentó, sino porque me dio una profesión.
Mientras la mayoría de mis amigos pasaban el instituto sin saber qué harían, yo ya lo sabía: sería programador.

Elegir la tecnología

Elegir tecnología es un proceso aburrido para mí, porque si quieres estar seguro de tu elección, tienes que listar y probar cada opción.

Primero, tienes que pensar qué esperas del motor, cómo quieres que sea tu flujo de trabajo:
  • Quiero que sea fácil añadir nuevos modelos.
  • Sin binarios de por medio (es decir, poder entender y rastrear cada error sin mucha dificultad).
  • Tiempos de compilación bajos para iterar rápidamente.
Aunque hoy debería decir móvil, el objetivo del juego será el navegador.

Unity es una mala idea aquí porque su soporte para WebGL es bastante secundario. Es muy probable que compiles tu juego y obtengas un error ilegible, luego lo compiles de nuevo sin cambiar nada y de repente funcione...
Los tiempos de compilación y la cantidad de capas intermedias que no controlas lo hacen muy poco atractivo.

Necesitamos ir con un framework que ya esté basado en JS.

Conozco el trabajo de personas como Johnix y Kozen cuyas bases están construidas sobre PIXI.js. El problema es que PIXI no es un framework, es una parte de uno: un renderizador.

También conozco BitHotel. Un juego que parecía que iba a ser el Habbo 2.0 pero se quedó solo en promesa. Está hecho con Phaser y es 2.5D.


Cuando trabajas con 2.5D, añadir nuevos modelos es bastante laborioso porque tienes que cortarlos según las baldosas que ocupan para luego generar el efecto de tercera dimensión.

También tienes que prerenderizar el modelo en todas las orientaciones posibles. O si no es un modelo 3D, tienes que pintarlo varias veces.

(cómo se ve un sofá de BitHotel detrás de escena)

No soy modelador así que tengo cero paciencia para hacer esto.
En mi caso, tiene que ser 3D real para poder hacer e insertar modelos simples.
Si el entorno tiene que ser 3D y en JS, tendremos que ir con three.js.

Primeros pasos

La parte más básica del juego es tener habitaciones con baldosas y poder caminar en ellas, así que eso es lo primero que haremos.
Para eso, usaremos EasyStar.js, un sistema de pathfinding simple y ligero.
https://i.imgur.com/7rnTdWH.mp4

El siguiente paso es el multijugador.
Hoy en día hay una buena selección de servidores de juegos como Nakama o Colyseus que facilitan mucho el proceso.
https://i.imgur.com/L0P9tB7.mp4

También me tomé un tiempo para calcular la altura de los furnis al moverme.
https://i.imgur.com/HiQKJLn.mp4

Primer Furni

Y ya que estamos, también deberíamos intentar hacer y añadir nuestro primer modelo desde cero.
El software más sencillo para editar en modo voxel es MagicaVoxel.



En solo unos minutos pude hacer y añadir mi primer modelo personalizado.

¡Es la primera vez que puedo decir que modelar ha sido sencillo y divertido!

Se puede acceder al estado actual del juego en https://cubity.yelidmod.com/?utm_source=forocoches

¿Quieres enterarte de cuando publico el siguiente blog? ¡Avisa en tu comentario!

Índice de devblogs:
- Añadiendo multiplayer
- El Personaje, la Fuente y los NPCs
Ummita
Usuario Premium
#2
La web no me carga. Mucho ánimo y suerte!
muertet
ForoCoches: Miembro
#3
Cita de Ummita
La web no me carga. Mucho ánimo y suerte!
Debería :s ¿Qué mensaje te sale?
Asgrard
FloroCoches: Menbrium
#4
Hombre Habbo Hotel más que un juego, era un chat con muñequitos donde cada 1 tenía su habitación...

Lo tuyo, sí es un juego, así que enhorabuena por el proyecto.
muertet
ForoCoches: Miembro
#5
Cita de Asgrard
Hombre Habbo Hotel más que un juego, era un chat con muñequitos donde cada 1 tenía su habitación...

Lo tuyo, sí es un juego, así que enhorabuena por el proyecto.
Lo interesante es que por simple que era, siendo críos ya representaba todo un mundo de aventuras. En cambio a la que creces, te dan "sólo" las funcionalidades de habbo y dices "¿y con esto qué hago? ¿decorar una sala?¿Y luego qué?".


¡A ver cómo va!
muertet
ForoCoches: Miembro
#6
Añadiendo Multiplayer

La mejor manera de hacer un juego multijugador es teniéndolo en cuenta desde la base.
Eso es porque habrá acciones que quieras validar en el lado del servidor, lo que te obliga a trocear más el código.


Por ello he empezado ya a montar lo necesario para que los personajes aparezcan por orden del servidor y sus movimientos
sean sincronizados entre todos los participantes.

https://i.imgur.com/L0P9tB7.mp4


Primeros furnis
Yo no soy modelador, ni tengo paciencia para serlo. Teniendo esto en cuenta he estado probando varios programas de modelar y he encontrado MagicaVoxel.
Es casi perfecto.
Le permite a cualquier monguer hacer un objeto simple sin mayor dificultad.
En unas pocas horas he podido hacer todos estos:



Por desgracia no es perfecto como ya he dicho. La exportación de los modelos es muy mala.
Añade muchos triángulos innecesarios, no soporta el formato de salida que más me interesa y cuando es un modelo compuesto por múltiples objetos
no puedes exportarlos como uno solo.
Su creador se ha puesto a crear otro programa lo cual ha hecho que deje bastante de lado este (normal porque es gratuito, si no te pagan, para qué esforzarse).


Furnis sobre furnis
He implementado también la opción de poder poner furnis sobre otros furnis.
Es una chorrada pero creo que puede dar mucho juego a la hora de decorar salas y hacerlas más únicas.


https://imgur.com/Zl7dJTR


Estoy super contento por empezar a tener una base
muertet
ForoCoches: Miembro
#7
El Personaje, la Fuente y los NPCs


Para manejar correctamente los NPCs y al propio jugador, necesito tener ya el modelo final.

Contraté a una chica en Fiverr y… después de 1 semana esto fue lo que me envió:


Ignoró completamente la referencia. No quiero un personaje humano genérico

Tenía derecho a 1 revisión, así que le pedí que por favor mirara la imagen que le había enviado, y me mandó esto:


Honestamente, lo miro y no es como la imagen, pero no puedo explicar por qué. Aún no me gusta.
Además, se suponía que debía estar riggeado y no lo estaba, la ropa debía ser separada para poder crear más en el futuro… ignoró todo eso. Nunca escatimen en arte.



La Fuente

Estoy usando DEPIXEL y resulta que le faltan un montón de glifos. Se nota que fue hecha por un americano.

Para salir del paso, usé Glyphr Studio para añadir algunos glifos básicos. Pero no estoy dispuesto a expandir una fuente yo mismo.

Busqué qué fuente usaba Habbo, y resulta que crearon su propia fuente “Volter” y la hicieron open source cuando dejaron de usarla:
Anuncio de Volter.
(Su fuente tiene 323 glifos mientras que la que uso solo tiene 207.)

Estaba listo para descargarla y aplicarla, pero la justificación que dieron para dejarla me mató:
“no responsiva, solo 1 tamaño.” ¿Cómo que no responsiva? ¿Acaso las fuentes no son automáticamente responsivas?
Me encantaría usar su fuente, especialmente ya que no la usan más, pero ese tema de “no responsiva” me mató :S

NPCs

Otra parte central del juego son los NPCs. Quiero que cuando camines por la ciudad, no se sienta como un pueblo fantasma.
Quiero que puedas tener bots empleados y, en un futuro muy lejano, mascotas.

Así que configuré el ECS necesario para los NPCs de modo que su funcionalidad pueda expandirse fácilmente.
En las salas son “solo otro objeto,” así que puedes moverlos, colocarlos donde quieras y rotarlos.
Además tienes la opción de añadir componentes.

Por ejemplo, puedes añadir un componente de Diálogo para que cuando el usuario haga doble clic, muestre los diálogos que hayas configurado.
Con el componente Patrulla, los NPCs pueden caminar por la calle.

Gracias a cómo está configurado, esas opciones son parte del objeto, así que los usuarios también podrían comprar NPCs para construir mazmorras o contar historias más allá de usarlos como empleados.


Vista previa en video del comportamiento de la interfaz.

Detalles Menores

Mientras esperaba lo que pensaba que sería el modelo del jugador, trabajé en diseñar la pantalla donde verás la lista de amigos/mensajes privados.

Buscando ideas encontré este concepto increíble hecho por Wimell:



Y yo hice algo muy similar:


No funcional, pero creo que se ve bastante bien.

Los paneles de la interfaz mantienen su posición entre cerrar y abrir durante la sesión.
También puedes bloquear el personaje con
Código:
/lock
|
Código:
/unlock
para que no te moleste mientras construyes.
← A Videojuegos