CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 19 Ago 2017 12:24

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 11 mensajes ] 
Autor Mensaje
 Asunto: Combates AGE
NotaPublicado: 08 Sep 2014 18:37 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Buenas, estoy intentando perfilar bien uno de los combates que tiene el protagonista de la aventura. Pero me está quedando un poco aburrido.

Por ejemplo, pego el log:

Spoiler: Mostrar
En el cuadrilátero.
Aquí está El Malo.

Tu orden: blandir espada
Blandes la espada en la mano izquierda.

Tu orden: atacar al malo ---- > ORDEN QUE TECLEO
Salud del malo: 100

Salud del bueno: 100

El Malo blande la hacha.
El malo te planta cara.
Atacas a El Malo con la espada.
El Malo intenta esquivarte.
Tu ataque falla a El Malo.
Viendo tu ataque fallido, El Malo interrumpe su esquivada...
El Malo te ataca con la hacha.
El ataque de El Malo te falla.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo --- > Desde esta orden hasta la última no las tecleo, cursor arriba e intro
Salud del malo: 100

Salud del bueno: 100

Atacas a El Malo con la espada.
El Malo intenta esquivarte.
A El Malo no le da tiempo a esquivar tu ataque...
Aciertas a El Malo con la espada infligiéndole algún daño...
El Malo tiene heridas poco graves.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo
Salud del malo: 88

Salud del bueno: 100

Atacas a El Malo con la espada.
El Malo intenta defenderse con la hacha.
Tu ataque falla a El Malo.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
No crees que puedas bloquear a tiempo el golpe de El Malo con la espada.
La hacha de El Malo está encima, no crees que puedas esquivar el ataque.

Tu orden: atacar al malo
Salud del malo: 88

Salud del bueno: 100

Atacas a El Malo con la espada.
El Malo te acierta con la hacha infligiéndote ligeros daños...
Tienes ligeras heridas.
El golpe interrumpe tu intento de ataque.
El Malo te ataca con la hacha.
El Malo te acierta con la hacha infligiéndote algún daño...
Tienes heridas de cierta consideración.
El Malo te ataca con la hacha.
El ataque de El Malo te falla.
Te recuperas del golpe recibido.

Tu orden: atacar al malo
Salud del malo: 88

Salud del bueno: 82

Atacas a El Malo con la espada.
El Malo intenta esquivarte.
A El Malo no le da tiempo a esquivar tu ataque...
Aciertas a El Malo con la espada infligiéndole ligeros daños...
El Malo tiene heridas de cierta consideración.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
Crees que te daría tiempo a bloquear el golpe de El Malo con la espada.
Seguramente podrías esquivar el ataque de El Malo a tiempo.

Tu orden: atacar al malo
Salud del malo: 81

Salud del bueno: 82

Atacas a El Malo con la espada.
Aciertas a El Malo con la espada infligiéndole ligeros daños...
El Malo tiene heridas importantes.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo
Salud del malo: 73

Salud del bueno: 82

Atacas a El Malo con la espada.
Tu ataque falla a El Malo.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
No crees que puedas bloquear a tiempo el golpe de El Malo con la espada.
La hacha de El Malo está encima, no crees que puedas esquivar el ataque.

Tu orden: atacar al malo
Salud del malo: 73

Salud del bueno: 82

Atacas a El Malo con la espada.
El ataque de El Malo te falla.
Aciertas a El Malo con la espada infligiéndole algún daño...
El Malo tiene heridas graves.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
Crees que te daría tiempo a bloquear el golpe de El Malo con la espada.
Seguramente podrías esquivar el ataque de El Malo a tiempo.

Tu orden: atacar al malo
Salud del malo: 61

Salud del bueno: 82

Atacas a El Malo con la espada.
Tu ataque falla a El Malo.
El ataque de El Malo te falla.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo
Salud del malo: 61

Salud del bueno: 82

