HollowBond/Public/md/chat-gpt.md

11 KiB

Buenos días, ChatGPT. ¿Qué tal? Voy a hacer un experimento por una cosa que me dijo un amigo, a ver qué sale de esto. La idea es que te voy a solicitar que me hagas un juego para navegador el cual se llamara HollowBond el cual ha de funcionar tanto con protocolo HTTP:// como por protocolo FILE://, es decir, JS no puede tener importaciones, sino que han de adjuntarse los ficheros en las etiquetas HTML script. Por otro lado, el proyecto quiero que se divida de la siguiente forma: un directorio raíz con el nombre del juego donde encontremos un README.md con la documentación básica del proyecto y si hiciera falta, un índice a otros archivos MarkDown los cuales estarán, si hicieren falta, en un directorio llamado MD; un archivo .gitignore donde se ignore el /Data, /Public/data, los archivos de caché de SASS y cualquier archivo que contenga las palabra secret; luego, un directorio llamado Tools donde se meterán Scripts que sean necesarios para cualquier funcionalidad adicional que se requiera; luego tendríamos un directorio llamado Public donde estará la parte pública del proyecto el cual tendrá el archivo index.html, una carpeta data donde se puedan meter archivos diversos no pertenecientes al proyecto o que éstos sean alterables o generables por los usuarios finales, así como Assets externos, como puede ser la librería de ThreeJS que no sean propios del proyecto; una carpeta ecma donde se estructurará el proyecto JS; y un directorio scss con los archivos de estilos necesarios.

Los archivos SCSS será uno que una todos, otro que sea la configuración y otro que sean los estilos en cuestión. Si hiciere falta meter más, se meten más, y la compilación se haría ahí mismo. El archivo principal se llamaría HollowBond.scss y el archivo compilado sería HollowBond.css. En el directorio Tools meteremos un archivo bat y otro sh para poder llamarlos y compilar el SASS.

Por otro lado, tenemos los archivos JS, los cuales estarán todos dentro de /Public/ecma en un árbol de directorios los cuales son: Application, donde se almacenarán los archivos propios de aplicación como puede ser el archivo principal HollowBond.ecma.js entre otros posibles; por otro lado tenemos el directorio de gestores llamado Managers para tener gestores como de configuración (SettingsManager.ecma.js), I18N (I18NManager.ecma.js) , o cualquier otro que pueda ser necesario; por otro lado tendríamos un directorio para los modelos JS llamado Models; por otro lado un directorio Utils para almacenar elementos comunes como puede ser el archivo Common.ecma.js para los métodos estáticos comunes y reutilizables a todo el proyecto, un archivo I18N.ecma.js donde se almacenen los textos internacionalizados en un diccionario anidado en otro donde el primer nivel indica el idioma y el segundo la clave y el texto asociado, y Settings.ecma.js para almacenar un diccionario con la configuración; por otro lado, un directorio Textures para almacenar las texturas que se usen en el juego; otro directorio para las vistas HTML generadas desde JS llamado Views; y por otro lado, posiblemente haga falta crear más directorios de división según se vaya viendo durante el desarrollo del propio juego.

El juego está inspirado en los Backrooms y estará desarrollado inicialmente 100% JS y SCSS. La idea del juego es empezar en una habitación que a su vez está unida a otras habitaciones ya sea por huecos de forma vertical que pueden tener escaleras; marcos para unir de forma horizontal; y ascensores para unir las habitaciones de forma teletransportada. Para dicho fin hay que pensar un sistema de semilla tanto por valor entero como por String cuyo valor salga de la suma del valor de cada caracter desplazado por su posición por byte, de esta forma, un valor puede ser un nombre y siempre dará el mismo mapa.

El mapa se ha cubrir en dos fases diferenciadas: por un sistema lógico que almacene la creación de los distintos elementos en base a la semilla; y un sistema que vaya dibujando el mapa según avance el jugador por el mismo, es decir, el mapa se genera por semilla en el apartado lógico, y en el apartado visual se van cargando habitaciones hasta un límite de 5 niveles de habitaciones visibles a partir de la habitación donde se encuentre el jugador donde a medida que cambie de habitación se crearán las nuevas necesarias y se eliminarán las no visibles, de esta manera, el mapa se puede hacer infinito. La generación de los elementos ha de ser por unidades enteras salvo ciertas excepciones que se irán viendo. Las habitaciones tendrán 3 unidades de altura y de ancho y largo será variable aleatoriamente entre 2 y 25 donde cuanto más grande, más raro es que salga y tendrá un Padding paras encoge un poco la habitación para dar lugar al ancho de las paredes y del techo y suelo cuando se vayan uniendo habitaciones, inicialmente de 0.1. Cada habitación tendrá probabilidades de que salgan más a su alrededor accesibles desde la misma horizontalmente, unidas entre ellas por un marco que tendrá una profundidad de dos veces el padding de la habitación. Dos habitaciones pueden tener más de un marco de unión pero la probabilidad será baja. Una habitación tendrá una probabilidad de tener un hueco en el suelo, en el techo o en ambos que ocupe mínimo 4 unidades por lado a un máximo del tamaño de la habitación menos 2 por cada lado para dejar un espacio para poder caminar. Un hueco puede unir verticalmente entre 2 y 25 habitaciones, donde a más habitaciones unidas, más raro. Cada habitación unida por un hueco se cargará visualmente, y sólo las contiguas donde se encuentre el jugador se cargará el segundo nivel de habitaciones. Por lo general, las habitaciones unidas por un hueco serán iguales, pero habrá una probabilidad en la cual sean distintas. Un hueco puede tener escaleras que unan dos pisos consecutivos. También habrá una probabilidad de que una habitación tenga un acceso a un ascensor, el cual puede unir entre 3 y 130 habitaciones donde a más habitaciones unidas, menos probabilidad. Si un mapa se queda sin poder avanzar más por ningún lado, se generará un ascensor en una habitación aún no recorrida por el jugador, de esta forma permanecerá siempre la infinidad del mapa. Todos los valores dados en este párrafo estarán en Settings.ecma.js para poderlos configurar. Las habitaciones, los marcos, los huecos, las escaleras y los ascensores serán modelos distintos entre ellos en la carpeta Models.

