miércoles, 13 de agosto de 2008

viejos programas en AMOS

Como ayer tuve que ir a la sierra, aproveché para montar el Amiga y cargar unos cuantos programas que había hecho en AMOS, un lenguaje parecido al BASIC, pero especializado en la creción de videojuegos, con funciones para "pegar" sprites, detectar el joystick...etc

En los diquetes que cargué había:
-Proyectos de aventuras conversacionales:
Uno con gráficos concluído... hasta que se me agotó la memoria, dos bocetos, y otro sólo texto que no sé si termina, porque desde luego que son injugables.
El código es algo así como unas definiciones de DATAs con los verbos y el vocabulario, todos recortados "mira" "exam" "coge" "da"... y luego un input y a buscar coincidencias.
En la primera localidad de la que está terminada no logré hacer nada, y eso que más o menos recuerdo por dónde van los tiros, más que nada porque ese comienzo más tarde lo reciclé para "La Guarida Valshar".

-La aventura del Orco:
Quizá es lo más jugable que programé, es una aventura 2D de un orco que tiene que recuperar la piedra Il que cura una enfermedad que afecta a su horda. Con el joystick nos movemos, podemos recoger objetos, y con disparo accedemos a un menú para hablar (escribiendo tal cual) o utilizar objetos, entre ellos un libro de hechizos (también deberemos escribirlos tecleando).

-Proyectos de juego de rol en primera persona
Tipo Eye of the Beholder, sin monstruos ni menús, sólamente los laberintos y los dibujos de los muros. Curiosamente los laberintos estaban definidos en una matriz de DATA con "1" y "0", indicando los huecos y los muros, lo mismo que he hecho recientemente para la automatización en una malla 2D de los laberintos de PUJ.

-Varios:
*El Tron, llamado "Destellos", para uno o dos jugadores y con varios niveles, algunos de los cuales tienen "passing-points" que irán rellenando un marcador al pasar sobre ellos.
*El ahorcado con un monigote dibujado a un lado, con la cabeza metida en una guillotina, que gesticula en función de nuestros aciertos, y acabará gullotinado si fallamos.
*El buscaparejas: un damero de casillas ocultas que revelaremos por parejas mostrando las imágens que esconden. Se trata de ir recordando donde estaba cada una, para levantar a la vez las que son iguales.
*La barra y la pelotita, un machacaladrillos pero sin ladrillos, un frontón en solitario.
*El Lingo, el juego del programa de la tele.
*Proyectos de aventuras gráficas con menús tipo Delphine pero sin personajes, que no pasan del menú o de una pantalla sin mucho que hacer.
*Proyectos de plataformas 2D con muñegotes saltarines.
*Proyectos de isométricos (sólo el movimiento del personaje)

Los gráficos dibujados a golpe de Deluxe Paint

Las fotos de las pantallas han salido fatal, el refresco de pantalla era muy lento al hacer correr los juegos (cosas de ser un lenguaje interpretado), incluso se podía apreciar a simple vista el barrido

Ventana principal de edición de AMOS. Lo que más me llamó la atención son lo diminutos que son los códigos en comparación con los fuentes que manejo ahora.


La aventura del Orco. te puedes mover de derecha a izquierda o entrar por las puertas hacia habitaciones paralelas. Las pantallas están dibujadas a base de "tiles".
El objetivo era encontrar la piedra mágina Il, pero como el juego no tenía instrucciones, eso sólo lo sé yo... bueno, ni yo, porque hasta que no terminé le juego no me acordé de cuál era el objetivo.

Empezabas en una serie de salas por las que deambulaba otro como tú llamado Blongo. En general, por todo el juego hay placas en la pared que te dan pistas en plan "las mejores cosechas crecen bajo las estrellas" "en la marca roja..." y algunas otras con simples tonterías inservibles como "la intuición radica en el rabillo del ojo".
Los hechizos que usas son 5:
-El de disminución, para convertir a un monstruo verde que no te deja pasar en un enanito que huye despavorido.
-El de crecimiento, para hacer brotar setas, sólo posible por la noche, como te dice la pista. Para que sea de noche, si resulta que es de día, hay que darse una vuelta pasando pantallas, o entrar y salir entre dos, ya que a cada paso de pantalla progresa el cielo exterior.
-El de miedo, para apartar a un tipo que te dispara con una cervatana, trás descubrir aquello a lo que teme: a las setas.
-El de descubrir, para ver cual de los toneles de "lom" de la bodega está marcado con una X. Aquel que beba de él se convertirá en una seta (hay que aprovechar los sprites). Llenas una copa, se la llevas a Blongo y se convierte en una seta al beberla, una seta que repite una palabra mágica, un hechizo para teletransportarte... (ingenioso ¿verdad? XD)
-El de convertir en oro... al revés. Al final del juego nos encontramos con la situación de que el que tenía la piedra Il ha convertido todo lo que tenía en oro, incluída la piedra. Entonces tenemos que escribir el hechizo de convertir en oro al revés para desfacer la pifia.