Atacas a El Malo con la espada.
El Malo intenta defenderse con la hacha.
Tu ataque falla a El Malo.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
Es posible que te dé tiempo a bloquear el golpe de El Malo con la espada.
Seguramente podrías esquivar el ataque de El Malo a tiempo.

Tu orden: atacar al malo
Salud del malo: 61

Salud del bueno: 82

Atacas a El Malo con la espada.
El Malo te acierta con la hacha infligiéndote ligeros daños...
Tienes heridas importantes.
El golpe interrumpe tu intento de ataque.
Te recuperas del golpe recibido.

Tu orden: atacar al malo
Salud del malo: 61

Salud del bueno: 75

Atacas a El Malo con la espada.
El Malo intenta esquivarte.
A pesar de su intento de esquivar el ataque, aciertas a El Malo con la espada, infligiéndole ligeros daños...
El Malo tiene heridas preocupantes.
El Malo te ataca con la hacha.
Te recuperas de tu movimiento de ataque.
Será muy difícil bloquear a tiempo el golpe de El Malo con la espada.
La hacha de El Malo está encima, no crees que puedas esquivar el ataque.

Tu orden: atacar al malo
Salud del malo: 53

Salud del bueno: 75

Atacas a El Malo con la espada.
El Malo te acierta con la hacha infligiéndote algún daño...
Tienes heridas graves.
El golpe interrumpe tu intento de ataque.
Te recuperas del golpe recibido.

Tu orden: atacar al malo
Salud del malo: 53

Salud del bueno: 63

Atacas a El Malo con la espada.
El Malo intenta esquivarte.
Tu ataque falla a El Malo.
Viendo tu ataque fallido, El Malo interrumpe su esquivada...
El Malo te ataca con la hacha.
El ataque de El Malo te falla.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo
Salud del malo: 53

Salud del bueno: 63

Atacas a El Malo con la espada.
Aciertas a El Malo con la espada infligiéndole algún daño...
El Malo está muy gravemente herido.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar al malo
Salud del malo: 40

Salud del bueno: 63



El malo se rinde.

El Malo dice "Ya no lucho más contigo, me has ganado".
El Malo deja de blandir la hacha.


Me queda aburrido en el sentido que después de blandir mi espada, tecleo "atacar al malo", y el resto de órdenes son cursor arriba (recupero "atacar malo") - intro.
Quería limitar el número de ataque posible seguidos, para evitar el teclear continuamente "atacar malo" "atacar malo" "atacar malo"... hasta que acabe la pelea.

Estoy experimentando en algo como:

Código:

...
     
    set (self, "numAtaques", 0);
    set (self, "limAtaques", 3);
...

 // Algo aleatorio para que no puedas está continuamente atacando
        k = r.nextInt( get ( self, "limAtaques") + 3);
        aCreature.write ("\n\nAleatorio: " + k + "\n\n");
        aCreature.write ("\nNum ataques: " + get ( self, "numAtaques") + "\n\n");

        // No puedes atacar más veces seguidas que el límites de ataques
        if ( get ( self, "numAtaques") > get (self,"limAtaques") - 1 ) {
            aCreature.write ("\nPor límites de ataques, no puedes atacar más.\n\n");
            restaVidas(aCreature);  // Restará puntos de vida al jugador, ya que será golpe certero para el malo
            end();
        }
        // Algo aleatorio para que no todos los ataques sean posibles
        else if ( k <= get ( self, "numAtaques") ) {
            aCreature.writeDenial ("\nTe desequilibras y no puedes atacar.\n\n");
            restaVidas(aCreature); // Restará puntos de vida al jugador, ya que será golpe certero para el malo
            end();
        }
       
        else increment ( self, "numAtaques");


La propiedad numAtaques, lo reinicio a cero siempre que tecleo bloquear o esquivar.