El juego tendrá un sistema de gravedad donde caigan todas las entidades cargadas hasta colisionar con algo concreto. Las entidades serían jugadores y cosas así. Por defecto, la gravedad será 9.81 para que sea como en la realidad terrestre.

El jugador será una cápsula vertical ante las colisiones, es decir, siempre estará en vertical y con la forma de la cápsula podrá subir y bajar escaleras y sortear ciertos obstáculos que pueda haber en el escenario. Todos los modelos contendrán su sistema de colisiones. Los huecos tendrán barandillas para evitar que el jugador caiga por ellos, pero si el jugador salta lo suficiente, la barandilla podrá saltarse y por tanto caer. Las escaleras serán de rejilla con peldaños unidos por dos guías laterales y empiezan en una base o descansillo y acaban en otra base o descansillo y tendrá en su conjunto 4 unidades de largo, 1 unidad de ancho y 3 unidades más dos veces el padding de las habitaciones y tendrán barandillas que impidan que el jugador caiga por el hueco salvo que el mismo las salte, y tendrá una apertura junto con los huecos que una para poder entrar y salir de ellas. Las barandillas tendrán un alto de 1 unidad. Los marcos y los huecos tendrán una capa para cubrir la unión de las habitaciones. El jugador medirá entre 1.3 y 2.4 unidades de altura, seleccionable en el menú cuando se vaya a iniciar una partida, y saltará la mitad de su altura y se agachará a la mitad de su altura, y su ancho será un cuarto de su altura. Todas estas unidades aquí mostradas estarán configurables en la propia configuración. El jugador irá a 0.5 de la velocidad andando cuando esté agachado y corriendo irá a una velocidad de 2.3 sobre la velocidad andando. También tendrá un botón de acción con lo que llamar al ascensor y luego, para elegir un piso en los botones del mismo ascensor. La vista será en primera persona y tendrá un punto centrado para indicar donde está apuntando el jugador. Todo ello estará en la configuración.

Los ascensores, por defecto estarán todos cerrados. La idea es que el jugador llegue, lo llame, tarde unos 2 o 3 segundos, suene una campanita o algo, se abran las puertas y el jugador pueda entrar. Los ascensores medirán 2x2 unidades con un padding como el de las habitaciones. En uno de los lados tendrá la botonera para elegir un piso. Una vez seleccionado el piso, se cierren las puertas, se cargue la nueva ubicación con sus respectivas habitaciones y tras 2 o 3 segundos suene la campanita y se abran las puertas. Los pisos serán siempre los mismos y el piso actual se verá indicado en los botones.

Las habitaciones tendrán unas lámparas fluorescentes que darán luz, la cual será configurable desde la propia configuración. La lámpara de fluorescentes será un modelo dentro de la carpeta Model que integrará la habitación para que ésta tenga luz. Para evitar sombras extrañas o disfuncionales, la luz tendrá un radio que exceda de la altura del bloque de la lámpara, así quedaría todo iluminado, y como éstas son largas, hará efecto con ese factor, aunque su radio también será configurable.

Cuando abres el juego se mostrará un menú donde te permita iniciar una nueva partida, también te permita cargar una partida, otro botón para la configuración y opciones, otro botón para mostrar los créditos. En los créditos simplemente salgamos tú y yo, yo como KyMAN. En las Opciones quiero que salga un deslizable que sea la calidad del CANVAS sobre el que se dibuje el juego desde el ThreeJS donde para lograrlo usaremos el tamaño de CSS y el tamaño por atributos de la etiqueta CANVAS. La barra de desplazamiento tendrá un step de 3.125 desde mínimo 3.125 hasta 100 para hacer que la calidad será ese porcentaje; por otro lado, la configuración de los movimientos del usuario donde WASD sea para moverse adelante, atrás, desplazamiento lateral izquierdo y desplazamiento lateral derecho, IJKL para girar hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha, luego, la tecla de saltar, que por defecto será espacio, agacharse será Shift izquierdo y acción C. Por defecto, el ratón es usable y tiene la tecla acción en el botón izquierdo del mismo, para agacharse es el botón derecho y mover hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha con el propio ratón. Habrá una barra para configurar la sensibilidad del ratón. Cuando le damos a una nueva partida nos mandará seleccionar una semilla que por defecto será un valor entero aleatorio, y nos mandará poner la altura que tenemos con una barra deslizable, y tras ello sería empezar en la primera habitación.

ChatGPT. ¿Ves esto posible? ¿Me puedes hacer un archivo ZIP con todo esto?