Las aventuras conversacionales. La que se ve en la parte superior es la que está terminada. Básicamente empezabas en una celda, como en La Guarida Valshar, luego aparecía por ahí una rata parlanchina, le pedías comida al carcelero, y se la dabas a la rata, que te mostraba una salida secreta. Llegabas a otra sala a través de una máquina de Cocacola, o algo así. Luego había un bosque con un gnomo que hacías salir de su casa tapándole la chimenea, una taberna, y un precipicio con un tronco en medio del cual te esperaba un diablo. A éste le hacías caer metiendo una vara en un hueco del tronco y haciendo palanca para que girase.

La de la parte inferior es sólo un modelo, no hay nada más que hacer, que ver que funciona coger cosas y los verbos.
Destacar la parafernalia del marco, muy propio de cuando la memoria era un problema, para meter gráficos lo más pequeñitos posibles sin que cantase mucho que eran ridículamente pequeñitos.


Arriba el juego del Lingo, que trata de adivinar palabras. Primeramente te aparecen una pocas letras y espacios en blanco, por ejemplo: -R--A-
A continuación pruebas una palabra que case con el modelo, por ejemplo TRIGAS, si no era esa la palabra, al menos se te marcarán las letras que coincidan en posición con el de la palabra secreta (si esta fuera BRIDAS, en el siguiente turno se quedaría la palabra así: -RI-AS)

Abajo, un "dungeon" con el menú de movimiento (sin los gráficos de las flechitas) típico de este género: Avanza, gira, atrás, y moverte en paralelo.
Los muros están realizados gracias a la opción de deformacion en perspectiva del Deluxe Paint. De todas formas, recuerdo que fue llevadero recortar cada trocito de muro para todas las posibles posiciones en 3 o 4 niveles de profundidad (afortunadamente los dungeons son muy oscuros, y puedes justificarte así de no dibujar más planos hasta que no quepan los pixels :D)
Éste se mueve un poco lento por el tamaño descomunal de la ventana gráfica (le llevaba demasiado tiempo a la máquina montar todos los srpites, y más teniendo en cuenta que esto es un lenguaje interpretado, y parte de la memoria la está consumiendo el propio AMOS); de modo que hice otro con la ventana más pequeñita, y así corría más ligero.

martes, 12 de agosto de 2008

IA en el juego de mesa-estrategia

Técnicas de estrategia.
Por ahora la IA de los emperadores rivales manejados por el ordenador funciona así, en base a un sistema de puntuación:
1. Valorar movimiento de tropas.
-Busca territorios propios
-Busca territorios accesibles desde los propios
-Comprueba que hay tropas que mover
*Valora el número de tropas enemigas en esos territorios.
-Comprueba que nuestras tropas son suficientes para ganar. ++ o --
*Valora riqueza de ese territorio. ++
*Valora si es capital de otro reino. ++
-Si no hay tropas para mover desde el territorio que da acceso al movimiento de máxima puntuación, valorar un posible paso de tropas desde otro territorio colindante, para en el siguiente turno...

2. Valorar lo expuesta que está nuestra capital
-Busca el territorio donde está nuestra capital
-Busca territorios accesibles desde/hacia
-Comprueba si son nuestros o enemigos
-Si son enemigos valora el número de tropas y nuestra fuerza defensiva.
-Si la capital está en peligro:
A-Busca territorios colindantes con aquel que supone la mayor amenaza
-Busca tropas propias en esos territorios
-Valora si alguna de esas tropas es suficiente para acabar con la amenaza
->Ataca
B-Comprueba cuantas tropas podemos reclutar en la capital
-Valora si son suficientes para resistir el posible ataque.
-> Arma las tropas necesarias en la capital
C-Busca territorios colindantes con nuestra capital
-Busca tropas propias en ellos
-Valora si con su regreso a la capital, ésta estará suficientemente defendida
-> Mueve tropas hacia la capital
(no valora la posibilidad de múltiples amenazas sino que busca la mayor de entre ellas; en el caso de múltiples, las dos últimas opciones, B y C, serían preferibles a la primera, A)

3. Valora reclutamientos.

De momento lo he puesto a funcionar saltando el turno del jugador para ver a toda velocidad el transcurso de la guerra, y la cosa funciona poco inteligentemente; se crean circuitos repetitivos que tardan mucho en deshacerse. Lo cual es normal, si todos los emperadores tienen el mismo criterio de ataque y defensa, parece que juegan al gato y al ratón mordiéndose las colas, y sólo tras mucho tiempo alguna capital es tomada y cambian los ciclos por unos momentos para volver a hacerse regulares.

Hay que ampliar la IA con variaciones personalizadas para valoraciones secundarias. Por ejemplo, entre varios posibles territorios de avance, tender a elegir el más rico, el que posea más enemigos, el que pertenezca al emperador que más nos ha atacado...

