gabe555 Administrator
Nº de Posteos : 1963 Fecha de inscripción : 2009-10-30 Edad : 35 Localización : Argentina
| Subject: Compatibilidad con Choque de poderes (MFT) Wed Aug 10, 2016 12:34 pm | |
| Bueno gente, aquí les traigo este thread de compatibilidad con los choques de poderes del Midnight Fighters Team diseñado por Emiliano 01 en su Vegeta con el fin de que podamos interactuar entre los chars del team y por que no hoy explicarlo para que los demás también lo implementen, aunque siempre haya sido de libre uso, hoy lo detallamos. Así que aquí paso a explicarles como se usa, como es la idea y les dejo un code base de un Kame Hame Ha normal que explota al impactar al oponente. Aquí unas imágenes de como se ven los choques, tomadas en Mugen 1.1 Lo importante aquí es entender que los choques se hacen con proyectiles, digamos esos que son solo cabeza, no estos tipos de rayos donde el kame viene ya formado con un cuerpo. Aunque ese efecto lo podemos lograr con un explod que siga la trayectoria de la bola, pueden chequearlo en el Chou Kame hame Ha de mi Goku SSJ3 (imagen), en el Final Flash del Vegeta de Emiliano 01 o en el Big Bang del Vegetto de EGC (Imagen) Bueno, sin mas preámbulo, aquí el code, explicado en detalle para que puedan entenderlo aquellos que están en un nivel básico de programación Mugen, es muy facil, solo hay que seguir algunos parámetros: - Spoiler:
; Kame Hame Ha[Statedef 4200]type = S movetype = I physics = S ctrl = 0 velset = 0,0 poweradd = 0 anim = 4200 ; animación de goku cargando el kame que en mi caso dura 51 tics en el airctrl = 0 sprpriority = 2 ; Super Pausa para que goku cargue el kame tranquilo sin que lo molesten[State 4200, SuperPause]type = SuperPause trigger1 = !time time = 51 ; tiempo parado por 51 tics (el tiempo que goku carga el kame)anim = -1 sound = -1 movetime = 51 ; el tiempo que goku se puede mover durante la super pausa, 51 tics, sino goku también se congeladarken = 0 p2defmul = 0 poweradd = 0 unhittable = 1 ; cambiamos al estado de lanzamiento[State 4200, ChangeState]type = ChangeState trigger1 = time >= 51 ; cuando goku termina de cargar el kamevalue = 4201 ;------------------------------------------------------------------ ; Estado de Lanzamiento[Statedef 4201]type = S movetype = A physics = S ctrl = 0 velset = 0,0 poweradd = 0 anim = 4201 ; animación de goku lanzando el kame con time de -1 en el airctrl = 0 sprpriority = 2 ; Esta es la variable en común que tienen todos los chars del team, no se debe cambiar el valor de la misma, debe ser la variable 20, así que aquí la activamos[State 4201, VarSet]type = VarSet trigger1 = time = 0 v = 20 value = 0 ; valor en cero; aquí le añadimos el valor a la variable 20[State 4201, VarAdd]type = VarAdd trigger1 = command = "a" trigger2 = command = "b" trigger3 = command = "c" trigger4 = command = "x" trigger5 = command = "y" trigger6 = command = "z" trigger7 = timemod = 40,1 ; del trigger1 al 6 se indica que al presionar cualquier botón la variable subira de a 1 su valor, y en el trigger7 dice que el valor subirá automáticamente a medida que vaya pasando el tiempo por si ningún jugador toca ningún botón, fácil no?v = 20 value = 1 ignorehitpause = 1 ; asi que el char que tenga la variable 20 con mayor valor gana el choque; este es el Beam[State 4201, Helper]type = Helper trigger1 = ANIMELEM = 1 helpertype = normal name = "Kame Hame Ha" stateno = 4203 ; state que le asignamos al beamid = 4203 ; id del beam, se recomienda poner de numer id el mismo numero que el estate que se le va a asignar al helper para no confundirnospos = 68,-58 keyctrl = 0 ownpal = 1 supermovetime = 0 pausemovetime = 0 sprpriority = 3 size.yscale = 1 size.xscale = 1 ; Goku cambia al estado donde deja de tirar el kame[State 4201, ChangeState]type = ChangeState triggerall = time > 3 ; el trigger es efectivo después de 3 tics, esto hay que ponerlo sino el trigger de abajo no funcionatrigger1 = numhelper(4203)=0 ; cambia si el kame se destruye, (4203 es el id que pusimos anteriormente en el helper)value = 4202 ctrl = 0 ;------------------------------------------------------- ; Deja de tirar el Kame[Statedef 4202]type = S movetype = A physics = S ctrl = 0 velset = 0,0 poweradd= 0 anim = 4202 ; animación de goku dejando de tirar el kamectrl = 0 ; goku vuelve a la stand[State 4202, ChangeState]type = ChangeState trigger1 = time >= 40 ; cambia cuando termina el tiempo de la animación del estate, en este caso es 40value = 0 ctrl = 1 ;--------------------------------------------------------------------------- ; State del Beam (Helper)[Statedef 4203]type = A movetype = A physics = N velset = 0,0 anim = 4203 ; animación del beam que debe tener cajas de colisiones azul y rojas, luego lo detallo en una imagenctrl = 0 poweradd = -1000 juggle = 0 facep2 = 0 hitdefpersist = 0 movehitpersist = 0 hitcountpersist = 0 sprpriority = 3 ; Aquí nos dice que el kame al chocar contra ciertas cosas va a pasar a un estado de choque[State 4203, HitOverride]type = HitOverride trigger1 = 1 attr = SCA,AA,AP,AT stateno = 4205 ; este es el estado del choquetime = -1 ignorehitpause = 1 ; El kame puede ser golpeado por:[State 4203, HitBy]type = HitBy trigger1 = 1 value = SCA,NP,SP,HP time = -1 ignorehitpause = 1 ; esta es la velocidad del kame[State 4203, VelSet]type = VelSet trigger1 = timemod = 2,1 x = 13 ; no superes los 13, ya es demasiado; en este hitdef del kame yo hago que el oponente se quede quieto al recibir el impacto del kame, para luego ser golpeado por la explosión[State 4203, HitDef]type = HitDef trigger1 = 1 attr = S,HP hitflag = MAF guardflag = MA animtype = medium air.animtype = medium priority = 4,Hit givepower = 0 getpower = 0 damage = 150,50 pausetime = 4,8 sparkno = -1 guard.sparkno = -1 sparkxy = 0,0 hitsound = s3,1 guardsound = s3,0 ground.type = Low air.type = High ground.slidetime = 20 guard.slidetime = 0 ground.hittime = 30 air.hittime = 20 ground.velocity = 0,0 ; en cero para que no se mueva el p2air.velocity = 0,0 ;igual que arribap1getp2facing = 0 p2facing = 1 fall = 0 ; que el p2 no se caigaid = 42033 ; cuando el p2 es tocado por el kame se le asigna este numero de id (elijan el que quieran, yo suelo ponerle el mismo número del state repitiendo el último número); Aquí el beam se transforma en explosión cuando...[State 4203, ChangeState]type = ChangeState trigger1 = numtarget(42033) ; aquí ponemos el numero de Target ID que asignamos al p2 en el HitDef. ESTO ES IMPORTANTE PARA QUE SI EL KAME ES DE UN SOLO HIT NO SE DESTRUYA CUANDO CHOQUE CON FIREBALLS COMUNES.trigger1 = movecontact ; cuando el beam toca al oponente trigger2 = frontedgedist <-1 ; Cuando toca la esquina, también se puede usar de valor -10 para que cambie cuando el kame sale fuera de la pantalla ;trigger3 = parent,movetype = H ; cuando goku es golpeado (esto es opcional, queda bien en rayos, pero no en proyectiles que son solo una bola)value = 4204 ctrl = 0 ; Y si quieres tener control sobre la explosión, como tamaño y escala de la misma, borramos el changestate de arriba y ponemos lo siguiente:- Spoiler:
[State 4203, Helper] type = Helper trigger1 = numtarget(42033) ; aquí ponemos el numero de Target ID que asignamos al p2 en el HitDef. ESTO ES IMPORTANTE PARA QUE SI EL KAME ES DE UN SOLO HIT NO SE DESTRUYA CUANDO CHOQUE CON FIREBALLS COMUNES. trigger1 = movecontact ; cuando el beam toca al oponente trigger2 = frontedgedist <-1 ; Cuando toca la esquina, también se puede usar de valor -10 para que cambie cuando el kame sale fuera de la pantalla ;trigger3 = parent,movetype = H ; cuando goku es golpeado (esto es opcional, queda bien en rayos, pero no en proyectiles que son solo una bola) helpertype = normal name = "Explotion!" id = 4204 ; id de la explosion pos = 0,0 stateno = 4204 ; estado de la explosión keyctrl = 0 ownpal = 1 supermovetime = 0 pausemovetime = 0 sprpriority = 3 size.yscale = 0.45 ; tamaño vertical de la explosión size.xscale = 0.45 ; tamaño horizontal de la explosión
[State 4203, Destroyself] type = Destroyself trigger1 = numtarget(42033) ; aquí ponemos el numero de Target ID que asignamos al p2 en el HitDef. ESTO ES IMPORTANTE PARA QUE SI EL KAME ES DE UN SOLO HIT NO SE DESTRUYA CUANDO CHOQUE CON FIREBALLS COMUNES. trigger1 = movecontact ; cuando el beam toca al oponente trigger2 = frontedgedist <-1 ; Cuando toca la esquina, también se puede usar de valor -10 para que cambie cuando el kame sale fuera de la pantalla ;trigger3 = parent,movetype = H ; cuando goku es golpeado (esto es opcional, queda bien en rayos, pero no en proyectiles que son solo una bola)
; es decir, creamos la explosión al mismo tiempo que se destruye el kame, por eso usamos los mismos triggers;--------------------------------------------------------------------------- ; Estado de la Explosión[StateDef 4204]movetype = A anim = 4204 ; animación de la explosión, que debe contener cajas rojasctrl = 0 poweradd = 0 juggle = 0 facep2 = 0 sprpriority = 3 ; ponemos la velocidad en 0, para que la explosión no se mueva[State 4204, VelSet]type = VelSet trigger1 = 1 x = 0 y = 0 ; Este hit def es a gusto[State 4204,HitDef]type = HitDef trigger1 = animelem = 2 ; Esta explosion golpea en el segundo frameattr = S, HP hitflag = MAF guardflag = MA animtype = Diagup air.animtype = Diagup priority = 10, Hit givepower = 0 getpower = 0 damage = 200,100 pausetime = 3,3 sparkno = -1 guard.sparkno = -1 sparkxy = -10,14 hitsound = -1 guardsound = -1 ground.type = high air.type = high ground.velocity = -6,-9 guard.velocity = -18 ground.slidetime = 15 ground.hittime = 45 guard.hittime = 100 air.hittime = 45 air.velocity = -6,-9 airguard.velocity = -2,5 ground.cornerpush.veloff = 0 fall = 1 fall.recover = 0 ; la explosión termina cuando...[State 4204, DestroySelf]type = DestroySelf trigger1 = time >= 54 ; cuando la animación de la explosión llega a su fin, en este caso es de varios frames y dura 54 tics;--------------------------------------------------------------------- ; Este es el estado de choque, aquel que invocamos con el hit override unos states atrás [Statedef 4205]type = A movetype = A physics = N velset = 0,0 ctrl = 0 sprpriority = 5 ; ponemos la velocidad de los beams a 0[State 4205, VelSet]type = VelSet trigger1 = 1 x = 0 y = 0 ignorehitpause = 1 ; para que se muevan un poquito[State 4205, PosAdd]type = PosAdd trigger1 = 1 x = ifelse(time % 2,3,-3) ignorehitpause = 1 ; para que pare el tiempo y no cuente juggles[State 4205, AssertSpecial]type = AssertSpecial trigger1 = 1 flag = nojugglecheck flag2 = timerfreeze ignorehitpause = 1 ; otro hitoverride necesario[State 4205, HitOverride]type = HitOverride trigger1 = 1 attr = SCA,AA,AP,AT stateno = 4205 time = 1 ignorehitpause = 1 ; es golpeado por...[State 4205, HitBy]type = HitBy trigger1 = 1 value = SCA,NP,SP,HP time = -1 ignorehitpause = 1 ; hitdef que no mueva al oponente, copiar como esta[State 4205, HitDef]type = HitDef trigger1 = 1 attr= S,HP animtype=Light damage= 0 ;guardflag= hitflag = MAFD priority=1,hit pausetime= 0,0 ; en cerosparkno= -1 sparkxy= 0,0 hitsound= -1 ground.type=High ground.slidetime=13 ground.hittime=18 ground.velocity= 0 ; en ceroair.velocity= 0,0 ; en ceroguard.dist = 0 kill = 0 ; que no mate a nadie xD ; y aquí vienen los chagestates que dicen quien gana el duelo se acuerdan cuando activamos y añadimos valor a la variable 20? aquí se define todo ; cuando nuestra variable 20 es mayor que la del enemigo, nuestro kame sigue su curso directo al oponente [State 4205, ChangeState]type = ChangeState triggerall = parent,var(20)>ENEMY,var(20) trigger1 = parent,var(20)>=30 || time>25 value = 4203 ; numero de state de nuestro Beamignorehitpause = 1 ; cuando la variable del enemigo es mayor a la nuestra, nuestro kame explota[State 4205, ChangeState]type = ChangeState triggerall = enemy,var(20)>parent,var(20) trigger1 = ENEMY,var(20)>=30 || parent,movetype = H value = 4204 ; numero de state de nuestra Explosiónignorehitpause = 1 ; cuando hay empate se destruyen los dos[State 4205, ChangeState]type = ChangeState trigger1 = parent,var(20)=30 && enemy,var(20)=30 || parent,movetype = H value = 4204 ; numero de state de nuestra Explosiónignorehitpause = 1 [State 4205, ChangeState]type = ChangeState trigger1 = frontedgedist <-20 value = 4203 ; numero de state de nuestro Beamctrl = 0
Es asi de simple, copiar, pegar, adornar con explods, sonidos, etc. Y listo acá les muestro la imagen del beam en el air: - Spoiler:
nótese que la caja azul esta rodeando la roja POR FUERA, esto debe hacerse así sin excepción. Luego in-game te recomiendo presionar ctrl+c para ver que las cajas de colisión no sobrepasen el sprite del beam, para que el choque se vea bien. Nota: un recaudo importante que tenemos que tomar es NO poner el sctrl "screenbound" en el state del beam ni en el estate del lanzamiento ya que en 1.1 se vería muy mal porque la cámara enfocaría el choque solamente y no los personajes, pero aun como razón mas importante ocasionaría bugs como la destrucción del Beam de nuestro oponente en un lugar inesperado ya que detectaría un frontedgedist a mitad de la stage. Esto en Mugen 1.0 no es problema, pero a los usuarios de 1.1 como yo nos ocasionaría esos inconvenientes. Por lo tanto si se encuentran con ese bug en alguno de los chars del team, saben que tiene que borrar el “ScreenBound” ya que los releases de la mayoria de los personajes no fueron basados en 1.1 a excepción de Vegetto y la versión 2.0 del Goku SSJ3. Tampoco olvidar las cajas de colisión en el cuerpo del personaje para que este pueda ser impactado luego de perder el choque. Cualquier duda que alguien tengan la postean acá, pase el tiempo que pase, si es una duda de implementación es bienvenida en cualquier momento. También pueden chequear los chars del team que contienen el choque tranquilamente para hacerse algunas otras ideas, son los siguientes: - Super Vegeta by Emiliano 01 - SSJ3 Gokou by gabe555 - Vegeta SSJ4 by Intoxicados - Vegetto by EGC - Majin Vegeta by MugenGod - Picollo by Tapion. Saludos. _________________ Let's Make History - Spoiler:
- Pertenezco a la banda de los Trasnochados del Chat
Last edited by gabe555 on Thu Aug 18, 2016 10:08 pm; edited 3 times in total |
|
gabe555 Administrator
Nº de Posteos : 1963 Fecha de inscripción : 2009-10-30 Edad : 35 Localización : Argentina
| Subject: Re: Compatibilidad con Choque de poderes (MFT) Wed Aug 10, 2016 10:03 pm | |
| Lo es, es muy facil, sino tenes mucha idea de programación solo basta con copiar el code e ir adaptandolo al char, ya que la mecánica que usa ese Kame Hame Ha es la mas convencional, sirve para Big Bangs, Masenkos y casi cualquier tecnica de Ki, ademas al estar dividida en tantos estados nos da la posibilidad de agregarle algunas funciones mas avanzadas a gusto del programador del char. Lo ideal sería que alguién adapte los chars del Team OS. Y lo unico que le falta a este Beam Clash es simplemente un modo como en el Saiyan Saga game que nos da mas tiempo a reaccionar al Beam del contrincante para contestar con el nuestro, lo he intentado pero con resultados fallidos. JA _________________ Let's Make History - Spoiler:
- Pertenezco a la banda de los Trasnochados del Chat |
|