Consulta con Decorate.

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Diseño DooM -> Edición de mapas
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Phobos Anomaly
Moderador



Registrado: 01 Feb 2007
Mensajes: 315
Ubicación: Phobos, UAC instalations

MensajePublicado: Mar May 29, 2012 1:53 am    Título del mensaje: Consulta con Decorate. Responder citando

Hola, hace mucho que no hago un tema para preguntar algo sobre la edición de Doom, dulce amargamente puedo decir que creo que haré muchos a partir de ahora, jeje.



Bueno al caso, resulta que hice un enemigo de poca originalidad y muy simple y se me ocurrió darle un nuevo ataque, lejos de crear un nuevo State decidí usar el state missile para poner mi ataque personalizado, ya que me sirve lo random del state para el ataque que hago.


Bueno el ataque en si es un simple salto, practicamente es el ataque que hace el Imp en Doom3, que te salta a a la cara y te golpea.

Bueno, no logro hacerlo funcionar!, pensé en usar el ThrustThing y ThrustThingZ para impulsar los frames que animé hacia adelante y un poco hacia arriba pero no logro encontrar algún Action Funtion que genere un daño al contacto con el jugador.


Luego pensé: "claro! usare el A_SkullAttack!", creí que tenia el mundo en mis manos, pero al probarlo me di cuenta del inconveniente, cuando mi monstruo salto hacia mi lo esquive y siguió volando hasta que choco con una pared, no se como hacer que se detenga cuando yo quiero.

Aquí esta hasta ahora lo que he intentado hacer:


Código:
     
     Missile:
       IMPJ ABCD 4 A_facetarget
       IMPJ E 0 A_SkullAttack
       IMPJ E 0 ThrustThingZ (0, 15, 0, 1)
       IMPJ F 8
       IMPJ EDCBA 4 A_Stop
       goto see


Tiene 6 frames en total la acción, pero recién en el frame E es cuando debe ejecutarse la barrida que pretende dañar al jugador al contacto.


Agradecería que me asesoren sobre el tema, e visto algunos decorates que lo hacen pero yo necesito entenderlo para usarlo, no quiero copiarme un código que no entiendo, necesito aprender no solo hacer los monstruos.


Desde ya muchas gracias.
_________________

Play DooM or die.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Aluqah
Gurú del Mapeo



Registrado: 01 Dic 2006
Mensajes: 156

MensajePublicado: Mar May 29, 2012 2:50 am    Título del mensaje: Responder citando

Phobos Anomaly escribió:
Código:
     Missile:
       IMPJ ABCD 4 A_facetarget
       IMPJ E 0 A_SkullAttack
       IMPJ E 0 ThrustThingZ (0, 15, 0, 1)
       IMPJ F 8
       IMPJ EDCBA 4 A_Stop
       goto see


¿No te funciona? Estuve modificando un monstruo de un mapa mío que hacía lo mismo (pero sin detenerse, hasta que encontraba una pared) y con tu método ahora da saltos cortitos. Copio y pego, es prácticamente lo mismo (copié la duración de los frames del final del tuyo, incluso):

Código:
BRIP I 5 A_FaceTarget
BRIP J 0 A_SkullAttack
BRIP J 0 ThrustThingZ(0,20,0,1)
BRIP J 8
BRIP JJJJJ 4 A_stop

_________________
- Aluqah's Web -

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
Phobos Anomaly
Moderador



Registrado: 01 Feb 2007
Mensajes: 315
Ubicación: Phobos, UAC instalations

MensajePublicado: Mar May 29, 2012 3:11 am    Título del mensaje: Responder citando

Aluqah escribió:
Phobos Anomaly escribió:
Código:
     Missile:
       IMPJ ABCD 4 A_facetarget
       IMPJ E 0 A_SkullAttack
       IMPJ E 0 ThrustThingZ (0, 15, 0, 1)
       IMPJ F 8
       IMPJ EDCBA 4 A_Stop
       goto see


¿No te funciona? Estuve modificando un monstruo de un mapa mío que hacía lo mismo (pero sin detenerse, hasta que encontraba una pared) y con tu método ahora da saltos cortitos. Copio y pego, es prácticamente lo mismo (copié la duración de los frames del final del tuyo, incluso):

Código:
BRIP I 5 A_FaceTarget
BRIP J 0 A_SkullAttack
BRIP J 0 ThrustThingZ(0,20,0,1)
BRIP J 8
BRIP JJJJJ 4 A_stop