Antes de seguir pregunto si existe otra forma de limitar los ataques seguido del protagonista.

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 08 Sep 2014 19:40 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
No hay una manera "por defecto" de limitar los ataques, la forma "hardwired" que estás haciendo está bien.

De todas formas, creo que es una solución artificiosa... o sea, si el problema es que lo óptimo en ese combate es "atacar, atacar, atacar, atacar, atacar", creo que la solución buena es equilibrar los parámetros del combate para que eso no sea óptimo.

Me imagino que si se te da esa situación tal vez es porque pones unos tiempos de bloqueo demasiado altos. Para que el combate sea balanceado, lo mejor es que bloquear sea más rápido que atacar. Porque si no es así, claro, ¿para qué vas a bloquear si simplemente puedes lanzar un nuevo ataque, y confiar en la velocidad de tu personaje y los dados para que impacte antes que el que tu rival prepara?

Otra cosa que puedes hacer es que los ataques de tu rival sean muy potentes (aunque puedan ser más lentos que los tuyos) para que realmente merezca la pena bloquearlos. O que de vez en cuando el rival lance un ataque especialmente potente (visible en la descripción), y si no bloqueas ése, te haga un daño de tres pares.

Por último, te puedes plantear efectos especiales de los ataques, como que el malo te pueda desarmar y tengas que recoger tu arma, o cosas así.

Vamos, la idea es que para que el combate esté balanceado, "atacar, atacar, atacar, atacar, atacar" tiene que resultar en un jugador muerto, la cosa tiene que requerir algo más de estrategia sin necesidad de que sea forzada... si miras por ejemplo en Morluck's, en el primer combate (con un goblin) sí que funciona normalmente "atacar, atacar, atacar" porque lo puse a propósito a modo de muestra para ir familiarizándose con el juego, y no quería que la gente muriese ahí antes de llegar a ver nada de la aventura. Pero si usas esa estrategia contra alguno de los orcos que salen después... no hay ningún mecanismo que te impida hacerlo, pero simplemente por la manera en que están equilibrados los combates, acabarás muerto :D

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 08 Sep 2014 19:44 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
De todas formas, la verdad es que si añades un mensaje tipo "Estás sin aliento, necesitas un respiro tras tantos ataques seguidos", creo que lo de limitar ataques no tiene por qué quedar mal. Pero yo lo complementaría con alguna de las cosas que he dicho en el mensaje anterior, porque el combate te va a quedar más chulo si el jugador tiene que hacer cosas distintas por estrategia, no sólo porque le están obligando de alguna manera.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 08 Sep 2014 22:19 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Mañana haré pruebas con los tiempos de ataque y bloqueo, a ver si mejoro los resultados.
Como guía, has adivinado que tomé el primer goblin de morluck´s, mañana miraré el resto de orcos de la aventura.

Gracias!

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 05 Oct 2014 19:48 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Hola,

Estoy intentando dejar bien pulida una lucha final con el malo malísimo de mi aventura. Lo tengo casi todo, pero hay varios detalles que me sigue fallando.

Uno de ellos es que le malo, aún teniéndolo identificado como enemigo del jugador:
Código:
mobile("Heroe").addEnemy(mobile("malo"));


No consigo que me ataque hasta que yo le haya embestido, atacado tres o cuatro veces.

Spoiler: Mostrar
Tu orden: atacar
Tu ataque falla a Dragón-Mamón.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar
Aciertas a Dragón-Mamón con la espada infligiéndole muy ligeros daños...
Dragón-Mamón tiene algún rasguño.
Te recuperas de tu movimiento de ataque.

Tu orden: atacar
Tu ataque falla a Dragón-Mamón.
Te recuperas de tu movimiento de ataque.

**** Le he tenido que atacar hasta 3 veces y a la cuarta es cuando el Dragón me ataca *****

Tu orden: atacar
Dragón-Mamón intenta defenderse con la zarpa derecha.
Tu ataque falla a Dragón-Mamón.
Dragón-Mamón grita con voz grimosa y aguda.
Dragón-Mamón te ataca con la zarpa derecha.
El ataque de Dragón-Mamón te falla.
Te recuperas de tu movimiento de ataque.


