Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: J-Dek en Diciembre 13, 2011, 12:27:52 PM

Título: Ayuda una vez m?s: Ataque, niveles, etc.
Publicado por: J-Dek en Diciembre 13, 2011, 12:27:52 PM
Lo que quiero hacer es un sistema de batalla de movimiento libre, y lo que me falta por hacer es lo siguiente, que es donde me quedo siempre y no s? avanzar muy bien:

CitarLos ataques ser?n objetos (sprites o efectos de particulas) pero no quisiera editar un ataque igual para cada personaje, si no cinco ataques distintos
y que el objeto protagonista y el objeto enemigo puedan utilizarlos.

Que a la hora de atacar/recibir da?o, se tenga en cuenta el nivel, ataque, ataque especial, defensa, defensa especial y el tipo del enemigo.

Es lo ?ltimo que me falta para poder completar una demo. Muchas gracias por adelantado...
Título: Re: Ayuda una vez m?s: Ataque, niveles, etc.
Publicado por: elviskelley en Diciembre 13, 2011, 03:56:56 PM
yo uso para los sistemas de experiencia unas variables que suben con cada nivel que se encargan de esas ecuaciones.
declaro estas variables siempre en global.-
damage=1 //para el da?o
resist=0  //para la resistencia al da?o
cuando sube de nivel el personaje las aumento asi
damage*=1.4 //suma un 40% mas de damage por nivel
resist*=1.2 //20% mas de resistencia.

al momento de la colision con una bala enemiga el da?o lo hago asi.
var a;
a=other.damage-resist
health-=a;
es decir le resta energ?a seg?n el da?o que puede producir pero disminuido por la resistencia.
Título: Re: Ayuda una vez m?s: Ataque, niveles, etc.
Publicado por: NOKAUBURE en Diciembre 13, 2011, 05:32:44 PM
Te dejo mi formula de da?o que uso en el juego. Incluye atakes comunes, probabilidad de hacer MISS, CRITICO, BLOCK.
Las variables que actuan son:
STR: Es la fuerza fisica
END: Es la resistencia fisica
DEX: Es la destreza (punteria/evasion)
Critico: Es el porcentaje de acertar criticos
Block: Es el porcentaje de anular atakes
targetid: La id del enemigo. Consiguela de cualquier manera. Si deseas poner este codigo a un proyectil, se lo pones en collision y cambias targetid por other

[gml]// fin de auto atake
if ataking = 1
{
ataking = 0;
// miss
{
if targetid.DEX > DEX
{
misschance = round((DEX/targetid.DEX)*100)
misschance = 100-misschance
if misschance > 90 {misschance = 90}
acierto = round(random(100))
// exit si se hace miss!
if acierto < misschance {exit;}
}
}
//block
acierto = round(random(100))
// exit si te hacen block!
if acierto < targetid.block  {exit;}
damage = (STR*2)-targetid.END
//critico
golpe = round(random(100))
if golpe < critical {damage = damage*2;}
if damage < 1 {damage = 1}
targetid.HP -= damage
}
[/gml]

1- el codigo se activa cuando la variable "ataking" es igual a 1. Asi que por ej, cada vez que tocas SPACE, el ataking se vuelve 1 y debes esperar unos 30 steps para volver a atakar.

2- esto se lo puedes poner tranquilamente a un proyectil, solo cambia targetid por other y lo pones en el event colision. Y que al crearse la variable ataking sea 1.

3- El codigo esta hecho de forma que nunca puedas quitar menos de 1 vida y nunca puedas tener menos del 10% de punteria. Puedes quitar los factores de block y punteria borrando las respectivas linias si deseas.

4- El verdadero codigo tiene 100 linias xd te optimize el codigo para que lo entiendas.