Castle Game Engine – motor de juegos 3D/2D multiplataforma, gratuito y de código abierto, basado en Pascal
(castle-engine.io)- Es un motor gratuito y de código abierto con el que los desarrolladores en Pascal pueden crear juegos 3D y 2D, así como UI, en un solo proyecto y distribuirlos en múltiples plataformas
- El editor visual y el sistema de componentes manejan en conjunto elementos de juego y UI como escenas, cámaras, navegación, iluminación, botones, imágenes y etiquetas
- Soporta flujos de trabajo con modelos 3D, animaciones 2D y hojas de sprites, y permite aprovechar glTF, X3D, IFC y la integración con Blender y Sketchfab
- Ofrece funciones de renderizado como efectos de shaders, sombras, espejos, renderizado basado en física, bump mapping y corrección gamma, lo que permite una amplia variedad de expresiones gráficas solo con el motor base
- Cuenta con una herramienta de compilación por línea de comandos, imágenes de Docker y documentación para los principales sistemas de CI, con una estructura fácil de aplicar tanto a aplicaciones de código abierto como comerciales
Editor y forma de desarrollo
- Castle Game Engine es un motor de juegos 3D/2D dirigido a escritorio, móviles, consolas y web
- En el editor visual se pueden diseñar juegos 3D y 2D, así como interfaces de usuario
- Soporta autoescalado de UI y anclas
- Puede integrarse con varios IDE como Visual Studio Code, Lazarus y Delphi
- Los componentes separan la composición del viewport y la UI
- En los mundos 3D/2D se pueden usar escenas, cámaras, navegación, primitivas, luces y más
- En la UI se pueden usar botones, imágenes, etiquetas y más
- La base de código usa Object Pascal moderno y ofrece compilación rápida y ejecución rápida de forma predeterminada
Assets, gráficos y despliegue
- El método de definición de datos incluye modelos 3D, animaciones 2D y hojas de sprites
- Usa estándares abiertos como glTF y X3D para integrarse con herramientas de creación y repositorios de assets como Blender y Sketchfab
- Las funciones gráficas incluyen efectos de shaders combinables, sombras, espejos, renderizado basado en física, bump mapping y corrección gamma
- Los destinos multiplataforma son Windows, Linux, macOS, FreeBSD, Raspberry Pi, Android, iOS, Nintendo Switch y web
- Se puede trabajar desde cualquier plataforma de escritorio
- La naturaleza de código abierto y compatibilidad con CI está respaldada por una herramienta de compilación por línea de comandos e imágenes de Docker
- Ofrece documentación y archivos preparados para GitHub Actions, GitLab CI, Jenkins, Woodpecker CI y otros sistemas de CI
- El motor es completamente de código abierto y puede usarse para crear cualquier tipo de aplicación, incluidas aplicaciones propietarias
1 comentarios
Opiniones de Hacker News
https://castle-engine.io/why_pascal
Tengo que echarle un poco de agua fría a esto. La mayoría de las razones enumeradas son cosas que también tienen otros lenguajes modernos, como seguridad, multiplataforma y bibliotecas, y entre ellas se menciona la legibilidad, algo que me cuesta aceptar.
Trabajo con código Pascal 8 horas al día, todos los días, y no me parece más legible que la sintaxis común de C; al contrario, me parece mucho menos legible. Como hay que usar palabras completas para expresar la sintaxis, al cerebro le cuesta distinguir de inmediato entre “esto es estructura del código” y “esto es código real”, y hay que leer las palabras de verdad. Me parece un diseño muy improductivo.
Esta página se siente como si hubiera sido escrita hace 20 años. En particular, razones como la seguridad de tipos habrían sido mucho más convincentes en ese entonces.
No sé si eso sea posible en otros lenguajes.
Salvo casos extremos, por ejemplo intentar escribir código orientado a objetos en un lenguaje esotérico o en un lenguaje basado en XML que solo tenga funciones imperativas, creo que la legibilidad depende de quien lee.
Go fue el único otro lenguaje que me resultó fácil de seguir aun sin conocer bien el lenguaje en sí, pero Go es mucho más simple y limitado en funcionalidades. En cambio, Free Pascal es un lenguaje tipo fregadero de cocina que trae de todo y aun así sigue siendo bastante fácil de leer.
Dicho eso, creo que la razón número uno para usar Free Pascal no es tanto el lenguaje en sí, sino Lazarus IDE, FCL y el framework LCL. También son ventajas su compilador rápido, un optimizador decente, el nuevo backend LLVM para cuando se necesita más rendimiento y la gran cantidad de plataformas soportadas.
La compatibilidad hacia atrás también es muy importante. Si código que funcionaba bien hace unos años se rompe sin factores externos, no importa qué tan limpio, consistente o elegante sea el lenguaje: lo que me importa es que el código que funcionaba siga funcionando.
Y después de ver ciertas palabras unas cuantas veces, no las “lees” en el sentido mencionado aquí, sino que las comparas mentalmente como imágenes con otras palabras de tu vocabulario interno. Suponiendo que el vocabulario del lenguaje no use palabras muy parecidas entre sí, leer palabras no es más difícil que leer llaves.
Los símbolos de un solo carácter pueden ser difíciles de captar para algunas personas, igual que las palabras lo son para ti. Con un buen IDE y una buena estructura de código, también se vuelve más fácil distinguir entre estructura y código.
Pero la principal razón por la que querría usar un motor de juegos en Pascal para juegos es que permite evitar la recolección de basura.
Artículos relacionados:
Why use Pascal? - https://news.ycombinator.com/item?id=36646890 - julio de 2023, 307 comentarios
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=36371434 - junio de 2023, 3 comentarios
Castle Game Engine Roadmap - https://news.ycombinator.com/item?id=36365420 - junio de 2023, 10 comentarios
Modern Object Pascal Introduction for Programmers - https://news.ycombinator.com/item?id=28079093 - agosto de 2021, 3 comentarios
Castle Game Engine: Cross-platform 3D and 2D game engine - https://news.ycombinator.com/item?id=23741883 - julio de 2020, 20 comentarios
Castle Game Engine 6.4 released – physics, iOS services, shader pipeline upgrade - https://news.ycombinator.com/item?id=16207075 - enero de 2018, 2 comentarios
Ni siquiera recuerdo cuándo fue la última vez que usé un lenguaje de la familia Pascal. En 2001, en una clase de programación de la universidad, tuve que usar Delphi; la escuela tenía Delphi 4, pero yo compré Delphi 5. Probablemente lo seguí tocando uno o dos años más, pero creo que casi no lo usé después de 2005
En la universidad teníamos que crear un programa de gestión de inventario. Como era una carrera de TI, a la mayoría le costaba porque la programación no era su camino, pero yo era casi un “niño prodigio de la programación”, así que me adapté de inmediato a Delphi
No conocía bien Delphi en sí, pero en cuanto empecé a codear y teclear
var,begin,end,:=, etc., supe que era de la familia Pascal. Haber tenido Turbo C y Turbo Pascal en la secundaria me permitió ir un poco adelantadoLa parte difícil era guardar los datos de inventario en un archivo binario y encontrarlos con búsqueda binaria. El tutor era de la vieja escuela, así que tal vez Delphi también tenía más soluciones integradas de las que hoy damos por sentadas en Go o C#
A todos les costaba lograr que compilara, y ahora que lo pienso es un buen recuerdo. Hoy pongo a Pascal en la misma categoría que Basic. Parece un proyecto interesante, pero no tengo interés en usar Pascal, así que para mí es un factor que descarta la opción
Aun así, no me sorprendería que todavía haya una comunidad bastante grande que defienda Pascal. Si es así, bien por ellos
Antes, al pasar código Pascal a C, cambiaba
begin/endpor llaves, movía las declaraciones de interfaz a archivos de encabezado y reemplazaba funciones con buenos nombres por llamadas crípticas astrtok. En comparación, era innecesariamente feoHoy C es mi lenguaje favorito, pero la limpieza de Pascal y la facilidad de uso de Delphi me siguen recordando cómo se ve una gran experiencia de desarrollo
Llevo 10 años usando Android Studio, pero no se acerca en nada a la experiencia de Borland Delphi Architect de hace 20 años. Quizá hoy tenga funciones más avanzadas, pero en comparación se siente más como un caos de piezas separadas
Después de aprender Basic en casa, fui a la secundaria y el primer lenguaje de programación “serio” que aprendí fue Pascal
Pero uno o dos años después descubrí C y dejé de mirar hacia Pascal. C se sentía más “pro”, más flexible y más cercano al hardware. Pascal parecía más adecuado para desarrollar apps con GUI, mientras que C parecía capaz de abarcar todo, desde las profundidades internas del sistema operativo hasta drivers, juegos y apps con GUI
Por supuesto, Pascal también podía hacer todo lo que hacía C, así que era una idea tonta, pero para mi yo joven se veía menos “serio” y menos “pro”
Por 1996-97 estaba jugando a crear efectos de fuego con Turbo Pascal; la mayoría de los tutoriales usaban
asmymode 13h, y yo solo tenía Turbo Pascal 5.5, que no soportaba la palabra claveasmDespués de tocarlo un poco, a fines de 1997 conocí C, y desde que vi el bucle
forde C no volví a tocar PascalQué bien. Espero que al proyecto le vaya bien. La elección del lenguaje es interesante; siempre consideré Pascal como un lenguaje viejo, pero claramente parece que estaba equivocado
Miré el código porque tenía curiosidad por cómo se ve una base de código grande en Pascal. No había visto código Pascal de un tamaño significativo desde más o menos 2001
Lo que me llamó la atención fueron los nombres de archivo: no me gusta la forma en que todos los archivos fuente llevan
castleal principio. Hace más difícil entender de qué trata cada archivo y hace que todos se vean parecidosSobre el código real es difícil opinar porque nunca he usado Pascal, pero el motor en sí se ve genial
yyen archivos yacc. Facilita reconocer qué archivos son archivos de Castle y también evita choques con archivos o unidades de otras bibliotecasEs casi una queja sin sentido
Me da la sensación de que esos desarrolladores de Pascal deben estar haciendo las cosas con una productividad enorme
En cambio, en lenguajes más populares como Rust, que uso en mis proyectos, tengo la impresión de que muchos proyectos son del tipo “reimplementamos grep por milésima vez, pero esta vez bien”
Es una verdadera lástima que el producto Delphi haya sido gestionado tan mal por Borland/Embarcadero.
Object Pascal es un excelente lenguaje. Hoy puede generar código nativo para casi todas las plataformas. Los binarios que produce son pequeños y rápidos; al estar cerca del nivel de C, normalmente puede considerarse que corre entre 100 y 10000 veces más rápido que un código Python similar.
Castle Engine es un proyecto enorme y permite crear juegos y aplicaciones 3D con mucha facilidad usando un enfoque RAD. A diferencia de otros frameworks enormes en Pascal, no es un producto legacy, sino que está en desarrollo muy activo. Les tengo un enorme respeto a sus desarrolladores.
Un proyecto igualmente grande e impresionante es Mormot, un framework ORM/SOA/MVC con una base de código altamente optimizada.
Crear aplicaciones de servidor con Object Pascal y Mormot es fácil, y si NodeJS puede manejar 500 solicitudes por segundo en una situación dada, el código Pascal puede entrar en el rango de más de 10000 por segundo.
Por eso, cuando en otros lenguajes se necesitarían decenas de servidores para manejar la carga, el código de servidor basado en Object Pascal puede ejecutarse fácilmente en un solo servidor. Usar este lenguaje puede reducir mucho los costos.
Mucha gente recuerda Object Pascal solo como un lenguaje educativo, pero el lenguaje evolucionó y todavía tiene funciones que otros lenguajes no tienen. Algo especialmente importante es RTTI, es decir, la reflexión. Solo hay un área en la que quedó rezagado frente a las tendencias modernas: el multithreading/las corrutinas no están integrados en el propio lenguaje como en Go.
Por último, el código escrito hace 40 años todavía puede compilarse y ejecutarse hoy. Durante esos 40 años, muchísimos lenguajes se pusieron de moda y desaparecieron, pero Pascal sigue aquí.
Volviendo a Castle Engine, aunque no estés familiarizado con Object Pascal, recomiendo mucho probar su editor visual. Es realmente asombroso.
La época en la que programaba en Pascal (Turbo/Borland) fue la más divertida. Las “Unit” como unidades de compilación simplemente funcionaban bien, y la jerarquía de dependencias solo permitía una forma DAG. Compilar y usar era muy rápido, y editar y depurar también lo eran.
Al pasar a Delphi, se sintió como si se hubiera perdido algo. No quiero decir que fuera un mal producto, pero la gente empezó a mirar hacia otros lados.
Aun así, sigo valorando mucho aquellos tiempos, porque gracias a Pascal tuve un punto de partida para pasar de Apple Basic a C/C++, y también pude aprender usando poco a poco ensamblador inline.