Pues funciona a medias, me he puesto a corregir algunas cosas tratando de tener un mejor resultado y esto es lo que me salio:

Código:
       Missile:
       IMPJ ABCD 4 A_facetarget
       IMPJ E 2 ThrustThingZ (0, 15, 0, 1)
       IMPJ F 6 A_SkullAttack
       IMPJ EDCB 4
       IMPJ A 4 A_Stop
       goto see


El frame E y F son respectivamente los frames donde el bicho ya esta en el aire y hace su ataque, los demás frames es solo animacione antes y luego de saltar, una vez hecho el A_Skullatack la única forma de detenerlo fue usando A_Stop, pero con esa función se detiene completamente en un frame y no hace los demás, osea que salta y en un segundo ya esta en el state See.


Ahora en ese nuevo código e logrado que sí haga su animación cuando aterriza (la animación de despegue pero al revés), pero durante esa misma animación el bicho sigue moviendo se hacia adelante, por que sigue dentro del A_skullattack que lo empuja hacia adelante.

Además cuando me pongo en frente para recibir el ataque veo que el bicho me golpea cuando me toca pero con su ataque melee, la barrida en si no produce daño al contacto, y eso es lo que yo quería, que golpee con esa animación, por que sino lo único que hace es acercarse a uno.
_________________

Play DooM or die.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Aluqah
Gurú del Mapeo



Registrado: 01 Dic 2006
Mensajes: 156

MensajePublicado: Mar May 29, 2012 1:17 pm    Título del mensaje: Responder citando

No sé que saldrá de este invento, pero puedes probar:

Volver a usar el ThrustThing para impulsarlo. Luego tu problema es que el monstruo te ataque cuando entre en contacto, se me ocurre usar el A_JumpIfCloser para verificar cuan cerca del jugador está.

Calculando cuanto tiempo dura el salto, le das la cantidad adecuada de frames:

Ejemplo para un salto que dure de 5 tics (sí, es muy poco, es para no poner un ejemplo larguísimo):

-Como funcionaría: si durante el salto (los 5 frames "F") el jugador no está cara a cara sigue al "goto see" y no pasa nada. Si en cualquier momento del salto está cara a cara, el script salta a la línea de meleeattack.


Código:
Missile:
IMPJ E 1 A_facetarget
IMPJ E 2 ThrustThingZ (0, 15, 0, 1)
IMPJ E 6 ThrustThing (0, 15, 0, 1)   //¿?
IMPJ F 1 A_JumpIfCloser(32,5)
IMPJ F 1 A_JumpIfCloser(32,4)
IMPJ F 1 A_JumpIfCloser(32,3)
IMPJ F 1 A_JumpIfCloser(32,2)
IMPJ F 1 A_JumpIfCloser(32,1)
goto see
IMPJ GHIJ 2 A_MeleeAttack      //o lo que sea que haga
goto see


Que el frame F dure 1 tic es algo exagerado, dos 2 o 3 debería andar bien.
_________________
- Aluqah's Web -

Volver arriba
Ver perfil del usuario Enviar mensaje privado Visitar sitio web del autor
Zedeck
Mapeador



Registrado: 08 Jun 2010
Mensajes: 117
Ubicación: Me perdi, no entiendo el mapa!!!! oh es el Valhalla

MensajePublicado: Mar May 29, 2012 8:33 pm    Título del mensaje: Responder citando

Phobos amigo, yo tengo un monstruos que hace eso ala perfeccion, es un imp modificado, pero como ahora estoy sin internet por faltas de pago, no puedo pasartelo, pero le envie una copia a cyberarch hace algun tiempo, si puedes pidele a el que te envie el wad, o esperar a que yo te lo pueda enviar.
_________________
Alabada sea La Gran Ballena de La Luz que permita que exista DooM

Volver arriba
Ver perfil del usuario Enviar mensaje privado
Phobos Anomaly
Moderador



Registrado: 01 Feb 2007
Mensajes: 315
Ubicación: Phobos, UAC instalations

MensajePublicado: Jue May 31, 2012 12:40 am    Título del mensaje: Responder citando

Aluqah escribió:
No sé que saldrá de este invento, pero puedes probar:

Volver a usar el ThrustThing para impulsarlo. Luego tu problema es que el monstruo te ataque cuando entre en contacto, se me ocurre usar el A_JumpIfCloser para verificar cuan cerca del jugador está.

Calculando cuanto tiempo dura el salto, le das la cantidad adecuada de frames:

Ejemplo para un salto que dure de 5 tics (sí, es muy poco, es para no poner un ejemplo larguísimo):

-Como funcionaría: si durante el salto (los 5 frames "F") el jugador no está cara a cara sigue al "goto see" y no pasa nada. Si en cualquier momento del salto está cara a cara, el script salta a la línea de meleeattack.


Código:
Missile:
IMPJ E 1 A_facetarget
IMPJ E 2 ThrustThingZ (0, 15, 0, 1)
IMPJ E 6 ThrustThing (0, 15, 0, 1)   //¿?
IMPJ F 1 A_JumpIfCloser(32,5)
IMPJ F 1 A_JumpIfCloser(32,4)
IMPJ F 1 A_JumpIfCloser(32,3)
IMPJ F 1 A_JumpIfCloser(32,2)
IMPJ F 1 A_JumpIfCloser(32,1)
goto see
IMPJ GHIJ 2 A_MeleeAttack      //o lo que sea que haga
goto see


Que el frame F dure 1 tic es algo exagerado, dos 2 o 3 debería andar bien.



Ah, ya entiendo, tu lo que propones que mientras dure el salto se este checando la proximidad al player. Si al frame de melee attack le dejo el frame de salto creo que quedaría como yo quiero.


Voy a intentarlo ahora mismo, solo una duda, exactamente a que equivale el valor del primer argumento de A_Jumpifcloser? quiero saber cual es la referencia que usa, por ejemplo, a que equivale el valor 35 que tu usas.
_________________

Play DooM or die.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Phobos Anomaly
Moderador



Registrado: 01 Feb 2007
Mensajes: 315
Ubicación: Phobos, UAC instalations

MensajePublicado: Jue May 31, 2012 6:16 am    Título del mensaje: Responder citando

Dobre post, lo he solucionado!


Lo que me propusiste Aluqah no me ha funcionado, por alguna razón que todavía no entiendo el A_jumpifcloser no me respondía, sera que como no entiendo las unidades con las que trata pues no le asigne un valor correcto.

Pero lo que si aprendí con tu "invento" Aluqah es que los script no son una formula con una gama de opciones, sino un amplio repertorio de funciones que hay que combinarlas con ingenio e imaginacion.


Código:
 
      Missile:
       IMPJ ABCD 3 A_facetarget
       IMPJ E 2 ThrustThing (angle*256/360, 14, 0, 0)
       IMPJ F 0 ThrustThingZ (0, 14, 0, 1)
       IMPJ FFFFFFFFFF 1 A_CustomMeleeAttack (5, "imp/melee")
       IMPJ EE 1 A_CustomMeleeAttack (5, "imp/melee")
       IMPJ DCBA 3
       goto see


Ahí esta, como quería, durante todo el tiempo que dure el salto el bicho sera dañino al contacto. Agregue la cantidad de frames equivalentes al tiempo en que ThrustThing/Z cumplen su función, entonces en cada frame se esta ejecutando el golpe y da como resultado que en ese tiempo sea dañino al contacto.

Ahora bien, A_Sargeattack era demasiado potente como para ponerlo como golpe, era asesinado de una sola arremetida dada la cantidad de golpes y el gran daño, así que especifique mi propio ataque melee con A_CustomMeleeAttack, un daño de 5 y el 2do argumento ejecuta el sonido especificado.

Ha quedado como quería, y he aprendido una serie de cosas que estoy ansioso por aplicar, gracias por la ayuda!

Si alguien tiene alguna sugerencia o formas de optimizar el código siéntase libre de dar su opinión, lo digo para cualquier post que haga de esta clase.


PD: Zedeck, me interesa que postees el decorate que dices, así puedo comparar y ver de que formas te las ingeniaste, cuando puedas no dudes en mostrarlo!
_________________

Play DooM or die.

Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo MSN Messenger
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro Diseño DooM -> Edición de mapas Todas las horas están en GMT + 2 Horas
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by phpBB

Todos los contenidos de esta página, salvo que conste un autor o licencia diferente, están licenciados bajo la Licencia Creative Commons
DOOM y DOOM II son marcas registradas de id Software, Inc.