También con objetivos a largo plazo: La estrategia principal del juego será tomar las capitales, que son el punto flaco de los demás imperios, pero también conquistar pro el camino el mayor número de territorios para obtener más rentas y más soldados. Por tanto, buscar recorridos óptimos hacia las capitales más cercanas y débiles pasando de camino por los territorios más fáciles de conquistar.

Y con autocorreciones: si tras varios turnos, el promedio de territorios, riqueza y tropas sale negativo en comparación con la media de los demás emperadores, algo está haciendo mal, luego debe cambiar sus criterios de valoración secundarios (los que no tienen que ver con la defensa de la capital, que son prioritarios)

sábado, 9 de agosto de 2008

El Wargame y la Aventura 2D en acción

Unas capturas subidas a Youtube:

viernes, 8 de agosto de 2008

Toi CAAD

sábado, 2 de agosto de 2008

pythoneando

Empecé a primeros de Julio a investigar Python+Pygame, y la verdad es que ha cundido la cosa. Este blog que al principio pretendía ser de programación de Inform, y luego pasó a ser de programación y chismorreos caadianos, va a terminar por ampliarse a blog de videoaventuras en general. Esto es: videoaventuras conversacionales, videoaventuras de plataformas, videoaventuras de mesa...

Empecé realizando el proyecto que tantos años deseaba hacer y no pude por mi falta de conocimientos de programación: una aventura 2D tipo Another World, que cumpla ciertos aspectos que considero importantes:
-Gravedad e inercias reales, velocidad, nada de saltos fantasma en plasma líquido. Puedes controlar los saltos mientras en la animación el personaje tenga algún pie en el suelo; una vez en el aire, éste sigue una trayectoria invariable salvo que se estampe con alguna masa.
-Transiciones entre acciones: no puedes pasar de correr a andar así sin más, ni cambiar de dirección sin amortiguar la inercia. Mismamente, si vas corriendo y pulsas para salto de longitud, el comando no se ejecutará instantáneamente sino en el momento en el que termines la zancada, para tomar impulso, como lo antes dicho.

Para esto las acciones van por pilas: accion_actual y accion_siguiente, la cual salta cuando el frame de transición sea el correcto.

Más o menos he conseguido el motor, más o menos porque se podría mejorar con más fidelidad, pero es un coñazo dibujar tantos frames.
Grabación en video->volcado->selección de fotogramas->calco en vectorial->conversión en bitmap->edición->"amontonamiento" en capas->grabación en PNG

...

Como me estaba saturando de este proyecto, y no estaba inspirado para un buen guión, carpetazo y quise hacer un juego de mesa tipo risk.
31 territorios y 8 emperadores rivales por conquistarlos.

El sistema de lucha será sencillo: 2 contra 3 = mueren dos de cada ejército y gana el segundo con una tropa viva; con algunos modificadores: los que atacan tienen un porcentaje de desventaja; también se acumula un portentaje negativo si atacan una ciudad fortificada (hasta tres niveles de fortificación); o si atacan un reino montañoso, donde mismamente los que ya están ahí esperando tienen ventaja posicional sobre los que llegan.
El sistema se irá calibrando cuando funcione.

También barajo -utópicamente- hacer los combates jugables, de forma que el 2 contra 3 ganan los segundos sea más relativo (aunque 2 contra 4 ni de coña), adquiriendo la piel del general que da las órdenes, las cuales son transmitidas por los músicos con códigos de trompetiles, y con muchas animaciones "jolgoriosas" de fondo (si no, no mola):
¡arqueros!, ¡primera línea avance!, ¡atrás!... tipo Patapón-pon-pata-pon.

El proyecto 1: Las criaturas humanoides, llamadas naar, tienen cada una un rostro diferente y personal, aunque no se aprecie mucho. Superpongo una máscara translúcida con los matices... y, anden, corran o salten, la cabeza siempre horizontal :D La máscara es de boca para arriba, para hacer comunes los frames de cuando muevan la boca para hablar.

El war-game, en el que de momento no se puede hacer nada más que pasear el ratón por el mapa y curiosear.
El menú de la derecha son las acciones básicas (sin implantar):
-Mover tropas
-Fortificar un sitio
-Reclutar hombres.
Faltan:
-Trasladar la capital del Imperio ( si cae una capital el conquistador se queda con todo, aunque para conquistar una capital, además de enfrentarse a las fortificaciones y tropas que allí se hallen, hay una guardia pretoriana fija, y de regalo, que vale como 3 o 4 tropas)
-Enviar órdenes (las acciones no se ejecutarán hasta que envíes las palomas mensajeras a tus generales repartidos por el imperio). Una vez enviadas, correrá el turno (el mes), se verán los resultados, y los movimientos que han hecho los emperadores rivales.

En fin, lo más importante de Python es esto:
# -*- coding: iso-8859-1 -*-
¡¡¡Sin esta línea mágica no se pueden escribir acentos ni eñññññññes!!!