2 puntos por GN⁺ 2024-12-22 | 1 comentarios | Compartir por WhatsApp

¿Por qué fue difícil

  • Problema de rendimiento de Bash: Bash es muy lento, así que si ejecutas un comando por píxel no podrás alcanzar una tasa de fotogramas adecuada. No se puede mantener el estado de la pantalla en memoria y acceder a arreglos o cadenas toma mucho tiempo.
  • Limitaciones matemáticas: Bash no ofrece soporte para coma flotante ni una biblioteca de funciones matemáticas. Todas las operaciones matemáticas se realizan con enteros y se escalan por 100000.
  • Problemas de gráficos en terminal: Se usó un bloque medio Unicode para representar píxeles y duplicar la resolución vertical. Es necesario conocer el color del píxel adyacente, pero Bash no puede guardar estado.
  • Otros problemas:
    • Es difícil actualizar todo el terminal de una sola vez.
    • La mayoría de los terminales no están orientados a videojuegos y es difícil manejar las entradas de teclado en tiempo real.
    • Llenar el terminal con colores requiere una gran cantidad de datos.
    • Bash no imprime cadenas de varias líneas de una sola vez.
    • Estándares como ECMA48, VT100, VT200 y Xterm son complejos y difíciles de comprender.
    • Existían dificultades con los cálculos matemáticos.

FAQ

  • P: Hay problemas al cambiar el tamaño de la ventana
    • R: Abre un issue.
  • P: La CPU se sobrecalienta o las computadoras antiguas se ralentizan
    • R: Intenta poner la variable de entorno FPS por debajo de 30.
  • P: No funciona en Bash menor que 5
    • R: Es correcto.
  • P: ¿Es este código Bash puro?
    • R: No. Al iniciar se llama stty para desactivar el eco, y al salir se vuelve a activar.

1 comentarios

 
GN⁺ 2024-12-22
Comentarios de Hacker News
  • Como este juego no es realmente 3D, renderizar píxeles haciendo un solo trazado por cada columna es muy ingenioso

    • Repite la cadena "dibuja este píxel y muévete hacia abajo" tantas veces como es necesario para pintar cielo, césped y objetos reales en la terminal
    • También estoy pensando en construir un motor de renderizado por vóxeles para entornos con recursos limitados, y esto podría dar un resultado útil para ese proyecto
  • Si quieres ver un raycaster escrito en MS Batch, puede haber un enlace en GitHub

  • Creo que Bash es demasiado lento para scripting o uso interactivo

    • Incluso algunas distribuciones populares de Linux no usan Bash como shell de scripting
  • Es una pena que stty requiera fork

    • En el próximo proyecto, quizás podríamos usar Bash con rowhammer para invocar los ioctl necesarios sin hacer fork
  • Todavía me cuesta entender el uso de un shell tan lento

    • Como la mayoría de las apps solo escriben en stdout y stderr, deberíamos poder imprimir texto en pantalla más rápido
  • No sabía que algo así fuera posible en Bash

    • Pensé que tenía destrezas en Bash, pero esta implementación me sorprendió
    • Mi base de matemáticas no es fuerte, pero es divertido verlo
  • También conviene mencionar que hace 9 años hubo un raycaster en awk

    • Puedes verlo en un enlace de GitHub
  • Es una pena no poder ejecutar este proyecto

    • No sé por qué, pero la vista se guarda en un archivo llamado buffered y termina de inmediato
  • Es impresionante que solo tenga 300 líneas de código

    • Me encanta este proyecto
  • Este reto es impresionante

    • Da gusto no creer que esto sea posible