Author Id: 26330 Author Name: Chamber4315♪ Post Content: [IMG]https://dl.dropboxusercontent.com/u/1175553/hack/Auxiliares/Banner/scizor-banner.gif[/IMG] Move Animations Las animaciones de los ataques se encuentran en el offset $C900A, en una tabla de pointers que van del 0x00 al 0xFB. Las animaciones no tienen una estructura fija, pero casi siempre siguen un patro de carga de graficos-musica-animacion, las mas complicadas usan comandos que repiten una misma animacion 7-8 veces. Para los que esten mas familiarizados con los scripts, las animaciones usan unos comandos similares (jump, call y loop). D0 - makeobj ; ['id', SingleByteParam], ['x', SingleByteParam], ['y', SingleByteParam], ['unknown', SingleByteParam]], D1 - anim_1gfx ; carga un grafico. [D1] [XX] D2 - anim_2gfx ; carga 2 graficos. [D1] [XX] [YY] D3 - anim_3gfx ; carga 3 graficos. [D1] [XX] [YY] [ZZ] D4 - anim_4gfx ; carga 4 graficos. [D1] [XX] [YY] [ZZ] [AA] D5 - anim_5gfx ; carga 5 graficos. [D1] [XX] [YY] [ZZ] [AA] E0 - animplaysound ; Reproduce un sonido. [E0] E1 - animplaycry ; reproduce un Cry FC - anim_jump ; Como su nombre lo indica, hace un "brinco" a otra animacion. [FC] [2-byte pointer] FD - anim_loop ; Repite una animacion "n" veces. [FD] [No. de repeticiones] [2-byte pointer] [Wait] FE - anim_call ; llama una animacion y despues "regresa" a la animacion principal. [FE] [2-byte pointer] [Wait] FF - endanim ; Termina animacion. Aqui encontraran la estructura de los movimientos. [URL="https://github.com/kanzure/pokecrystal/blob/master/battle/anims.asm"]Link[/URL] Aqui la lista de graficos para cargar en la Vram. [URL="https://github.com/kanzure/pokecrystal/blob/master/constants/gfx_constants.asm?source=cc"]Link[/URL] Aqui la lista de sonidos y efectos. [URL="https://github.com/kanzure/pokecrystal/blob/master/constants/sfx_constants.asm?source=cc"]Link[/URL] Como uso todo eso? Primero tengan en mente que desean hacer. Yo por ejemplo, para crear la animacion de Bullet Punch, pense en traerme los "reflejos" de acero de Iron Tail y combinarlos con la animacion de Mach Punch. Algo asi: [IMG]https://dl.dropboxusercontent.com/u/1175553/hack/Auxiliares/Actualizaciones/18-01-14/Bullet-Punch.gif[/IMG] Para ello hay que mirar la estructura de Iron Tail para copiar los reflejos. Una manera de enconcatrar los datos facilmente para pokemon GOLD, es seguir los datos del desamble de Crystal (link de arriba) y restarle -0x65 al offset indicado. Iron Tail lo marca en $CB6B6, restamos x65 y nos da $CB651, ahi comienzan los datos de Iron Tail en G/S. Hay veces que el numero a restar varia de x65 a x67, pero siempre resten x65 y en Gold Finger vayan retrocediendo hasta encontrar el FF y solo posicionense en la casilla inmediata al FF, asi sabremos que termina un comando e inicia el nuestro. En nuestro caso, Iron Tail no estuvo en $CB651, si no dos casillas atras, en CB64F. Despues copiamos la parte que nos interesa: BattleAnim_IronTail: ; cb6b6 anim_1gfx ANIM_GFX_REFLECT anim_obp0 $0 anim_sound $0, SFX_RAGE anim_call BattleAnim_IronTail_branch_cbca7 anim_call BattleAnim_IronTail_branch_cbc43 anim_wait 4 En hex se ve de la siguiente manera D1 18 F2 00 E0 00 75 FE 40 7C FE DC 7B 04. D1 18 ; Carga los graficos de REFLECT F2 00 ; Me parece que es lo que define que los reflejos solo sean dentro del contorno de nuestro sprite y no cuadrado como en el ataque Reflect. E0 00 75 ; Reproduce el sonido de Rage. FE 40 7C ; Llama (call) a la primera animacion de reflejo. FE DC 7B ; Llama (call) a una segunda animacion de reflejo. Con esto tenemos la primera parte de nuestro animacion, ahora solo falta hacer una llamada a la animacion de Mach Punch. Buscamos de nuevo en el desamble de Crystal y vemos que esta en el offset $CAF33, aplicamos la resta de los 0x65 y comrpobamos en Gold Finger que sea su ubicacion real. al comprobar vemos que hay que recorrernos dos espacios atras, a $CAECC. Sacamos el pointer de 2-bytes y agregamos el comando anim_call (FE). Algunas ocaciones es necesario que carguemos los graficos antes de hacer el call, asi que usamos D1 (para cargar 1 grafico) y 01 (Graficos de Mach Punch). Al final tenermos la terminacion de nuestra nueva animacion: D1 01 FE CC 6E FF Juntamos todos los comandos (D1 18 F2 00 E0 00 75 FE 40 7C FE DC 7B 04 D1 01 FE CC 6E FF) y listo, ya tenemos nuestra nueva animacion, ahora solo falta ponerla en algun lugar en blanco dentro del mismo bank y repuntear la tabla de pointers hacia alguna animacion que no pensemos usar. La rutina final se puede resumir un poco, sise fijan el comando D1 se repite dos veces, podemos omitir el segundo, si desde el principio usamos D2 y cargamos las dos animaciones necesarias, el 0x18 de los reflejos y el 0x01 de Mach Punch. Incluso puede haber casos en que la segunda carga de Graficos no se necesaria, ya que teoricamente el comando FE (call) deberia ser suficiente para que se cargue toda la animacion, hay veces que funciona y hay otras que no, asi que solo la practica nos lo dira. Por ultimo les dejo algunas animaciones que yo he hecho para el Revolution. Solo tienen que copiar los numero despues del ";" y pegarlos en Gold Finger. Las animaciones que tengan Loop (FD) deben ser colocadas en el offset indicado ahi mismo para que funcionen bien. PD1:Water Pulse esta mal redactado, solo hay que redirigir el Loop hacia el E0 de su misma animacion. PD2:Esto al final quedo como tutorial. PD3:Gracias a GOLD por hacer de este "guia" un tutorial independiente. [SPOILER="Animaciones Chamber"]Fire Fang $CBDC0 [C07D] ; 211 2 1 3 208 54 136 56 152 208 54 136 56 24 8 254 101 123 16 255 Thunder Fang $CBDD4 [D47D] ; 211 2 1 5 208 54 136 56 152 208 54 136 56 24 8 224 1 77 208 47 152 68 0 32 255 Ice Fang $CBDED [ED7D] ; 211 2 1 10 208 54 136 56 152 208 54 136 56 24 8 254 120 123 0 255 Bullet Punch $CBE01 [017E], Iron Tail + Mach Punch ; 209 24 242 0 224 0 117 254 64 124 254 220 123 4 209 1 223 254 204 110 255 Calm Mind $CBE16 [167E] ; 210 1 18 241 27 243 27 32 224 0 143 254 120 104 255 Close Combat $CBE25 [257E], Cambio de palletas + Dinamic Punch ; 210 1 8 240 6 0 2 0 240 5 0 2 0 32 254 67 117 255 Blaze Kick Mejorado $CBE37 [377E] ; 254 217 86 8 209 3 254 101 123 255 Aurasphere $CBE41 [417E] , SolarBeam sin Recharge ; 210 16 18 254 147 90 16 254 210 122 48 255 Drago Meteor $CBE4D [4D7E] ; 254 110 104 16 209 9 253 4 116 92 0 255 Dragon Claw $CBE59 [597E], + Slash ;209 3 240 6 0 2 0 240 5 0 2 0 224 0 80 208 128 48 104 0 8 253 8 204 125 64 209 2 252 151 93 255 Electroweb $CBE79 [797E] ; 210 209 27 254 116 108 8 209 5 252 69 91 8 255 Energy Ball $CBE87 [877E] ; 209 18 254 147 90 16 209 17 252 194 96 255 Dark Pulse $CBE93 [937E] ; 209 23 240 6 0 2 0 240 8 0 4 0 224 26 55 208 76 64 88 3 32 253 3 204 125 8 255 Dragon Pulse $CBEAE [AE7E] ; 209 23 240 6 0 2 0 240 5 0 2 0 224 26 75 208 76 64 88 3 2 208 76 64 88 3 48 253 2 204 125 8 255 Water Pulse $CBECF [CF7E] ; 209 23 224 26 75 208 76 64 88 3 4 208 76 64 88 3 4 208 76 64 88 3 24 253 3 194 125 8 255 Leaf Blade $CBEEC [EC7E] ; 209 6 224 1 56 208 20 120 40 128 2 208 20 136 56 144 8 253 7 194 125 254 83 90 255 Hurricane $CBF05 [057F] ; 254 209 91 48 253 2 243 119 255 Ice shard $CBF0E [0E7F] ; 254 55 105 8 210 1 10 254 120 123 32 255 Magical Leaf $CBF1A [1A7F] ; 240 6 0 2 0 240 5 0 2 0 252 23 90 255 Power-Up Punch $CBF28 [287F] ; 254 198 85 8 252 80 95 8 255 Shadow Claw mejorado $CBF31 [317F] ; 209 23 240 8 0 4 0 8 254 151 93 16 255 Signal Beam $CBF3E [3E7F] ; 240 8 0 4 0 254 249 96 24 255 Zen Headbutt $CBF48 [487F] ; 224 0 169 240 8 0 4 0 8 254 110 98 16 255 Meteor Mash $CBF56 [567F] ; 209 36 254 25 124 209 1 252 236 85 255 Air slash $CBF61 [617F] ; 254 209 91 48 209 23 254 151 93 255 Flame Charge $CBF6B [6B7F] ; 254 115 104 254 201 108 255 Focus Blast $CBF72 [727F] ; 209 17 252 194 96 255 Ice Ball $CBF78 [787F] ; 210 1 10 254 120 123 254 138 98 255 Pison Jab $CBF82 [827F] ; 254 172 107 48 254 212 106 255 W-o-W $CBF8A [8A7F] ; 209 3 240 6 0 2 0 240 8 0 4 0 224 26 80 208 12 64 92 0 3 96 255 Wood Hammer $CBFA1 [A17F] ; 210 1 6 254 172 107 208 20 120 40 92 2 208 20 136 56 92 8 253 7 198 125 48 255[/SPOILER]