Luego en los momento en que el Dragón está en estado... digamos pasivo, antes de 4 ataque si tecleo bloquear...

Spoiler: Mostrar
Tu orden: atacar
Tu ataque falla a Dragón-Mamón.
Te recuperas de tu movimiento de ataque.

Tu orden: bloquear
Intentas defenderte de Dragón-Mamón con la espada.
Estás preparado para bloquear...
*** En este punto entra en bucle esperando un ataque del dragón que nunca llega ****


Si tecleo Bloquear, cuando ya el Dragón ha reaccionado al ataque, me funciona correctamente:
Spoiler: Mostrar
Tu orden: bloquear
Intentas defenderte de Dragón-Mamón con la espada.
No te da tiempo a bloquear el ataque de Dragón-Mamón...
Dragón-Mamón hace una repugnante mueca burlona.
Dragón-Mamón te acierta con la zarpa izquierda infligiéndote muy ligeros daños...
Tienes algún rasguño.
Dragón-Mamón grita con voz grimosa y aguda.
Dragón-Mamón te ataca con la zarpa derecha.
Te recuperas del golpe recibido.
No crees que puedas bloquear a tiempo el golpe de Dragón-Mamón con la espada.
La zarpa derecha de Dragón-Mamón está encima, no crees que puedas esquivar el ataque.


En el punto anterior, que he dicho que entraba en bucle esperando un ataque del dragón, he puesto una marca en el update del jugador y se queda ejecutándolo de forma infinita.
Spoiler: Mostrar
Tu orden: bloquear
****Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***

*** Update del Héroe***


Código:
void update ( PropertyEntry pe , World w )
{
    self.write("\n*** Update del Héroe***\n");
       
    if ( equals(pe.getName(),"state") )
    {
        int theState = self.getState();
        switch ( theState )
        {
            case Mobile.IDLE:
                 break;
            case Mobile.MOVING:
                 break;
            case Mobile.ATTACK_RECOVER:
                 mobile ("malo").restarVida ( comprobarResultadoAtaque( mobile ("malo") ) );
                 mobile ("malo").reiniciarAtaques( self );
                 break;
            case Mobile.BLOCK_RECOVER:
                 break;
            case Mobile.DAMAGE_RECOVER:
                 break;
            case Mobile.DODGE_RECOVER:
                 break;
            case Mobile.SURPRISE_RECOVER:
                 break;
            default:
                break;
        }
    } 
 
}


en definitiva, que me he quedado sin ideas...

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 05 Oct 2014 20:27 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
El tema de añadir un enemigo lo estás haciendo al revés, o estás pensando que la asociación de enemigos se establece en los dos sentidos automáticamente, pero no es así si no recuerdo mal.

Añades un enemigo a un Mobile para que su IA ataque al enemigo sin necesidad de ser provocado.


Arriba
 Perfil  
 
NotaPublicado: 05 Oct 2014 20:43 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
El tema del enemigo es lo que te ha dicho dddddd. Para que el dragón ataque automáticamente al jugador, tienes que añadir al jugador como enemigo del dragón, no al revés. Tal como está, el jugador considera que el dragón es su enemigo, pero al dragón el jugador no le cae mal :D

