Registrarse

[Dis - Scripting] Animaciones de ataques MOVE_TARGET_BOTH

Estado
Cerrado para nuevas respuestas.

KevinXDE

Usuario mítico
No sé si alguien me va a poder ayudar con esto porque he buscado y buscado información sobre scriptear animaciones en decompilación y he encontrado 0. Todo lo que he conseguido ha sido por mi cuenta, vaya, a base de comparar movimientos y los ya creados en el battle_engine.

De todos modos: he conseguido hacer algunas animaciones sin problemas, la mayoría de ellas son ataques con .target = MOVE_TARGET_SELECTED y .target = MOVE_TARGET_USER. Las de target selected funcionan correctamente en combates dobles incluso cuando se ataca al compañero. Aquí dos ejemplos:


Ahora, cuando se trata de ataques con .target = MOVE_TARGET_BOTH, consigo que me funcionen en combates individuales, pero no en combates dobles. He mirado los códigos de ataques como Disparo Demora y Brecha Negra pero por mucho que pruebo cosas no consigo efectos similares, y el código sinceramente no me es muy evidente.

Por ejemplo, en el siguiente ataque, quiero conseguir que en combates dobles,haya dos ondas, una por cada Pokémon. O, otra opción, que la onda quede centrada. El ataque del primer gif está bien conseguido, pero en combates dobles como veis la onda solo afecta a un Pokémon. A pesar de que he conseguido agitar a los dos, no consigo lo mismo poniendo el código de la onda dos veces.



El código:
Código:
loadspritegfx ANIM_TAG_ALERT
    playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
    createsprite gKinesisZapEnergySpriteTemplate, ANIM_ATTACKER, 19, 32, -8, 0
    playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
    createsprite gKinesisZapEnergySpriteTemplate, ANIM_ATTACKER, 19, 32, 16, 1
    waitforvisualfinish
    loadspritegfx ANIM_TAG_PINK_PETAL @pink color
    loadspritegfx ANIM_TAG_THIN_RING @ring
    monbg ANIM_DEF_PARTNER
    createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 0, 9, RGB_BLACK
    playsewithpan SE_M_HAZE, 0
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    waitforvisualfinish
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtemplate gSimpleBeamPinkRingTemplate 0x0 0x6 0x0 0x0 0x3 0x0 0x1F 0x8
    createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK
    waitforvisualfinish
    clearmonbg ANIM_DEF_PARTNER
    delay 1
    waitforvisualfinish
    end

He probado tocando los argumentos en hexadecimal y dandoles distintos valores, pero ninguno me ha dado buenos resultados aunque alguno se acercaba (no son muy intuitivos que digamos...).

Ahora, mirando las animaciones de Disparo Demora y Brecha negra: en el primer ataque se puede ver como la animación es fija, atacando siempre al centro. Esa opción sería la de centrar la onda de mi ataque.



En Brecha negra, en combates individuales aparece una sombra, mientras que en combates dobles aparecen dos. Esa sería la otra opción.



Eso sería todo. Alguna idea de como puedo conseguir esos efectos? Tendría que modificar las estructuras de los templates? O se puede hacer con otros comandos u otros valores en los argumentos? La verdad es que estoy un poco perdido. Menos mal que no tengo que hacer muchas más animaciones :ROFLMAO:, sino me decantaré por usar unas existentes o hacer que queden algo más cutres. Gracias por leer mi tochaco
 

KevinXDE

Usuario mítico
Bue pues nada, perdón por el doble post pero al final he conseguido la primera opción (la de String Shot), me voy a conformar con esa porque es mucho más sencilla que la de Brecha Negra, la cual usa Anim_Task en vez de templates y tendría que escribir más código (y total, la animación de ahora no me desagrada)



Básicamente he hecho una copia del template de Simple Beam que usaba usando otro callback (el de String Shot). Dejo aquí los códigos por si alguien más adelante quiere hacer algo parecido
Código:
loadspritegfx ANIM_TAG_ALERT
    playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
    createsprite gKinesisZapEnergySpriteTemplate, ANIM_ATTACKER, 19, 32, -8, 0
    playsewithpan SE_M_SWAGGER2, SOUND_PAN_ATTACKER
    createsprite gKinesisZapEnergySpriteTemplate, ANIM_ATTACKER, 19, 32, 16, 1
    waitforvisualfinish
    loadspritegfx ANIM_TAG_PINK_PETAL @pink color
    loadspritegfx ANIM_TAG_THIN_RING @ring
    monbg ANIM_DEF_PARTNER
    playsewithpan SE_M_HAZE, 0
    createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 11, 3, 0, 16, RGB_BLACK
    launchtemplate gSimpleBeamPinkRingTemplate2 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    delay 0x25
    launchtemplate gSimpleBeamPinkRingTemplate2 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    delay 0x25
    launchtemplate gSimpleBeamPinkRingTemplate2 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    delay 0x25
    launchtemplate gSimpleBeamPinkRingTemplate2 0x3 0x6 0x0 0x0 0x1 0x0 0x1F 0x8
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_TARGET 0x3 0x0 0x6 0x1
    launchtask AnimTask_ShakeMon 0x2 0x5 ANIM_DEF_PARTNER 0x3 0x0 0x6 0x1
    waitforvisualfinish
    createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 11, 3, 16, 0, RGB_BLACK
    clearmonbg ANIM_DEF_PARTNER
    delay 1
    waitforvisualfinish
    end

Código:
const struct SpriteTemplate gSimpleBeamPinkRingTemplate2 =
{
    .tileTag = ANIM_TAG_THIN_RING,
    .paletteTag = ANIM_TAG_PINK_PETAL,
    .oam = &gOamData_AffineDouble_ObjBlend_64x64,
    .anims = gDummySpriteAnimTable,
    .images = NULL,
    .affineAnims = gThinRingExpandingAffineAnimTable,
    .callback = AnimStringWrap  // E aquí la linea importante
};

Otra duda más resuelta debido a mi intelecto (?). Se puede cerrar el tema
 
Estado
Cerrado para nuevas respuestas.
Arriba