Entiendo que es un título un tanto ´críptico´ pero a ver si lo puedo resumir un poco: ´Cavernator´ es un juego que vengo haciendo desde que tenía mi SVI-728 (ya han pasado muchas RUs desde entonces, ¿verdad?), entonces, con todo ese tiempo, seguro que es muy largo etecé. pues realmente no, ya que he ido programando poquitas cosas y además de 1000 en cuando, pero bueno, tiene unas cuantas pantallas, una pseudohistoria etc. El juego está relacionado con la segunda parte del título, ya que está hecho en BASIC. ¿Por qué poner eso de ´los límites del BASIC´? pues es una declaración de intenciones: me gustaría explorar hasta dónde puede llegar ese lenguaje, probar cosas a ver si se pueden hacer etc.
Mi experiencia: A veces me he preguntado si se podría hacer tal o cual cosa en BASIC, pensando que la velocidad resultante echaría para atrás dicho proyecto... y al final he podido comprobar que el resultado era pasable/aceptable (aunque tampoco se pueden hacer milagros ) Tengo muchas ideas para probar en el lenguaje para principiantes (que es lo que significa la B de basic), y espero que en el futuro pueda ir subiendo aquí lo que haga en el caso de que guste lo programado.
Cavernator & los límites del BASIC.
He subido el .dsk en ´Inicio » Descargas » Descargas DB » Games » Promos » Cavernator.´
Antes de absolutamente nada... me gustaría saber si es correcto el utilizar los .mwm que hay en mi juego, si es ilegal hacerlo etc. si es así, en el momento que sepa esto, cambiaría esa copia por otra que no tenga música o utilizar las músicas que sean de dominio público etc. Gracias .
Podrías poner el enlace directo? porque no me sale en game>promos
pepitor128 estoy esperando que alguien se baje el juego hace rato, aunque he estado haciendo otras cosas durante esta última media hora (precisamente subiendo el juego en otro sitio). ¡Qué alegría que alguien esté interesado! pero, claro: un juego en basic normal y corriente no tiene mucho ´tirón´ hoy en día ni genera pasiones. Tal vez debería hacer un poco de ´trampa´
y decir que es en 3d etc. pero mejor que no
.
Te diré lo que hago yo paso a paso, ya que a mí si que me sale al final la opción de bajar el juego, veamos:
-Estando en ´INICIO´ pulso en ´DESCARGAS´, tiro hacia abajo y busco la columma que pone ´GAMES´ y dentro de ella más o menos por la mitad está ´PROMOS16´, le doy click, entonces ya me sale (el tercer programa), el Cavernator.
Cualquier problema... me lo comentas.
PD. No se lo ha bajado nadie, aunque parezca que hay uno. He sido yo mismo para comprobar que se ha subido bien.
Es lo que hago pero no me sale. Copia el enlace y ponlo a ver si así puedo descargarlo.
Parece que alguien lo ha conseguido... ¿has sido tú?
A ver si te sirve esto, otra cosa ya no se me ocurre:
Es muy cómodo para probar cosas ejecutar el .dsk en el BLUEMSX, se ejecuta el juego sin hacer demasiadas cosas, en el momento que lo tienes configurado (se ha de poner un cartucho en algún slot que tenga el SO, ejecutar el clásico ´autoexec.bas´etc. Cuando quieras ´trastear´ un poco el juego, puedes hacer un CTRL/STOP (estando el juego en marcha), ir al SO, cargar el age.com y variar alguna de las pantallas. Si se respeta la entrada y salida del sprite protagonista... puedes grabar lo que se ha hecho y luego ¡saldrá automáticamente en el juego !!!
PD. ¡Qué desastre soy! No he avisado todavía (creo), que el juego necesita MOONSOUND, pero no hay problema si se utiliza emulador (tienen la opción de ponerlo), realmente tampoco es un problema si no se tiene ese BRUTAL cartucho en el ordenador ´real´: simplemente no se ha de cargar el driver del OPL4, y después ir quitando las cargas de las canciones, entonces quedará el juego con solo algún que otro ´beep´ y algún que otro ´sound´.
Ahora entiendo lo que quieres decir con el límite del Basic:
PRINT FRE(0) 1526
Uys, has apurado la memoria hasta el final . A ver me parece un concepto sumamente original y me alegro que el Basic haya podido permitirte plasmar tu idea. Se ve que hay su esfuerzo detrás, porque viendo el código ¡has programado cada pantalla por separado! Es decir, no hay un motor genérico sino que lo has hecho pantalla a pantalla.
Pues nada chavalote, mucha suerte para que le pongas el broche final. Eso sí, solo te quedan 1526bytes para ese broche
Buenas!
Si quieres darle repercusión a un juego en BASIC lo mismo deberías hablar con Ryback (http://msxbasic.blogspot.com.es/).
Respecto al lenguaje... pues sí, el BASIC es bastante limitado y hay que hilar fino para sacarle la chicha. Cuando programé Pérez the Mouse (http://www.msxgamesworld.com/gamecard.php?id=3178) aprendí un montón de trucos. Muchos de ellos están comentados en la explicación del código fuente; quizá quieras echarle un vistazo a ver qué puedes aplicar a Cavernator :)
Mirando tu código un poco por encima, veo cuatro cosas que pueden mejorar el rendimiento:
1) DEFINTA-Z. No sé si utilizas decimales en alguna parte del código, pero si es que no, en vez de hacer DEFINT de sólo unas variables hazlo de todas. Después del DEFINT accede (aunque sea con X=0) a las variables que más use tu código. Suelen ser X, Y e I (que es la que suele aparecer en los bucles; en tu caso T). De esta forma estarán declaradas las primeras en la lista de variables y tardará menos en acceder a ellas.
2) Eliminar comentarios. Al hacer saltos, el intérprete de BASIC tiene que ir linea a linea. Si hay lineas con comentarios, hay más lineas en las que buscar y tarda más. Ahora mismo no recuerdo si, además, tiene que escanear la linea buscando el final de la misma o tiene un "puntero" a la siguiente linea y da igual el contenido de la misma... En cualquier caso, eliminando comentarios podrías arañar un poquito más de rendimiento.
3) Líneas 670-... Si te fijas, si entra por el THEN de la 630, llama a GOSUB 830 y, cuando vuelve... sigue ejecutando todos los demás IFs. Supongo que en realidad no quieres eso: cada if será una acción diferente así que podrías saltártelos; añadiendo un GOTO 720 después del GOSUB, por ejemplo. O utilizando un ON D GOTO o similar. La idea es que se ejecute el menor código posible siempre. Si tienes cadenas de IFs, pon primero las más frecuentes (por ejemplo, caminar hacia los lados es más frecuente que saltar), de forma que al evaluar llegue antes a ello, lo ejecute, y se salte la mayor cantidad de código posible.
4) Si puedes, intenta organizar el código de forma que los saltos (GOTO y GOSUB) siempre sean hacia delante y que los saltos hacia atrás vayan "al principio" del listado. Esto es por cómo escanea las líneas el intérprete: desde la línea actual si es hacia delante y desde el principio si es hacia atrás. Idealmente, el código estaría estructurado así (números de línea orientativos, pero para que se vea la idea):
10 GOTO510
20-200 Bucle principal de control del jugador, enemigos, etc., saltando siempre o hacia adelante o GOTO 20
210-500 Subrutinas necesarias para el bucle principal a la que llames con GOSUB por orden de criticidad (velocidad que necesitas en ellas y frecuencia de uso): es más necesario que se ejecute rápido la subrutina de disparar que la subrutina de pintar un texto en pantalla. Convendría sacar a subrutinas todo lo que puedas (incluso cosas que sólo utilizas una vez) con tal de minimizar el peso del bucle principal.
510-700 Inicialización del juego (DEFINT, modo de pantalla, carga de recursos, pantalla de título, etc.)
710-1000 Subrutinas no necesarias durante la ejecución del juego (cargar una pantalla, una música, subrutinas de la inicialización, ese tipo de cosas).
Probar el punto 1) es inmediato.
Probar el 2) lleva un poco de tiempo (y la ganancia será mínima).
Aplicar los puntos 3) y 4) seguramente sí que te mejoraría el rendimiento, pero es una tarea bastante ingrata de acometer cuando ya está el código hecho. Y más aún cuando tienes varios bucles principales, como es tu caso. La verdad es que conseguir colocar el código "a favor" del intérprete del BASIC es todo un arte, y por el camino la legibilidad de tu código desaparecerá y habrá veces que se rompa algo difícil de encontrar... pero puede merecer la pena :)
¡Suerte y ánimo! :D
Respecto al lenguaje... pues sí, el BASIC es bastante limitado y hay que hilar fino para sacarle la chicha. Cuando programé Pérez the Mouse (http://www.msxgamesworld.com/gamecard.php?id=3178) aprendí un montón de trucos. Muchos de ellos están comentados en la explicación del código fuente; quizá quieras echarle un vistazo a ver qué puedes aplicar a Cavernator :)
¿Está en BASIC puro y duro? Pues es un juego francamente majo, un buen ejemplo de lo que puede hacerse en Basic con el planteamiento adecuado.