Hace 2 años | Por JanSmite a xataka.com
Publicado hace 2 años por JanSmite a xataka.com

Loxley' es una obra de World XXI Soft que resulta increíble que esté programada en BASIC puro. Las notas que adjunta el programador lo demuestran, pero el resultado es casi mágico, incluso permitiéndose una introducción con textos e ilustraciones inspiradas en la película de Kevin Costner 'Robin Hood: Príncipe de los ladrones'. En esta película, en su día, se basaron juegos para NES y Game Boy, pero completamente distintos y con perspectiva cenital.

Comentarios

JanSmite

Del documento que se adjunta al juego:

"; --------
; LOXLEY
; --------
;
; (C) 2022 ARIEL RUIZ PARA WORLD XXI SOFT INC.
;
; DOCUMENTO ANEXO AL CODIGO FUENTE
; --------------------------------
;
; LOXLEY ES UN JUEGO REALIZADO EN BASIC INTERPRETADO (PURO) CON LLAMADAS A LA ROM.
; NO CONTIENE EJECUCION DE CODIGO MAQUINA EN LA RAM (REGISTRO PC NO SALE DEL RANGO
; #0000-#3FFF). A CONTINUACION SE EXPLICAN LOS ASPECTOS MAS DESTACADOS DE LA
; PROGRAMACION DEL JUEGO. "


Y, según dicen las propias normas de concurso (está en la propia noticia), "en su apartado Basic Puro (es decir, no está permitido el empleo de rutinas en Ensamblador, salvo las que trae la propia ROM del ZX Spectrum".

JanSmite

#6 Goto #4: hace llamadas a la ROM del Spectrum, algo que está permitido en las bases del concurso, no ejecuta rutinas en ensamblador precargadas en RAM.

musg0

#7 No digo que no cumpla las normas del concurso, sino que dudo de que se pueda considerar Basic puro un programa que probablemente sea un churro de PRINTs con el código real.
Si en el concurso no les importa, bien por ellos, pero para mí ya no resulta tan espectacular

mudit0

#1 #8 Se supone que es algo que ya debería haber descubierto y resaltado el autor de la noticia (John Tones) pero por alguna razón, le ha pasado totalmente desapercibido.

#15 Si mérito lo tiene, eso nadie lo pone en duda. Aquí lo que se discute es si esto es o no es BASIC. Y desde luego, lo que se está viendo no parece muy "BASIC". A mí me parece que un juego así no compite en igualdad de condiciones con el resto de su categoría y si yo fuera uno de los otros concursantes, pensaría que me la están liando, pero es mi apreciación, yo no soy el que organiza el concurso.

o

#27 En eso te doy la razón, porque la maquina en esos momento no está interpretando tu BASIC en tiempo real, sino que está ejecutando código maquina que nada tiene que ver con tu BASIC. Pero bueno, si las normas del concurso lo permitían...

mudit0

#43 ¿lo permitían? ¿O es una de esas normas que según quien se la salte le descalifico o me hago el loco? Porque no es la primera vez que algo así pasa en ese concurso y la respuesta no ha sido igual siempre.... Parece que influye bastante según de quien se trate.

o

#44 Según tengo entendido, estaban permitidas llamadas a la ROM (lo pone en las reglas). Hay que diferenciar entre inyectar código maquina mediante prints y hacer llamas a la ROM, son cosas diferentes y esto último sí estaba permitido, me imagino que es esto a lo que te refieres.

mudit0

#45 si, sé que en este caso las llamadas están permitidas aunque no parece que el objetivo de dicha regla fuera hacer este uso. Pero a lo que me refería a que la interpretación de las reglas es más o menos rígida según de quien se trate. Si hubiera sido otro no estoy tan seguro de que le hubieran dejado seguir en el concurso.

o

#46 Sacado de las reglas:

En BASIC puro se pueden usar los recursos de la rom original: rutinas de la rom, variables del sistema, etc. Se puede redefinir todo el set de caracteres del zx spectrum si se desea, e incluso tener varios sets. Se permite cargar los datos de los sets en un bloque aparte, pero se ruega que se incluya el el código fuente una imagen con el set/sets empleados.

No soy jurado del concurso así que no te puedo comentar sobre eso, en que se basan para decir que sí vale o que no vale, pero por lo menos en las reglas lo ponen, lo que decidan después ya no tengo ni idea.

mudit0

#47 Si, yo también he leído las reglas, y aunque ponga eso, a mí no me parece un uso demasiado legítimo para un concurso donde supuestamente lo que prima es la programación en Basic. Pero insisto, es mi opinión particular (que por cierto, coincide con otras que se también han expuesto aquí hablando de esto). Lo que hagan luego los encargados del concurso es cosa suya.

Azrapse

#8 Pues a mí me resulta más espectacular que si fuera en BASIC puro. De hecho me parece una absoluta genialidad que lo hubiera hecho de oro en los 80s.

El tipo ha creado un lenguaje de script, que es lo que ha metido en los PRINTs, y ha implementado cada comando de ese lenguaje a base de hacer un frankenstein con trozos ejecutables de la ROM. El Spectrum 128 no tiene rutinas para audio digital, gestion de sprites y fondos, ni nada de eso en su ROM. Los que afirman eso están mintiendo.
Que este tipo haya sido capaz de utilizar trozos de aquí y allá en la ROM, que servirían para otras cosas, para juntarlos y crear un lenguage de script para juegos, es una maravilla sin exagerar lo más mínimo.

Le permite crear un engine rápido para que mueva el juego, y programar la lógica del juego en BASIC, con la facilidad que da eso para iterar versiones y desarrollar rápido, y tener menos bugs.
Estoy alucinando.

Las compañías de videojuegos se lo hubieran rifado en los 80s.

s

#28 Lo que está haciendo es básicamente una variante de Return Oriented Programming.

meneandro

#1 Es hacer trampas. Da igual que sólo se use el ensamblador para acelerar las rutinas más comunes o sólo las que más tiempo consumen, ya dista de ser "completamente programado en basic, un lenguaje menor" porque precisamente lo importante o lo que marca la diferencia no está hecho en basic. Y por lo que se ve en el listado, no son pocas las cosas que gestiona en ensamblador (engine de sprites, colisiones, cambios de página, dibujado de fondos y de sprites, copias de memoria, sonido...)

D

#25 No hace falta ni entrar a ver el código. Basta ver cómo al cambiar de un escenario o pantalla de juego al siguiente el cambio es absolutamente instantáneo, para saber que eso no es BASIC ni de coña. En BASIC cada uno de esos escenarios o pantallas de juego tardarían un huevo en terminar de dibujarse, y parte del otro.

meneandro

#41 Todo depende de como dibujes. Evidentemente, si usas rutinas de dibujado y rellenado de pixels, al estilo de los dibujos de pantallas que se veían en las primeras "aventuras AD", te mueres.

No conozco el spectrum, pero en msx desde el basic tenías control de páginas de memoria, podías redefinir carácteres gráficos en memoria (de los 256 carácteres del código ASCII que estaban definidos en la vram como "fuente" del sistema, podías dejar las veintitantas letras y quizá los números y redefinir todos los demás símbolos como gráficos), en copiar esos caracteres en una página de memoria que no se ve no se tardaba tanto, y luego dar el cambiazo entre la página de memoria que se ve y esta otra oculta era casi inmediato.

Igualmente, el msx tenía muchas rutinas que hacían las cosas más típicas ya en la rom de manera contigua con el basic y accesibles desde él, como en este caso, que usan las que trae el spectrum 128.

D

#49 Lo más rápido que podías hacer en MSX para dibujar un escenario o pantalla de juego desde basic era hacer un "screen 1" y, como dices, dibujar un escenario a base de "letras ASCII" de la vram redefinidas gráficamente... y aun así el escenario se dibujaba tan lentamente que podías ver cláramente cómo se iba dibujando. Ni de coña podías plantearte hacer un scroll suave (que en "screen 1" lo más suave que podía ser era a los saltitos que daban de sí el ancho o alto de las letras redefinidas gráficamente; véase, por ejemplo, el legendario "Knightmare" de Konami).

Como no te metieses en assembler-código máquina, tenías muy poco que hacer para hacer un juego en MSX. Desde el basic solo podías hacer cosas extremadamente básicas (yo una vez programé un "arkanoid" en basic, cuando era un chiquillo, y la ralentización del juego era enorme).

m

#1 Entré a leer eso, estaba flipando. En mi niñez probé de hacer juegos con basic y era decepcionante porque a la que había cierta complejidad iba todo muy lento.

c

Basic no es cosa menor, dicho de otra manera, es cosa mayor.

t

#18 El problema es que por ejemplo no se adaptaban a la funcionalidad de los chips gráficos del sistema destino para facilitar el port, haciendo cosas por CPU que al final conseguían que el port fuera más lento que en spectrum.

emuman

#34 En Amstrad CPC se veia mucho esto tambien, una infinidad de juegos que van lentisimos es debido a que se tiraba CPU a tope en cantidad de operaciones redundantes y tambien memoria libre por mantener los graficos de Spectrum mapeados en memoria y realizar conversiones al vuelo a partir de ellos. La tasa de FPS caia en picado y encima tenian incluso que hacer sacrificios quitando musicas, animaciones... porque los 64Kb de la version basica de la maquina, que era la que se solia usar como target para la mayoria de los juegos , no daba para todo.

mudit0

#35 los 64 KBs daban de sobra si se aprovecharan bien, pero claro, aunque uses gráficos monocromo si estas sacrificando 16 KB para una memoria de vídeo que no se está aprovechando, y tienes una ROM cargada que tampoco vas a usar ocupando memoria, pues estas desperdiciando todos los recursos y hasta te faltará memoria y cpu

mudit0

#32 Si entendemos "primo" por "primero", algo así.

NubisMusic

Pasarán años y este ordenador continuará siendo querido. Qué grande.

e

#12 Exacto.

NubisMusic

#12 Bueno, pero eso no es culpa del Spectrum. Los ports es lo que tiene, sin importar el sistema. Además, si el juego mejora en MSX aunque sea por los colores, no pasa nada si no saca todo el potencial de la máquina.

mudit0

#9 #12 El Spectrum sólo es querido por los que lo tuvieron, por nostalgia básicamente. Pero los que tuvieron otra máquina lo odian por sus "daños colaterales" (como los ports) o haber puesto el listón demasiado bajo en cuanto a la calidad de sus componentes.

NubisMusic

#29 Fue el primo feo que se ligó a todas, entiendo.

frg

#29 Precio, es querido porque era "barato" y acesible, no por su escasa justita calidad.

JanSmite

Editado, parece que #_1 me tiene bloqueado.

musg0

#5 Te he desbloqueado. No digo que esté haciendo trampas en el concurso porque si no lo hubieran descalificado, pero ¿qué es todo ese ensamblador y por qué tiene que enviarlo por el print en vez de usar los comandos de basic?
Como digo, no lo entiendo bien, pero parece una especie de truco para enviar ensamblador por la pila y probablemente el código del programa sea un listado de mogollón de prints con el código real del programa. ¿Eso es Basic puro?
Me da la sensación de ser igual que con el Python. Una línea de Python y una librería gigante hecha en C o C++, pero el titular es "Mira como mola Python"

F

#6 Yo el Basic del Spectrum no lo conozco, pero lo que veo en los videos no me sugiere que sea Basic puro en absoluto... movimiento del personaje perfecto, sin parpadeos, con restauración del fondo y perfectamente fluido, incluso voces digitalizadas?
Sí conozco el Basic del Amstrad CPC (que lleva mismo procesador y se dice que es el más potente de los Basic de 8 bits) y hasta hace poco lo que se veía en ese lenguaje no se le acercaba ni de lejos a lo que se ve en Loxley, únicamente hay unos desarrollos recientes que explotan mucho mejor el color y de velocidad nada mal (

, pero ni por asomo llega a acercarse, porque sin usar ensamblador es imposible, no sé porqué se empeñan en decir que es Basic "puro", porque para mí no lo es.

F

#17 100% de acuerdo. Perfectamente explicado y es lo que pretendía decir torpemente en mi mensaje en #13

Es algo que me molesta mucho, se promocionan juegos como "Basic puro" y cuando vas a ver cómo está conseguido semejante portento y encuentras que tienen de Basic lo justo y necesario. El código de Loxley, sabiendo Basic, es un galimatías que no hay quien lo entienda.
Eso sí, el juego es la caña y la intro es impresionante, muy buen trabajo.

o

#6 No es exactamente eso. La ROM del spectrum tiene rutinas de su sistema operativo que hacen ciertas tareas.
El autor lo que ha hecho es hacer llamadas directamente a esas rutinas (en estas maquinas puedes desviar la ejecución a donde quieras), y lo que es más elaborado, hacer llamadas a zonas intermedias de esas rutinas (obviamente tiene que conocer al dedillo lo que hacen, sino es imposible).
Por hacer un símil, entre comillas, con un sistema moderno, sería como hacer llamadas a las dll que ya trae Windows desde un lenguaje de alto nivel como python por ejemplo, aunque es otro rollo.
Te puedo asegurar que tiene mucho merito, más incluso que si escribe el juego directamente en ensamblador.

s

#15 por hacer otro símil, sería como si un exploit en un sistema moderno usara ROP (Return Oriented Programming).

ElPerroDeLosCinco

Este juego es una hazaña técnica, no le quiero quitar mérito ni afirmo que técnicamente incumpla las normas de los concursos de "puro BASIC". Pero es evidente que incumple el espíritu de un desafío sobre qué puedes conseguir programando en BASIC. Cualquier programa BASIC avanzado hace llamadas a rutinas en ensamblador de la ROM. Pero si lo haces de manera masiva, ya no se puede considerar que ese programa esté escrito en BASIC, y menos en "puro BASIC". Creo que los concursos van a tener que poner un límite a las llamadas a ensamblador que se pueden incluir, porque si no, todos los participantes en el futuro van a seguir por este camino y los concursos van a perder todo su sentido. Un programa escrito en BASIC debería ser comprensible para un programador que domine BASIC, y Loxley no lo es.

Mltfrtk

En cuanto lo he visto en marcha, he visto que es mentira. Dirán lo que quieran, pero no está hecho en Basic.
Eso si, mola mucho.

frg

#39 Con otros juegos de Spectrum.

mudit0

¿Lo de "Espectacular" no es apuntar un poco alto en el titular?

frg

#19 No. Comparalo con otros juegos de la misma platafoma.

mudit0

#38 ¿con otros juegos de Spectrum o con otros juegos en BASIC auténtico?

M

SIguiendo la noticia veo que en el concurso de juegos de Basic hay una categoría de Basic compilado recomendanto este proyecto, un compilador cruzado de Basic para usar en Linux, Mac o Windows. Chiquita pasada lo que se sigue haciendo.

M

#2 No puse el dichoso link https://github.com/boriel/zxbasic

D

algún sitio donde descargar el .TAP ?

c

Me ha recordado al Goodie...

s

#11 A mi al Sir Fred

frg

#11 Goodie juraría es ensamblador.

g

Claro, por lo que explica en las notas (no lo sabía, yo sólo programé para el 48K) en la rom del 128K hay rutinas para dibujar sprites, música (el AY8912 ayuda mucho), etc. Así normal que pueda hacer ese juego en BASIC, el reto hubiera sido programarlo para el 48K que no tenía nada de eso.