Sobre el bucle infinito al bloquear, es porque la manera en que funciona el combate de AGE es que cuando te bloqueas, lo que haces es ponerte en posición de bloqueo (READY_TO_BLOCK) y en esa posición te mantienes esperando un ataque hasta que llega (lo tienes explicado en http://www.caad.es/aetheria/doc/doku.ph ... _criaturas). Si el ataque no llega nunca, pues te mantienes así eternamente. La cosa es que con la IA por defecto del AGE, eso no sucede porque los enemigos siempre te están atacando hasta que te matan o mueren. Pero claro, si has sobreescrito la IA de forma que el enemigo por cualquier motivo no ataca, se puede crear ese bucle. Así que lo que tendrás que hacer será, en el update del héroe, redefinir el estado READY_TO_BLOCK para que si el enemigo no va a atacar, el jugador deje esa posición de guardia (por ejemplo volviendo al estado IDLE con temporizador 1, para que en la siguiente unidad de tiempo el jugador pueda tomar una nueva decisión). Asimismo, si hay código en la aventura que haga que el enemigo pueda morir o largarse mientras el jugador está bloqueando, también tendrás que tenerlo en cuenta para interrumpir el estado READY_TO_BLOCK y que el jugador no se quede ahí esperando.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 06 Oct 2014 07:01 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
Por cierto, lo mismo tendrás que hacer para el estado READY_TO_DODGE que es el análogo para esquivar.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 06 Oct 2014 11:24 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Al-Khwarizmi escribió:
Por cierto, lo mismo tendrás que hacer para el estado READY_TO_DODGE que es el análogo para esquivar.


Buenas, modifiqué el update del jugador, ya no se queda en la eterna espera a que el dragón le ataque.
Spoiler: Mostrar
Código:
void update ( PropertyEntry pe , World w )
{
 
    if ( equals(pe.getName(),"state") )
    {
        int theState = self.getState();
        switch ( theState )
        {
            case Mobile.IDLE:
                 break;
            case Mobile.MOVING:
                 break;
            case Mobile.ATTACK_RECOVER:
                 mobile ("malo").restarVida ( comprobarResultadoAtaque( mobile ("malo") ) );
                 mobile ("malo").reiniciarAtaques( self );
                 break;
            case Mobile.READY_TO_DODGE:
            case Mobile.READY_TO_BLOCK:
                 self.writeDebug ("\nEstás bloqueando.\n");
                 if ( ! equals ( mobile ("malo").getState (), Mobile.ATTACKING ) ) {
                    self.writeDebug ("\nEl dragón no está atacando.\n");
                    set (self, "state", Mobile.IDLE);
                    setTime ( self, "state", 0);
                 }
                 break;
            case Mobile.BLOCK_RECOVER:
                 break;
            case Mobile.DAMAGE_RECOVER:
                 break;
            case Mobile.DODGE_RECOVER:
                 break;
            case Mobile.SURPRISE_RECOVER:
                 break;
            default:
                break;
        }
    } 
 
}


También me enemisté con condiciones con el dragón:

Código:
mobile("malo").addEnemy(mobile("Heroe"));


Sin embargo sigue siendo un Dragón que me tiene mucho cariño y le cuesta arrancarse para que me ataque. Algunas veces me responde a la primera otras a la tercera... depende como le de.
En el caso de la IA del dragón no le llegue a modificar nada, me responde siempre por defecto.
No ha quedado del todo mal, pero quedaría mejor que el dragón nada más verte me metiera un zarpazo o algo así. Seguramente haga algún método de cuando comience la batalla el dragón pegue al jugador una escupinadilla de fuego.

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 06 Oct 2014 12:43 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5268
Ubicación: Coruña
Hmm, si el dragón te considera tu enemigo, debería iniciar un ataque nada más verte. Otra cosa es cuánto tarde en impactar el ataque, pero al menos el inicio debería ser nada más tenga oportunidad. ¿Será que el dragón está haciendo algo que consuma varias unidades de tiempo, como moverse entre habitaciones o algo así? En ese caso, antes de atacarte tendría que terminar lo que está haciendo. Si es así, siempre puedes puentearlo "hardcodeando" un ataque como has dicho.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 06 Oct 2014 17:59 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Hecho!

Ahora pulir un poco la "literatura" del combate, la incluyo en la aventura, y a requetestearlo...( Fernando Gregoire ya está sufriendo en sus carnes las llamas del Dragón) .

:P

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 11 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM