Registrarse

[Otros] FR | Nuevos ataques sin sustituir y añadir nuevos efectos

XR_MINI

Azazel para los amigos
Bueno, este es mi primer tutorial en el foro, espero hacerlo lo mejor posible :D

Este tuto es una traducción de otro tuto de la Pokecommunity, de itman, así que os créditos van para él.
Link del tuto: https://www.pokecommunity.com/showthread.php?t=290135

Cualquier anotación que YO haga en el tuto será entre corchetes "[]".

Y sin más demora, vamos a ello:


Este tutorial es sobre cómo añadir nuevos movimientos a Pokémon Fire Red sin reemplazar antiguos, y crear nuevos efectos para los movimientos. Esta información fue encontrada por Jambo51, y aquí os dejo el hilo original:

http://www.pokecommunity.com/showthread.php?t=263479

Dado que puede ser complicado para algun@s (porque, en primer lugar, nunca fue redactado para ser un tutorial), pensé que podía hacerlo más sencillo de seguir pues es gigante, y creo que muchos hacks podrían beneficiarse de esto. Ésto es para Fire Red BPRE 1.0 (FR US 1.0), por cierto. para saber si tienes un ROM BPRE, cárgalo [en un emulador] y mira la pantalla de título. Si el "Presents" no aparece tras el símbolo de Gamefreak, tienes un BPRE. Espero que ésto facilite a la gente cómo hacerlo.

"Si el "Presents" no aparece tras el símbolo de Gamefreak, tienes un BPRE"
No precisamente. BPRE = FR (U). Lo que tienes si no aparece el "Presents" es una ROM versión 1.0 en lugar de una 1.1.
Por último, supongo que ha de funcionar también en FR 1.1, con la diferencia de que los offsets donde están los datos a repuntear han de ser otros.
-Gracias Aaron por su aporte: ;)

Qué se necesita:
1. Un ROM Fire Red BPRE 1.0 (FR US 1.0)
2. Un editor hexadecimal (yo usaré Hex Workshop).
3. Pokemon Game Editor.
4. Como Jambo bien dice, *PACIENCIA*.


Abre tu ROM en un editor hexadecimal (una vez más, yo usaré Hex Workshop).

Ve a la dirección 0x250C04.
Ésta es la dirección de la información original de los movimientos, la cual moveremos a otro lugar [repuntearemos].



Edit>Select Block> 4260 bytes. Copia.



Abre Free Space Finder y busca 4260 Bytes de espacio libre. Ve a esa dirección. Por ejemplo, usaremos 0x900000.

Espacio Libre = Las "FF". Básicamente, cualquier cosa de 0x780000 - 0xFFFFFF es espacio libre.


Pon la información original de los movimientos en esta nueva dirección.
IMPORTANTE: pégala SOBRE las "FF". De modo que ve a Edit > Select Block > 4260, y pégalo ahí. NO PEGUES SIN HABER SELECCIONADO LAS "FF" PRIMERO.

ANOTA LA NUEVA DIRECCIÓN!!! En mi caso, escribiré "0x900000 = Información de los movimientos".


Cambia todos los pointers originales de la información original de los movimientos a la nueva dirección.

Ésto significa, básicamente, que todo lo que esté dirigido a la antigua dirección, será enviado a la nueva. De modo que, en mi caso, 0x900000 es mi nueva dirección. Primero vamos a Edit > Find.



Eso es lo que mostrará. Dado que la tabla antigua se encuentra en 0x250C04, caulquier pointer de los datos sería así:
04 0C 25 08

De modo que queremos buscar esa cadena de bytes en la ROM.
Y entonces reemplazar TODOS con nuestro nuevo pointer, en mi caso 0x900000, y quedaría así:
00 00 90 08


*Una rápida lección sobre pointers.*
1. Mira tu offset Offset de ejemplo: 0x594039
2. Sepáralo en grupos de dos: 59 40 39
3. Toma el último byte y pónlo primero: 39 59 40
-Recuerda, los dos números juntos son un byte, así que no permutes el byte en sí, sino el orden.
4. Toma el último byte y pónlo entre los otros dos bytes: 39 40 59
5. Añade 08 al final: 39 40 59 08

Otro ejemplo rápido:
0xA9EBB0 pasa a B0 EB A9 08
Básicamente simplemente estás invirtiendo los bytes y añadiendo 08.

*Final de la lección.*

Así que, una vez más, estamos reemplazando todos los pointers de 0x250C04 a 900000. Simplemente sigue buscando esa cadena [de bytes] y reemplazándolas hasta que no haya más por reemplazar.
EN SERIO, HAY UN MOTÓN, SÉ PACIENTE.

[Otra manera más rápida y eficiente de hacerlo es Edit > Replace, o ctrl + H, en la primera caja poner los valores hexadecimales (en este caso el pointer) que los quieres sutituir y en la segunda los valores por los que quieres sustituir (en este caso el nuevo pointer al que vamos asignar a nuestra tabla de ataques).]



Edit > Find (otra vez).

También hay pointers en la ROM a 0x250C08... para la info del los PP. Así que, una vez mas, tenemos que reemplazar todos esos pointers por tu nuevo pointer +4. De modo que 0x900000 + 4 es 0x900004. [Recuerda que trabajamos en hexadecimal y que, por ejemplo, C + 4 = 10]


De modo que los pointers 0x250C08 deberían ser así: 08 0C 25 08

Y al reemplazarlo el pointer 0x900004 quedaría así: 04 00 90 08



¡Y ahora reemplázalos todos! Hay también muchos de estos, así que sé paciente.
Vuelve a la tabla original con la información de los movimientos (0x250C04) y copia (12*número de nuevos ataques) que quieres añadir.
El máximo nº de movimientos que la tabla puede almacenar es de 511. Aunque ya hay 354 añadidos. Así que, en este ejemplo, yo quiero usar el máximo; 511-354 es 157. 12*157 es 1884.

Ahora ve a Edit > Select Block > 1884 [o la cantidad de bytes que tú tengas] y copia [ctrl + v].



Vuelve a donde pusiste la información de los movimientos (en mi caso 0x900000). Ve al final (donde vuelven a empezar las "FF"). Otra vez más; Edit > Select Block > 1884. Y entonces pégalo.





Ve a la dirección 0x247094. Edit > Select Blocks > 4615.
Copia la info.

Ésta es la información de los nombres de los ataques. [Attack data]





Abre FSF [FreeSpaceFinder] y busca 4615 bytes de espacio libre. Para hacerlo más fácil, puedes poner la info justo después de la nueva tabla con la info. de los nombres. ¡Anota la dirección en la que lo insertaste! En mi caso, lo pego en 0x901800.




Al igual que antes, debemos cambiar todos los pointers asociados con el antiguo offset y dirigirlos al nuevo. Edit > Find.
Cualquier pointer de 0x247094 será 94 70 24 08

Así que eso será lo que busquemos.
Una vez más, ¡hay más de uno!

Yo los reemplazaré con 00 18 90 08.




Vuelve a 0x247094 y copia (13*nº de nuevos ataques) bytes. Los pondremos al final de la tabla como hicimos con la info. de los movimientos. Una vez más, queremos que la tabla soporte 511 movimientos; 157*13 es 2041.

Ahora ve a Edit > Select Block > 2041, y copia la info.




Vuelve a la nueva dirección para la info. de los nombres (la mía era 0x901800) y ve al final. Una vez allí, ve Edit > Select Block > 2401 [se ha debido confundir, en realidad es 2041] y pégalo.




Ve a 0x1C68F4. Edit > Select Block > 1420. Cópialo.

Ésta es la info. de las animaciones. Los nuevos movimientos no funcionarían sin algún tipo de animación que vaya junto con ellos...

Abre FSF y busca 1420 bytes (o si sabes que tienes espacio, pega esta info. detrás de la info. de los nuevos ataques). Edit > Select Block > 1420 y pega la info. ASEGÚRATE de que el offset en el que lo vayas a pegar acabe en 0, 4, 8 o C, O NO FUNCIONARÁ. El offset que yo estoy usando es 0x90336C.

Edit > Find > F4 68 1C 08

Sep, adivinaste, tenemos que cambiar el pointer de la nueva info. por uno nuevo. Estoy bastante seguro de que solo es uno, pero comprobémoslo para estar seguros. Yo lo cambiaré a 0x90336C.

Mi pointer quedó así: 6C 33 90 08.

Vuelve a 0x1C68F4 y copia (4*nº de nuevos ataques) bytes. 157*4 es 628. Edit > Select Block > 628. Cópialo.

Una vez más puedes abrir FSF y buscar 628 bytes libres, o hacerlo más fácil de nuevo, simplemente poniéndolo debajo de la info. de las animaciones.

Un aviso, cada movimiento tendrá una animación. A partir de ahora, cada movimiento recibirá las animaciones de el primero sin importar el nº de ataques que hayas añadido, de modo que el nuevo ataque nº 1 (el 355) tendrá la animación de pound, etc. [¿:. Esta parte no la entiendo bien, pero creo que lo que quiere decir es que el ataque nº 355, el primero que añadiremos, tendrá la animación de pound (destructor, me parece), el atq. 356 tendrá la animación del 2º, etc.]

Abre el INI de Pokemon Game Editor (debería estar en una carpeta que dice "ini" que viene con el programa.

También puedes abrir Pokemon Game Editor e ir a Help > Edit roms.ini.

Ahora cambiaremos los offset para que el programa sepa dónde está la info. [las tablas de información] y qué es.

Las únicas cosas que necesitaremos cambiar serán estas tres:

NumberOfAttacks=354
AttackData=&H250C04
AttackNames=&H247094

Queremos cambiarlos por nuestros nuevos offsets. Aquí está el mío (el vuestro debería quedar igual, si seguisteis el tutorial).

NumberOfAttacks=511
AttackData=&H900000
AttackNames=&H901800

[recomiendo editar el INI con el editor de texto por defecto en Windows. Las "cosas" que vamos a tener que cambiar estarán separadas por lo que recmiedno usar Edit > Find, en el bloc de notas.]


Finalmente, hay un limitador en el ROM. Si no es desactivado, en vez de decir "Bulbasaur used VenoShock!", dirá "Bulbasaur used a POISON move!".

Ve a 0xD75Fc y sobreescribe lo que sea que haya ahí por:

00 00 00 00 00 00
A partir de aquí puedes fácilmente modificar estos movimientos en el Attack Editor [Editor de Ataques] que integra Pokemon Game Editor.


Abre tu editor hexadecimal y ve a la dirección 0x1D65A8. Edit > Select Block > 856. Copia.

Ésta es la tabla de los “move effects” [efectos de movimiento]. En este momento solo sube hasta 213, pero reescribiéndolo poder hacer que almacene hasta 255 (256, si 0 cuenta) pointers.

Abre FSF y busca 856 bytes de espacio libre. Ve a esa dirección (usaré 0x910000 en mi ejemplo). Edit > Select Block > 856. Pégalo.

Edit > Find > A8 65 1D 08 (de nuevo cambiaremos los pointers de la tabla antigua a los de nuestra nueva tabla). Yo los cambiaré por 00 00 91 08 (en este punto, ¡espero que todos entiendan cómo funcionan los pointers!) Reemplázalos todos.

Ve al final de tu tabal de move effects. El último pointer, 5F 86 1D 08 está marcando el final de la tabla. Así que el anterior pointer (FB 85 1D 08) es el último efecto de la tabla (#213).

Queremos añadir un nuevo efecto, así que vamos a sobrescribir el último pointer (5F 86 1D 08) por un nuevo pointer. Normalmente, primero harías un nuevo efecto y luego buscarías espacio libre para insertarlo, y entonces hacer un nuevo pointer, pero diremos por el bien de este tutorial que mi nuevo movimiento estará ubicado en 0x920000.

Aquí es donde realmente hacemos los nuevos move effects.

Solo como dato, (aún) no podemos crear COMPLETAMENTE nuevos move efects, pero podemos combinar y editar cualquiera de los ya existentes. Mediante mucho probar y experimentar, puedes crear casi todos los movimientos de la 4ª y 5ª generación. He intentado hacer un Ida y Vuelta y Placaje Eléctrico funcionales editando el script de Relevo (mira al final del tutorial los move effects ya creados).

Para este tutorial, crearé el movimiento Machada.

Machada tiene una animación sencilla – Tras usarlo, tu velocidad se reduce en uno. Hmmm…

Pensemos por un segundo. Qué otros movimientos tienen efectos que nos ayuden a crear éste… en realidad, hay MUCHOS. Vamos a otro movimiento que reduzca tus stats...

Hay muchos, pero vamos con Psicoataque (tras usar Psicoataque tu ataque se reduce en dos).

Ve a la ubicación de tu nueva tabla de move effects (si has seguido este tutorial, debería ser 0x910000). Para encontrar dónde está el pointer de Psicoataque, primero debemos descubrir qué número de efecto usa.

Chaos Rush posteó una lista con todos ellos en el otro hilo. Quita MUCHÍSIMO trabajo, así que lo pondré aquí.

0 = Sin efectos añadidos
1 = Duerme al objetivo
2 = Envenena al objetivo
3 = Absorbe la mitad del daño recibido (Absorb, Mega Drain, etc.) [Absorber, Megaagotar]
4 = Quema al objetivo
5 = Congela al objetivo
6 = Paraliza al objetivo
7 = Selfdestruct, Explosion [Autodestrucción, Explosión]
8 = Toma la mitad del daño provocado al rival (Dream Eater) [Come Sueños]
9 = Mirror Move [Movimiento Espejo]
10 = Aumenta el Ataque del usuario
11 = Aumenta la Defensa del usuario
12 = Aumenta la Velocidad del usuario
13 = Aumenta el Ataque Especial del usuario
14 = Aumenta la Defensa Especial del usuario
16 = Aumenta la evasión del usuario
17 = Nunca falla
18 = Reduce el ataque del oponente
19 = Reduce la Defensa del oponente
20 = Reduce la Velocidad del oponente
21 = Reduce el Ataque Especial de oponente
22 = Reduce la Defensa Especial de oponente
23 = Reduce la Precisión del oponente
24 = Reduce la evasión del oponente
25 = Haze [Niebla] (hay muchos efectos asociados a este movimineto)
26 = Bide [Venganza]
27 = Thrash/Petal Dance/Outrage [Golpe/Danza Pétalo/Enfado]
28 = Whirlwind [Remolino]/efecto de Roar [Rugido]
29 = Ocurre de 2-5 veces
30 = Conversión
31 = Puede provocar que el objetivo retroceda
32 = Recupera la mitad de los PS
33 = Envenena gravemente al oponente
34 = Pay Day [Día de pago]
35 = Light Screen [Pantalla de Luz]
36 = Puede congelar, paralizar o quemar
37 = Rest [Descanso]
38 = Debilita de un golpe
39 = toma 2 turnos + altas posibilidades de golpe crítico (Razor Wind [Viento Cortante])
40 = Baja a la mitad de los PS que (en ese momento) tiene el adversario
41 = Siempre baja 40 PS (Dragon Rage [Furia Dragón])
42 = Bind [Atadura]/ Fire Spin [Giro Fuego]/ Clamp [Tenaza]/efecto de Whirlpool [Torbellino]
43 = Alta posibilidad de golpe crítico
44 = Golpea dos veces (Double Kick [Doble Patada])
45 = Si falla, el usuario recibe 1/8 del daño que hubiera recibido el oponente (Jump Kick [Patada Salto])
46 = Evita cambios de estado (Mist [Neblina])
47 = Aumenta la posibilidad de golpe crítico del usuario
48 = daño de retroceso, 1/4 del daño (Take Down [Derribo])
49 = Confunde al rival
50 = Sube mucho el Ataque del usuario
51 = Sube mucho la Defensa del usuario
52 = Sube mucho la Velocidad del usuario
53 = Sube mucho el Ataque Especial del usuario
54 = Sube mucho la Defensa Especial del usuario
57 = Transform [Transformación]
58 = Reduce mucho el Ataque del oponente
59 = Reduce mucho la Defensa del oponente
60 = Reduce mucho la Velocidad del oponente
61 = Reduce mucho el Ataque Especial del oponente
62 = Reduce mucho la Defensa Especial del oponente
65 = Reflect [Reflejo]
66 = Envenena al objetivo (de nuevo, por alguna razón)
67 = Paraliza al objetivo (de nuevo, por alguna razón)
68 = Reduce el Ataque del oponente
69 = Reduce la Defensa del oponente
70 = Reduce la Velocidad del oponente
71 = Reduce el Ataque Especial del oponente
72 = Reduce la Defensa Especial del oponente
73 = Reduce la precisión del oponente
75 = Toma 2 rondas, puede hacer retroceder al oponente
76 = Puede confundir al oponente
77 = Golpea dos veces, puede envenenar al oponente (Twineedle [Doble Ataque])
78 = Nunca falla, pero ataca segundo
79 = Substitute [Sustituto]
80 = Inmóvil el siguiente turno (Hyper Beam [Hiperrayo])
81 = Sube el Ataque del usuario siempre que éste es alcanzado (Rage [Furia])
82 = Mimic [Mimético]
83 = Metronome [Metrónomo]
84 = Roba vida al oponente cada turno (Leech Seed [Drenadoras])
85 = Splash [Salpicadura]
86 = Disable [Anulación]
87 = El daño es equivalente al nivel del usuario (Seismic Toss/Night Shade [Movimiento Sísmico/Tinieblas])
88 = La cantidad de daño provocado varía (Psywave [Psicoonda])
89 = Counter [Contraataque]
90 = Encore [Otra Vez]
91 = Pain Split [Divide Color]
92 = Solo puede usar el ataque si el usuario está dormido (Snore [Ronquido])
93 = Conversion 2 [Conversión 2]
94 = Próximo ataque no fallará (Mind Reader [Telépata])
95 = Sketch [Esquema]
97 = Sleep Talk [Sonámbulo]
98 = Destiny Bond [Mismo Destino]
99 = inflige más daño si el usuario tiene menos PS (Flail, Reversal) [Azote, Inversión]
100 = Spite [Rencor] (elimina los PP del oponente)
101 = False Swipe [Flasotortazo](nunca hará retroceder al enemigo)
102 = Cura todos los problemas de estado
103 = Siempre ataca primero
104 = ataca tres veces, se hace más fuerte en cada una (Triple Kick) [Triple Patada]
105 = Roba el objeto que lleva el oponente
106 = Evita que el enemigo huya/sea retirado de batalla
107 = Inflige 1/4 de daño a un oponente dormido (Nightmare) [Pesadilla]
108 = Aumenta la evasión del usuario, Recibe el doble de daño de Stomp [Pisotón]
109 = Curse [Maldición]
111 = Protect/Detect [Protección/Detección]
112 = Spikes [Púas]
113 = Foresight [Profecía]
114 = Perish Song [Canto Mortal]
115 = Sandstorm [Tormenta de Arena]
116 = Endure [Aguante]
117 = Rollout/Ice Ball [Desenrollar/Bola Hielo]
118 = Swagger [Contoneo]
119 = Fury Cutter [Corte Furia]
120 = Attract [Atracción]
121 = Provoca más daño cuanto más feliz sea el usuario
122 = Present [Presente]
123 = Provoca más daño cuanto más infeliz sea el usuario
124 = Previene al usuario de cualquier estado
125 = Descongela si está congelado, puede quemar al objetivo (Flame Wheel/Sacred Fire) [Rueda Fuego/Fuego Sagrado]
126 = Magnitude [Magnitud]
127 = Baton Pass [Relevo]
128 = Pursuit [Persecución]
129 = Rapid Spin [Giro Rápido] (anula Fire Spin, Whirlpool, etc.)
130 = Siempre provoca 20 PS de daño (Sonic Boom [Bomba Sónica])
132 = Morning Sun [Sol Matinal]
133 = Synthesis [Síntesis]
134 = Moonlight [Luz Luanr]
135 = Hidden Power [Poder Oculto]
136 = Rain Dance [Danza Lluvia]
137 = Sunny Day [Día Soleado]
138 = 10% de posibilidades de aumentar la Defensa del usuario (Steel Wing [Ala Acero])
139 = Puede aumentar el Ataque del usuario (Metal Claw [Garra Metal])
140 = Puede aumentar el Ataque, Defensa, Velocidad, Ataque Especial, y Defensa Especial
142 = Sube el ataque al máximo, los PS se reducen a la mitad (Belly Drum [Tambor])
143 = Psych Up [Más Psique]
144 = Mirror Coat [Manto Espejo] (versión especial de Counter)
145 = toma 2 rondas, aumenta la Defensa del usuario (Skull Bash [Cabezazo])
146 = Puede hacer retroceder al oponente, doble de daño si el oponente usa Fly [Vuelo] o Bounce [Bote]
147 = Inflige el doble de daño si el oponente está usando Dig [Excavar]
148 = Future Sight [Premocición]
149 = Puede hacer retroceder al oponente, doble de daño si el oponente usa Fly o Bounce
150 = Puede hacer retroceder + el poder del ataque de doble s el oponente usa Minimize [Reducción]
151 = toma 2 rondas, a menos que Sunny Day esté activo. Solo la mitad si usa Rain Dance, Sandstorm, o Hail
152 = Thunder [Trueno] (Hay muchos efectos asociados a este movimiento)
153 = Teleport [Teletransporte]
154 = Beat Up [Paliza]
155 = toma 2 rondas [y ya]
156 = Aumenta la Defensa del usuario, el poder de Rollout y Ice Ball es el doble
157 = Softboiled [Amortiguador]/Milk Drink [Batido] (Recover [Recuperacion], pero usable fuera de batalla)
158 = Ataca primero y hace retroceder (Fake Out [Sorpresa])
159 = Previene dormirse, ataca de 2-5 rondas (Uproar [Alboroto])
160 = Stockpile [Reserva]
161 = Spit Up [Escupir]
162 = Swallow [Tragar]
164 = Hail [Granizo]
165 = Torment [Tormento]
166 = Confunde al oponente, pero Aumenta su Ataque Especial
167 = Quema al oponente, pero no afecta al tipo Fuego
168 = Memento [Legado]
169 = Sube el Ataque cuando está quemado, paralizado o envenenado
170 = toma 2 rondas, pero si golpean al usuario, éste retrocede (Focus Punch [Puño Certero])
171 = Más fuete contra enemigos paralizados, pero cura la parálisis (SmellingSalt [Estímulo])
172 = Hace que el enemigo solo ataque al usuario (Follow Me [Señuelo])
173 = Nature Power [Adaptación]
174 = El próximo movimiento eléctrico usado será más fuerte (Charge [Carga])
175 = Taunt [Mofa]
176 = Helping Hand [Refuerzo]
177 = Intercambia el objetos con el oponente
178 = Copia la habilidad especial del oponente
179 = Wish [Deseo]
180 = Ataca aleatoriamente con uno de los ataques del aliado [Pokémon junto al que luchas en un combate doble] (Assist [Ayuda])
181 = Ingrain [Arraigo]
182 = Reduce el Ataque y la Defensa del usuario
183 = Magic Coat [Capa Mágica]
184 = Recycle [Reciclaje]
185 = Dobla el daño si el usuario es golpeado por el oponente en el mismo turno
186 = Destruye Light Screen y Reflect (Brick Break [Demolición])
187 = Yawn [Bostezo]
188 = El oponente pierde el objeto (Knock Off [Desarme])
189 = Endeavor [Esfuerzo]
190 = Cuanto mayor sea los PS del usuario mayor daño hará
191 = El usuario intercambia su habilidad con la del enemigo (Skill Swap [Intercambio])
192 = Imprison [Cerca]
193 = Refresh [Alivio]
194 = Grudge [Rabia]
195 = Snatch [Robo]
196 = Más daño en enemigos más duros (Low Kick [Patada Baja])
197 = Secret Power [Daño Secreto]
198 = daño de retoceso, 1/3 del daño (Double-Edge [Doble Filo])
199 = Confunde todos los Pokémon en combate (Teeter Dance [Danza Caos])
200 = Alta probabilidad de golpe crítico + puede quemar (Blaze Kick [Patada Ígnea])
201 = Mud Sport [Chapoteo Lodo]
202 = daño + envenena gravemente al enemigo
203 = el tipo y el daño dependen del clima (Weather Ball [Meteorobola])
204 = Reduce mucho el Ataque Especial tras ser usado (Overheat [Sofoco])
205 = Reduce el Ataque y Defensa del oponente (Tickle [Cosquillas])
206 = Aumenta la Defensa y Defensa Especial del usuario (Cosmic Power [Masa Cósmica])
207 = Puede golpear al enemigo mientras usa Fly o Bounce (Sky Uppercut [Gancho Alto])
208 = Aumenta el Ataque y Defensa del usuario (Bulk Up [Corpulencia])
209 = Alta probabilidad de golpe crítico + envenamiento
210 = Water Sport [Hidrochorro]
211 = Aumenta el Ataque Especial y la Defensa Especial del usuario (Calm Mind [Paz Mental])
212 = Aumenta el Ataque y la Velocidad del usuario (Dragon Dance [Danza Dragón])
213 = Camouflage [Camuflaje]
De acuerdo con la lista, Psicoataque usa el efecto nº 204 (el mismo que Sofoco). Ahora multiplica 204*4, que da 816.
Edit > Block > 816.

Ve al final de los bytes que has seleccionado. El pointer que está JUSTO DESPUÉS de los últimos bytes seleccionados es el que buscamos. Ésto se debe a que “0” también es un move effect. Así que el pointer del move effect de Psicoataque es 1B 84 1D 08, o la dirección 0x1D841B.
Ve a la dirección 0x1D841B

Ahora estás en el “move effect” para Psicoataque. Para saber dónde acaba la información [para el move effect] (donde acabamos de estar) y ver el pointer más cercano. Puedo ver que otro move effect tiene un pointer a 0x1D8426, así que sé que el move effect de Psicoataque va del offset 0x1D841B al 0x1D8425.

Ésta es la información para Psicoataque.
Offsets: 0x1D841B - 0x1D8425
2E 85 3E 02 02 FB 28 00 69 1D 08
Como hasta ahora, el usuario [quien usa el movimiento] se quedará con el ataque especial bajado durante dos rondas. ¡Pero queremos que la velocidad del usuario baje durante un solo turno! En este caso, lo único que necesitaremos modificar es, únicamente, un byte.

Hago notar que la mayoría de los movimientos acaban en los pointers 00 69 1D 08 (0x1D6900) o 4E 69 1D 08 (0x1D694E).

Si tu ataque, además, hace daño, usará el primero. Si no, el segundo.

Ahora, el byte que tenemos que cambiar es el que está en negrita.
2E 85 3E 02 02 FB 28 00 69 1D 08
Ese byte (FB) es el único responsable de que baje el Ataque Especial. Entonces, ¿cómo hacemos para que baje la Velocidad?

Aquí dejo una lista de lo que puedes hacer cambiando este byte. Os dejo los que funcionan el 100% de las veces. Quiero decir, que funcionan SIMEPRE. Hay más (no he probado de 00 a 0C) pero estoy seguro de que son los mismos efectos, simplemente con una inferior posibilidad de que ocurran. Sé que 01 tiene un 10% de posibilidades de dormir al oponente, 03 10% de quemarlo, etc.

C1: Te duermes (tú).
C2: Te envenenas.
C3: Te quemas.
C4: Te congelas.
C5: Te paralizas.
C6: Te envenenas gravemente.
C7: Te confundes.
C9: Congela a tu oponente.
CA: Efecto de Alboroto.
CB: Efecto de Día de Pago.
CD: Efecto de Sand Tomb [Bucle Arena].
CE: 1/4 daño por retroceso.
CF: Sube el Ataque del usuario un nivel.
D0: Sube la Defensa del usuario un nivel.
D1: Sube la Velocidad del usuario un nivel.
D2: Sube el Ataque Especial del usuario un nivel.
D3: Sube la Defensa Especial del usuario un nivel.
D4: Sube la precisión del usuario un nivel.
D5: Sube la evasión del usuario un nivel.
D6: Reduce el Ataque del usuario un nivel.
D7: Reduce la Defensa del usuario un nivel.
D8: Reduce la Velocidad del usuario un nivel.
D9: Reduce el Ataque Especial del usuario un nivel.
DA: Reduce la Defensa Especial del usuario un nivel.
DB: Reduce la precisión del usuario un nivel.
DC: Reduce la evasión del usuario un nivel.
DD: Toma una ronda para recuperarse (Hyper Beam, etc...)
DF: Efecto de Thief [Ladrón]
E2: El usuario sube todos los stats un nivel (expepto precisión y evasión).
E5: Reduce el Ataque y la Defensa del usuario un nivel.
E6: 1/3 retroceso.
E7: Sube el Ataque del usuario dos niveles.
E8: Sube la Defensa del usuario dos niveles.
E9: Sube la Velocidad del usuario dos niveles.
EA: Sube el Ataque Especial del usuario dos niveles.
EB: Sube la Defensa Especial del usuario dos niveles.
EC: Sube la precisión del usuario dos niveles.
ED: Sube la evasión del usuario dos niveles.
EE: Reduce el Ataque del usuario dos niveles.
EF: Reduce la Defensa del usuario dos niveles.
F0: Reduce la Velocidad del usuario dos niveles.
F1: Reduce el Ataque Especial del usuario dos niveles.
F2: Reduce la Defensa Especial del usuario dos niveles.
F3: Reduce la precisión del usuario dos niveles.
F4: Reduce la evasión del usuario dos niveles.
F5: Efecto de Outrage.
F6: Efecto de Knock Off.
FB: Reduce el Ataque Especial del usuario dos niveles.

De todos modos, queremos uno que SIMEPRE baje la Velocidad. Si miras, D8 SIEMPRE baja al rival la Velocidad en 1 punto. Así que el código de nuestro nuevo movimiento es:
2E 85 3E 02 02 D8 28 00 69 1D 08

¡Bien! ¡Ahora tenemos un/a Machada funcional!

Así que todo lo que tenemos que hacer es poner este código donde antes creamos el pointer en la tabla de move effects (la cual es 0x920000 en mi caso).

Ahora, en Pokemon Game Editor, simplemente cambia el move effect a 214 y ¡[el ataque] usará este efecto!
Pero, ¿qué pasa si queremos añadir múltiples efectos?
Por ejemplo, ¿Envite Ígneo?
Jambo51 dio también una solución.

Usaré su ejemplo en el hilo.

Envite Ígneo no solo causa retroceso, sino que, además, tiene posibilidades de quemar al oponente

Para esos tipos de ataques que necesitan múltiples efectos, necesitan un código diferente.

Si tu ataque provoca daño (en este caso, lo hará), empieza con este código:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00

Este es, de momento, nuestro código para Envite Ígneo. Todo lo que hace es causar daño.

Ahora, ¡debemos añadir el efecto de retroceso!

¿Os acordáis de cómo antes encontramos el efecto de Psicoataque? Pues en este caso, debemos encontrar un efecto existente para retroceso. Envite Ígneo efectúa 1/3 daño de retroceso. Hmmm… ¡Doble Filo también lo hace!

El efecto de Doble Filo (de acuerdo con la lista de Chaos Rush) es el nº 198. Así que 198*4 es 792. Así que empezando al principio de tu nueva tabla de “move effects”; Edit > Select Block > 792. El pointer tras los bytes seleccionados es el que buscamos. En este caso, es 3A 83 1D 08, o 0x1D833A.

¡Ve a esa dirección! De todos modos, antes de ir, veamos si podemos encontrar el pointer más cercano a esa ubicación, y sabemos dónde acaba Doble Filo. Justo después está el pointer a 0x1D8345, de modo que sabemos que ese último byte de Doble Filo está en 0x1D8344. ¿Lo entiendes? :)

El código de Doble Filo debería quedar algo así:
2E 85 3E 02 02 E6 28 00 69 1D 08

Ahora mismo estarás diciendo, “Hmmm… Es exactamente igual que el código que acabamos de hacer de Machada, ¡con el byte puesto como E6! Cierto. Si te fijas, E6 significa que SIEMPRE hace 1/3 de daño de retroceso. ¡Ahora cobra sentido!

Ahora añadimos eso [el nuevo código con el daño de retroceso] al código que hicimos previamente. No necesitamos el pointer al final, como sea; haremos el nuestro propio más tarde al final de nuestro propio movimiento. De modo que podemos deshacernos del 28 00 69 1D 08 (En este caso, 28 quiere decir “goto” [“ir a”, si se trata de un script, consiste en trasladarse a otro pointer en el que continúa el código] de modo que tampoco lo necesitaremos).

Ahora mismo, el código de Envite Ígneo debería lucir algo así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6

Ahora, simplemente añadimos un “15” tras de él. El 15 es usado para ejecutar este efecto, en este caso para ejecutar el daño por retroceso.

Ahora nuestro código debería ser algo así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15

¡Ahora necesitaremos la posibilidad de quemar! Aquí llegan las buenas noticias: es mucho más sencillo de hacer. Cambiando nuestro byte especial a 03 hace que haya un 10% de posibilidades de quemar. ASÍ QUE, podemos tomar el código del retroceso y cambiar ese byte que todos desesperadamente amamos [?] a 03.
2E 85 3E 02 02 03 28 00 69 1D 08

Ahora podemos añadir ese código al que teníamos hecho de antes de Envite Ígneo. Una vez más, eliminaremos el 28 00 69 1D 08 y añadiremos un 15 al final.

Aquí como debería quedar:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15

Y, finalmente, una vez has terminado de añadir tu ataque, añade el comando “goto” (28) y la dirección 0x1D6947, o 47 69 1D 08.

El código final quedaría así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15 28 47 69 1D 08

¡Ya tienes un funcional Envite Ígneo!

Una nota: ¡Todos los efectos que tenga una probabilidad de quemar y hacer retroceder, deben compartir la misma probabilidad de ocurrir! (Por limitaciones del juego). ES MÁS, no lo hagas pues hay una posibilidad de que los “allignments” de ambos estados ocurran al mismo tiempo: ¡no funcionará!
Para movimientos más complejos, se debe “diseccionar” y experimentar para crearlos. El código de Machada es mío, mientras que Envite Ígneo es de Jambo. Aquí os dejo alguno más. Si has logrado exitosamente hacer funcionar un “move effect”, por favor, házmelo saber y lo añadiré al post [puedo decir lo mismo por mi parte].
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 4F 81 47 69 1D 08 50 01 F2 7D 1D 08 E2 01 3A 51 01 02 58 01 4C 01 4D 01 73 01 10 03 00 4E 01 01 3A 52 01 28 4E 69 1D 08 28 47 69 1D 08

1D 00 00 00 00 01 00 69 1D 08 2E 85 3E 02 02 A3 1C 00 07 00 00 00 77 04 90 08 28 00 69 1D 08 2E D2 3F 02 02 02 28 00 69 1D 08

2E 85 3E 02 02 D8 28 00 69 1D 08

00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15 28 47 69 1D 08

00 02 03 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 07 00 00 00 B0 69 1D 08 84 CC 69 1D 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 52 15 2E 85 3E 02 02 53 15 2E 85 3E 02 02 51 15 28 47 69 1D 08

00 02 03 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 07 00 00 00 B0 69 1D 08 84 CC 69 1D 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 CF 15 2E 85 3E 02 02 D0 15 2E 85 3E 02 02 D4 15 28 47 69 1D 08

00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 D7 15 2E 85 3E 02 02 DA 15 28 47 69 1D 08

Note: esta guía no muestra cómo asignar diferentes animaciones más que las añadidas. Pronto lo añadiré, en cuanto descubra cómo hacerlo. ;)
EDIT: Echa un vistazo a este hilo para hacer animaciones personalizadas, de Chaos Rush: http://www.pokecommunity.com/showthread.php?t=281520

EDIT 2: Todo el mundo lo hace. Actualiza el archivo .ini de PGE [Pokemon Game Editor] (Abre PGE, ve a Help > Update > ROM ini file). Entonces, ve a donde estuvimos cambiando los pointers para la info. de los ataques y debería haber un nuevo pointer al final que dice: “AttackAnimationPointer”. Cámbialo a la nueva dirección para las animaciones de los ataques (el original es 0x1C68F4, en mis ejemplos lo puse en 0x90336C).
 
Última edición por un moderador:

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Respuesta: [HEX] FR - Nuevos ataques sin sustituir (Pokeco)

¿Por qué nadie comenta? Justo el otro día decía que sería un gran aporte si alguien tradujese ese tutorial para la gente que no sepa inglés.
Se agradece que de verdad sea una traducción y no algo hecho rápido con Google Translator, aunque todavía falte la parte de crear efectos para los movimientos es sin duda un buen aporte.
 

Neon Skylar

Rojo Fuego User
Respuesta: [HEX] FR - Nuevos ataques sin sustituir (Pokeco)

Por este tipo de tutoriales vale la pena hacer romhacking, alguien ha escuchado mi suplica xD Graciiias por este tuto, me servira mucho y estare esperando la actualizacion
 

Epitofio-kun

Vendo Pochoclos :v
Respuesta: [HEX] FR - Nuevos ataques sin sustituir (Pokeco)

me ganaste el tuto men xd pero igual es un buen aporte y bastante necesario y q que hay gente que no me comparte sus parches con la 7ma gen >:,v
te voa donar balls aunque realmentete no valen mucho xd
 

Fran Agustín

Si el sol besa tus ojos, ni cuenta te das.
Miembro insignia
Respuesta: [HEX] FR - Nuevos ataques sin sustituir (Pokeco)

Es una gran traducción para un muy útil tutorial.
Como dice Rafa, se nota el esfuerzo y no el traductor de Google xD

Lo único que no me termina de convencer es que no haya una buena explicación de la estructura de la tabla :S

Por último, supongo que ha de funcionar también en FR 1.1, con la diferencia de que los offsets donde están los datos a repuntear han de ser otros. Podemos buscarlos por comparación en este caso (tomamos unos bytes de la tabla y los buscamos en la otra ROM).
Ah, eso me recuerda:
Si el "Presents" no aparece tras el símbolo de Gamefreak, tienes un BPRE
No precisamente. BPRE = FR (U). Lo que tienes si no aparece el "Presents" es una ROM versión 1.0 en lugar de una 1.1.

Se agradece muchísimo el aporte ;)
 

Juan Kio

Aprendiendo decomp...
Respuesta: FR | HEX | Nuevos ataques sin sustituir y añadir nuevos "move effects"(Pokeco)

Gran aporte ,de 10
Esta muy bien traducido ,se entiende hasta parece fácil
Con un poco de esfuerzo se logra ,como dije antes es un
gran aporte ,gracias por traerlo
Saludos y ánimos!
 
Respuesta: FR | HEX | Nuevos ataques sin sustituir y añadir nuevos "move effects"(Pokeco)

Estuve esperando tanto tiempo este tuto, gracias por subirlo.
Tienes mi dedo arriba xD
 
Re: FR | HEX | Nuevos ataques sin sustituir y añadir nuevos "move effects"(Pokeco)

Yo hago todos los pasos del tutorial tal cual y si se me agregan los movimientos pero cuando los quiero editar con PokemonGameEditor me sale error y dice algo de "Excepción no controlada" y no puedo editarlos. Ademas los nombres aparecen con simbolos raros como " ÀÁ Â F " o " Â F\h40 \h80 \h80 ". Alguien me puede ayudar a saber que estoy haciendo mal? porfavor
 

Omega

For endless fight
Miembro del equipo
Moderador/a
Respuesta: Re: FR | HEX | Nuevos ataques sin sustituir y añadir nuevos "move effects"(Pokeco)

Yo hago todos los pasos del tutorial tal cual y si se me agregan los movimientos pero cuando los quiero editar con PokemonGameEditor me sale error y dice algo de "Excepción no controlada" y no puedo editarlos. Ademas los nombres aparecen con simbolos raros como " ÀÁ Â F " o " Â F\h40 \h80 \h80 ". Alguien me puede ayudar a saber que estoy haciendo mal? porfavor
Hiciste también lo que menciona en el ultimo "Edit"? Me refiero a esta parte:
EDIT 2: Todo el mundo lo hace. Actualiza el archivo .ini de PGE [Pokemon Game Editor] (Abre PGE, ve a Help > Update > ROM ini file). Entonces, ve a donde estuvimos cambiando los pointers para la info. de los ataques y debería haber un nuevo pointer al final que dice: “AttackAnimationPointer”. Cámbialo a la nueva dirección para las animaciones de los ataques (el original es 0x1C68F4, en mis ejemplos lo puse en 0x90336C).
Si no lo hiciste es casi seguro que tu error se deba a omitir esto, repite el procedimiento en caso de que no y si el problema persiste consulte a su medico (?
 

Quentin_2020

Usuario habitual
Tengo una duda con respecto a eso, ¿como creo ataques de estado? Usé como guía el ataque paralizador, puse todo tal cual en el editor de ataques
pero con el efecto de congelar, en "power" puse 0 pero en el juego hace daño .-.
 

Arcano120

Usuario de oro
Bueno, este es mi primer tutorial en el foro, espero hacerlo lo mejor posible :D

Este tuto es una traducción de otro tuto de la Pokecommunity, de itman, así que os créditos van para él.
Link del tuto: https://www.pokecommunity.com/showthread.php?t=290135

Cualquier anotación que YO haga en el tuto será entre corchetes "[]".

Y sin más demora, vamos a ello:


Este tutorial es sobre cómo añadir nuevos movimientos a Pokémon Fire Red sin reemplazar antiguos, y crear nuevos efectos para los movimientos. Esta información fue encontrada por Jambo51, y aquí os dejo el hilo original:

http://www.pokecommunity.com/showthread.php?t=263479

Dado que puede ser complicado para algun@s (porque, en primer lugar, nunca fue redactado para ser un tutorial), pensé que podía hacerlo más sencillo de seguir pues es gigante, y creo que muchos hacks podrían beneficiarse de esto. Ésto es para Fire Red BPRE 1.0 (FR US 1.0), por cierto. para saber si tienes un ROM BPRE, cárgalo [en un emulador] y mira la pantalla de título. Si el "Presents" no aparece tras el símbolo de Gamefreak, tienes un BPRE. Espero que ésto facilite a la gente cómo hacerlo.

-Gracias Aaron por su aporte: ;)

Qué se necesita:
1. Un ROM Fire Red BPRE 1.0 (FR US 1.0)
2. Un editor hexadecimal (yo usaré Hex Workshop).
3. Pokemon Game Editor.
4. Como Jambo bien dice, *PACIENCIA*.


Abre tu ROM en un editor hexadecimal (una vez más, yo usaré Hex Workshop).

Ve a la dirección 0x250C04.
Ésta es la dirección de la información original de los movimientos, la cual moveremos a otro lugar [repuntearemos].



Edit>Select Block> 4260 bytes. Copia.



Abre Free Space Finder y busca 4260 Bytes de espacio libre. Ve a esa dirección. Por ejemplo, usaremos 0x900000.

Espacio Libre = Las "FF". Básicamente, cualquier cosa de 0x780000 - 0xFFFFFF es espacio libre.


Pon la información original de los movimientos en esta nueva dirección.
IMPORTANTE: pégala SOBRE las "FF". De modo que ve a Edit > Select Block > 4260, y pégalo ahí. NO PEGUES SIN HABER SELECCIONADO LAS "FF" PRIMERO.

ANOTA LA NUEVA DIRECCIÓN!!! En mi caso, escribiré "0x900000 = Información de los movimientos".


Cambia todos los pointers originales de la información original de los movimientos a la nueva dirección.

Ésto significa, básicamente, que todo lo que esté dirigido a la antigua dirección, será enviado a la nueva. De modo que, en mi caso, 0x900000 es mi nueva dirección. Primero vamos a Edit > Find.



Eso es lo que mostrará. Dado que la tabla antigua se encuentra en 0x250C04, caulquier pointer de los datos sería así:
04 0C 25 08

De modo que queremos buscar esa cadena de bytes en la ROM.
Y entonces reemplazar TODOS con nuestro nuevo pointer, en mi caso 0x900000, y quedaría así:
00 00 90 08


*Una rápida lección sobre pointers.*
1. Mira tu offset Offset de ejemplo: 0x594039
2. Sepáralo en grupos de dos: 59 40 39
3. Toma el último byte y pónlo primero: 39 59 40
-Recuerda, los dos números juntos son un byte, así que no permutes el byte en sí, sino el orden.
4. Toma el último byte y pónlo entre los otros dos bytes: 39 40 59
5. Añade 08 al final: 39 40 59 08

Otro ejemplo rápido:
0xA9EBB0 pasa a B0 EB A9 08
Básicamente simplemente estás invirtiendo los bytes y añadiendo 08.

*Final de la lección.*

Así que, una vez más, estamos reemplazando todos los pointers de 0x250C04 a 900000. Simplemente sigue buscando esa cadena [de bytes] y reemplazándolas hasta que no haya más por reemplazar.
EN SERIO, HAY UN MOTÓN, SÉ PACIENTE.

[Otra manera más rápida y eficiente de hacerlo es Edit > Replace, o ctrl + H, en la primera caja poner los valores hexadecimales (en este caso el pointer) que los quieres sutituir y en la segunda los valores por los que quieres sustituir (en este caso el nuevo pointer al que vamos asignar a nuestra tabla de ataques).]



Edit > Find (otra vez).

También hay pointers en la ROM a 0x250C08... para la info del los PP. Así que, una vez mas, tenemos que reemplazar todos esos pointers por tu nuevo pointer +4. De modo que 0x900000 + 4 es 0x900004. [Recuerda que trabajamos en hexadecimal y que, por ejemplo, C + 4 = 10]


De modo que los pointers 0x250C08 deberían ser así: 08 0C 25 08

Y al reemplazarlo el pointer 0x900004 quedaría así: 04 00 90 08



¡Y ahora reemplázalos todos! Hay también muchos de estos, así que sé paciente.
Vuelve a la tabla original con la información de los movimientos (0x250C04) y copia (12*número de nuevos ataques) que quieres añadir.
El máximo nº de movimientos que la tabla puede almacenar es de 511. Aunque ya hay 354 añadidos. Así que, en este ejemplo, yo quiero usar el máximo; 511-354 es 157. 12*157 es 1884.

Ahora ve a Edit > Select Block > 1884 [o la cantidad de bytes que tú tengas] y copia [ctrl + v].



Vuelve a donde pusiste la información de los movimientos (en mi caso 0x900000). Ve al final (donde vuelven a empezar las "FF"). Otra vez más; Edit > Select Block > 1884. Y entonces pégalo.





Ve a la dirección 0x247094. Edit > Select Blocks > 4615.
Copia la info.

Ésta es la información de los nombres de los ataques. [Attack data]





Abre FSF [FreeSpaceFinder] y busca 4615 bytes de espacio libre. Para hacerlo más fácil, puedes poner la info justo después de la nueva tabla con la info. de los nombres. ¡Anota la dirección en la que lo insertaste! En mi caso, lo pego en 0x901800.




Al igual que antes, debemos cambiar todos los pointers asociados con el antiguo offset y dirigirlos al nuevo. Edit > Find.
Cualquier pointer de 0x247094 será 94 70 24 08

Así que eso será lo que busquemos.
Una vez más, ¡hay más de uno!

Yo los reemplazaré con 00 18 90 08.




Vuelve a 0x247094 y copia (13*nº de nuevos ataques) bytes. Los pondremos al final de la tabla como hicimos con la info. de los movimientos. Una vez más, queremos que la tabla soporte 511 movimientos; 157*13 es 2041.

Ahora ve a Edit > Select Block > 2041, y copia la info.




Vuelve a la nueva dirección para la info. de los nombres (la mía era 0x901800) y ve al final. Una vez allí, ve Edit > Select Block > 2401 [se ha debido confundir, en realidad es 2041] y pégalo.




Ve a 0x1C68F4. Edit > Select Block > 1420. Cópialo.

Ésta es la info. de las animaciones. Los nuevos movimientos no funcionarían sin algún tipo de animación que vaya junto con ellos...

Abre FSF y busca 1420 bytes (o si sabes que tienes espacio, pega esta info. detrás de la info. de los nuevos ataques). Edit > Select Block > 1420 y pega la info. ASEGÚRATE de que el offset en el que lo vayas a pegar acabe en 0, 4, 8 o C, O NO FUNCIONARÁ. El offset que yo estoy usando es 0x90336C.

Edit > Find > F4 68 1C 08

Sep, adivinaste, tenemos que cambiar el pointer de la nueva info. por uno nuevo. Estoy bastante seguro de que solo es uno, pero comprobémoslo para estar seguros. Yo lo cambiaré a 0x90336C.

Mi pointer quedó así: 6C 33 90 08.

Vuelve a 0x1C68F4 y copia (4*nº de nuevos ataques) bytes. 157*4 es 628. Edit > Select Block > 628. Cópialo.

Una vez más puedes abrir FSF y buscar 628 bytes libres, o hacerlo más fácil de nuevo, simplemente poniéndolo debajo de la info. de las animaciones.

Un aviso, cada movimiento tendrá una animación. A partir de ahora, cada movimiento recibirá las animaciones de el primero sin importar el nº de ataques que hayas añadido, de modo que el nuevo ataque nº 1 (el 355) tendrá la animación de pound, etc. [¿:. Esta parte no la entiendo bien, pero creo que lo que quiere decir es que el ataque nº 355, el primero que añadiremos, tendrá la animación de pound (destructor, me parece), el atq. 356 tendrá la animación del 2º, etc.]

Abre el INI de Pokemon Game Editor (debería estar en una carpeta que dice "ini" que viene con el programa.

También puedes abrir Pokemon Game Editor e ir a Help > Edit roms.ini.

Ahora cambiaremos los offset para que el programa sepa dónde está la info. [las tablas de información] y qué es.

Las únicas cosas que necesitaremos cambiar serán estas tres:

NumberOfAttacks=354
AttackData=&H250C04
AttackNames=&H247094

Queremos cambiarlos por nuestros nuevos offsets. Aquí está el mío (el vuestro debería quedar igual, si seguisteis el tutorial).

NumberOfAttacks=511
AttackData=&H900000
AttackNames=&H901800

[recomiendo editar el INI con el editor de texto por defecto en Windows. Las "cosas" que vamos a tener que cambiar estarán separadas por lo que recmiedno usar Edit > Find, en el bloc de notas.]


Finalmente, hay un limitador en el ROM. Si no es desactivado, en vez de decir "Bulbasaur used VenoShock!", dirá "Bulbasaur used a POISON move!".

Ve a 0xD75Fc y sobreescribe lo que sea que haya ahí por:

00 00 00 00 00 00
A partir de aquí puedes fácilmente modificar estos movimientos en el Attack Editor [Editor de Ataques] que integra Pokemon Game Editor.


Abre tu editor hexadecimal y ve a la dirección 0x1D65A8. Edit > Select Block > 856. Copia.

Ésta es la tabla de los “move effects” [efectos de movimiento]. En este momento solo sube hasta 213, pero reescribiéndolo poder hacer que almacene hasta 255 (256, si 0 cuenta) pointers.

Abre FSF y busca 856 bytes de espacio libre. Ve a esa dirección (usaré 0x910000 en mi ejemplo). Edit > Select Block > 856. Pégalo.

Edit > Find > A8 65 1D 08 (de nuevo cambiaremos los pointers de la tabla antigua a los de nuestra nueva tabla). Yo los cambiaré por 00 00 91 08 (en este punto, ¡espero que todos entiendan cómo funcionan los pointers!) Reemplázalos todos.

Ve al final de tu tabal de move effects. El último pointer, 5F 86 1D 08 está marcando el final de la tabla. Así que el anterior pointer (FB 85 1D 08) es el último efecto de la tabla (#213).

Queremos añadir un nuevo efecto, así que vamos a sobrescribir el último pointer (5F 86 1D 08) por un nuevo pointer. Normalmente, primero harías un nuevo efecto y luego buscarías espacio libre para insertarlo, y entonces hacer un nuevo pointer, pero diremos por el bien de este tutorial que mi nuevo movimiento estará ubicado en 0x920000.

Aquí es donde realmente hacemos los nuevos move effects.

Solo como dato, (aún) no podemos crear COMPLETAMENTE nuevos move efects, pero podemos combinar y editar cualquiera de los ya existentes. Mediante mucho probar y experimentar, puedes crear casi todos los movimientos de la 4ª y 5ª generación. He intentado hacer un Ida y Vuelta y Placaje Eléctrico funcionales editando el script de Relevo (mira al final del tutorial los move effects ya creados).

Para este tutorial, crearé el movimiento Machada.

Machada tiene una animación sencilla – Tras usarlo, tu velocidad se reduce en uno. Hmmm…

Pensemos por un segundo. Qué otros movimientos tienen efectos que nos ayuden a crear éste… en realidad, hay MUCHOS. Vamos a otro movimiento que reduzca tus stats...

Hay muchos, pero vamos con Psicoataque (tras usar Psicoataque tu ataque se reduce en dos).

Ve a la ubicación de tu nueva tabla de move effects (si has seguido este tutorial, debería ser 0x910000). Para encontrar dónde está el pointer de Psicoataque, primero debemos descubrir qué número de efecto usa.

Chaos Rush posteó una lista con todos ellos en el otro hilo. Quita MUCHÍSIMO trabajo, así que lo pondré aquí.

0 = Sin efectos añadidos
1 = Duerme al objetivo
2 = Envenena al objetivo
3 = Absorbe la mitad del daño recibido (Absorb, Mega Drain, etc.) [Absorber, Megaagotar]
4 = Quema al objetivo
5 = Congela al objetivo
6 = Paraliza al objetivo
7 = Selfdestruct, Explosion [Autodestrucción, Explosión]
8 = Toma la mitad del daño provocado al rival (Dream Eater) [Come Sueños]
9 = Mirror Move [Movimiento Espejo]
10 = Aumenta el Ataque del usuario
11 = Aumenta la Defensa del usuario
12 = Aumenta la Velocidad del usuario
13 = Aumenta el Ataque Especial del usuario
14 = Aumenta la Defensa Especial del usuario
16 = Aumenta la evasión del usuario
17 = Nunca falla
18 = Reduce el ataque del oponente
19 = Reduce la Defensa del oponente
20 = Reduce la Velocidad del oponente
21 = Reduce el Ataque Especial de oponente
22 = Reduce la Defensa Especial de oponente
23 = Reduce la Precisión del oponente
24 = Reduce la evasión del oponente
25 = Haze [Niebla] (hay muchos efectos asociados a este movimineto)
26 = Bide [Venganza]
27 = Thrash/Petal Dance/Outrage [Golpe/Danza Pétalo/Enfado]
28 = Whirlwind [Remolino]/efecto de Roar [Rugido]
29 = Ocurre de 2-5 veces
30 = Conversión
31 = Puede provocar que el objetivo retroceda
32 = Recupera la mitad de los PS
33 = Envenena gravemente al oponente
34 = Pay Day [Día de pago]
35 = Light Screen [Pantalla de Luz]
36 = Puede congelar, paralizar o quemar
37 = Rest [Descanso]
38 = Debilita de un golpe
39 = toma 2 turnos + altas posibilidades de golpe crítico (Razor Wind [Viento Cortante])
40 = Baja a la mitad de los PS que (en ese momento) tiene el adversario
41 = Siempre baja 40 PS (Dragon Rage [Furia Dragón])
42 = Bind [Atadura]/ Fire Spin [Giro Fuego]/ Clamp [Tenaza]/efecto de Whirlpool [Torbellino]
43 = Alta posibilidad de golpe crítico
44 = Golpea dos veces (Double Kick [Doble Patada])
45 = Si falla, el usuario recibe 1/8 del daño que hubiera recibido el oponente (Jump Kick [Patada Salto])
46 = Evita cambios de estado (Mist [Neblina])
47 = Aumenta la posibilidad de golpe crítico del usuario
48 = daño de retroceso, 1/4 del daño (Take Down [Derribo])
49 = Confunde al rival
50 = Sube mucho el Ataque del usuario
51 = Sube mucho la Defensa del usuario
52 = Sube mucho la Velocidad del usuario
53 = Sube mucho el Ataque Especial del usuario
54 = Sube mucho la Defensa Especial del usuario
57 = Transform [Transformación]
58 = Reduce mucho el Ataque del oponente
59 = Reduce mucho la Defensa del oponente
60 = Reduce mucho la Velocidad del oponente
61 = Reduce mucho el Ataque Especial del oponente
62 = Reduce mucho la Defensa Especial del oponente
65 = Reflect [Reflejo]
66 = Envenena al objetivo (de nuevo, por alguna razón)
67 = Paraliza al objetivo (de nuevo, por alguna razón)
68 = Reduce el Ataque del oponente
69 = Reduce la Defensa del oponente
70 = Reduce la Velocidad del oponente
71 = Reduce el Ataque Especial del oponente
72 = Reduce la Defensa Especial del oponente
73 = Reduce la precisión del oponente
75 = Toma 2 rondas, puede hacer retroceder al oponente
76 = Puede confundir al oponente
77 = Golpea dos veces, puede envenenar al oponente (Twineedle [Doble Ataque])
78 = Nunca falla, pero ataca segundo
79 = Substitute [Sustituto]
80 = Inmóvil el siguiente turno (Hyper Beam [Hiperrayo])
81 = Sube el Ataque del usuario siempre que éste es alcanzado (Rage [Furia])
82 = Mimic [Mimético]
83 = Metronome [Metrónomo]
84 = Roba vida al oponente cada turno (Leech Seed [Drenadoras])
85 = Splash [Salpicadura]
86 = Disable [Anulación]
87 = El daño es equivalente al nivel del usuario (Seismic Toss/Night Shade [Movimiento Sísmico/Tinieblas])
88 = La cantidad de daño provocado varía (Psywave [Psicoonda])
89 = Counter [Contraataque]
90 = Encore [Otra Vez]
91 = Pain Split [Divide Color]
92 = Solo puede usar el ataque si el usuario está dormido (Snore [Ronquido])
93 = Conversion 2 [Conversión 2]
94 = Próximo ataque no fallará (Mind Reader [Telépata])
95 = Sketch [Esquema]
97 = Sleep Talk [Sonámbulo]
98 = Destiny Bond [Mismo Destino]
99 = inflige más daño si el usuario tiene menos PS (Flail, Reversal) [Azote, Inversión]
100 = Spite [Rencor] (elimina los PP del oponente)
101 = False Swipe [Flasotortazo](nunca hará retroceder al enemigo)
102 = Cura todos los problemas de estado
103 = Siempre ataca primero
104 = ataca tres veces, se hace más fuerte en cada una (Triple Kick) [Triple Patada]
105 = Roba el objeto que lleva el oponente
106 = Evita que el enemigo huya/sea retirado de batalla
107 = Inflige 1/4 de daño a un oponente dormido (Nightmare) [Pesadilla]
108 = Aumenta la evasión del usuario, Recibe el doble de daño de Stomp [Pisotón]
109 = Curse [Maldición]
111 = Protect/Detect [Protección/Detección]
112 = Spikes [Púas]
113 = Foresight [Profecía]
114 = Perish Song [Canto Mortal]
115 = Sandstorm [Tormenta de Arena]
116 = Endure [Aguante]
117 = Rollout/Ice Ball [Desenrollar/Bola Hielo]
118 = Swagger [Contoneo]
119 = Fury Cutter [Corte Furia]
120 = Attract [Atracción]
121 = Provoca más daño cuanto más feliz sea el usuario
122 = Present [Presente]
123 = Provoca más daño cuanto más infeliz sea el usuario
124 = Previene al usuario de cualquier estado
125 = Descongela si está congelado, puede quemar al objetivo (Flame Wheel/Sacred Fire) [Rueda Fuego/Fuego Sagrado]
126 = Magnitude [Magnitud]
127 = Baton Pass [Relevo]
128 = Pursuit [Persecución]
129 = Rapid Spin [Giro Rápido] (anula Fire Spin, Whirlpool, etc.)
130 = Siempre provoca 20 PS de daño (Sonic Boom [Bomba Sónica])
132 = Morning Sun [Sol Matinal]
133 = Synthesis [Síntesis]
134 = Moonlight [Luz Luanr]
135 = Hidden Power [Poder Oculto]
136 = Rain Dance [Danza Lluvia]
137 = Sunny Day [Día Soleado]
138 = 10% de posibilidades de aumentar la Defensa del usuario (Steel Wing [Ala Acero])
139 = Puede aumentar el Ataque del usuario (Metal Claw [Garra Metal])
140 = Puede aumentar el Ataque, Defensa, Velocidad, Ataque Especial, y Defensa Especial
142 = Sube el ataque al máximo, los PS se reducen a la mitad (Belly Drum [Tambor])
143 = Psych Up [Más Psique]
144 = Mirror Coat [Manto Espejo] (versión especial de Counter)
145 = toma 2 rondas, aumenta la Defensa del usuario (Skull Bash [Cabezazo])
146 = Puede hacer retroceder al oponente, doble de daño si el oponente usa Fly [Vuelo] o Bounce [Bote]
147 = Inflige el doble de daño si el oponente está usando Dig [Excavar]
148 = Future Sight [Premocición]
149 = Puede hacer retroceder al oponente, doble de daño si el oponente usa Fly o Bounce
150 = Puede hacer retroceder + el poder del ataque de doble s el oponente usa Minimize [Reducción]
151 = toma 2 rondas, a menos que Sunny Day esté activo. Solo la mitad si usa Rain Dance, Sandstorm, o Hail
152 = Thunder [Trueno] (Hay muchos efectos asociados a este movimiento)
153 = Teleport [Teletransporte]
154 = Beat Up [Paliza]
155 = toma 2 rondas [y ya]
156 = Aumenta la Defensa del usuario, el poder de Rollout y Ice Ball es el doble
157 = Softboiled [Amortiguador]/Milk Drink [Batido] (Recover [Recuperacion], pero usable fuera de batalla)
158 = Ataca primero y hace retroceder (Fake Out [Sorpresa])
159 = Previene dormirse, ataca de 2-5 rondas (Uproar [Alboroto])
160 = Stockpile [Reserva]
161 = Spit Up [Escupir]
162 = Swallow [Tragar]
164 = Hail [Granizo]
165 = Torment [Tormento]
166 = Confunde al oponente, pero Aumenta su Ataque Especial
167 = Quema al oponente, pero no afecta al tipo Fuego
168 = Memento [Legado]
169 = Sube el Ataque cuando está quemado, paralizado o envenenado
170 = toma 2 rondas, pero si golpean al usuario, éste retrocede (Focus Punch [Puño Certero])
171 = Más fuete contra enemigos paralizados, pero cura la parálisis (SmellingSalt [Estímulo])
172 = Hace que el enemigo solo ataque al usuario (Follow Me [Señuelo])
173 = Nature Power [Adaptación]
174 = El próximo movimiento eléctrico usado será más fuerte (Charge [Carga])
175 = Taunt [Mofa]
176 = Helping Hand [Refuerzo]
177 = Intercambia el objetos con el oponente
178 = Copia la habilidad especial del oponente
179 = Wish [Deseo]
180 = Ataca aleatoriamente con uno de los ataques del aliado [Pokémon junto al que luchas en un combate doble] (Assist [Ayuda])
181 = Ingrain [Arraigo]
182 = Reduce el Ataque y la Defensa del usuario
183 = Magic Coat [Capa Mágica]
184 = Recycle [Reciclaje]
185 = Dobla el daño si el usuario es golpeado por el oponente en el mismo turno
186 = Destruye Light Screen y Reflect (Brick Break [Demolición])
187 = Yawn [Bostezo]
188 = El oponente pierde el objeto (Knock Off [Desarme])
189 = Endeavor [Esfuerzo]
190 = Cuanto mayor sea los PS del usuario mayor daño hará
191 = El usuario intercambia su habilidad con la del enemigo (Skill Swap [Intercambio])
192 = Imprison [Cerca]
193 = Refresh [Alivio]
194 = Grudge [Rabia]
195 = Snatch [Robo]
196 = Más daño en enemigos más duros (Low Kick [Patada Baja])
197 = Secret Power [Daño Secreto]
198 = daño de retoceso, 1/3 del daño (Double-Edge [Doble Filo])
199 = Confunde todos los Pokémon en combate (Teeter Dance [Danza Caos])
200 = Alta probabilidad de golpe crítico + puede quemar (Blaze Kick [Patada Ígnea])
201 = Mud Sport [Chapoteo Lodo]
202 = daño + envenena gravemente al enemigo
203 = el tipo y el daño dependen del clima (Weather Ball [Meteorobola])
204 = Reduce mucho el Ataque Especial tras ser usado (Overheat [Sofoco])
205 = Reduce el Ataque y Defensa del oponente (Tickle [Cosquillas])
206 = Aumenta la Defensa y Defensa Especial del usuario (Cosmic Power [Masa Cósmica])
207 = Puede golpear al enemigo mientras usa Fly o Bounce (Sky Uppercut [Gancho Alto])
208 = Aumenta el Ataque y Defensa del usuario (Bulk Up [Corpulencia])
209 = Alta probabilidad de golpe crítico + envenamiento
210 = Water Sport [Hidrochorro]
211 = Aumenta el Ataque Especial y la Defensa Especial del usuario (Calm Mind [Paz Mental])
212 = Aumenta el Ataque y la Velocidad del usuario (Dragon Dance [Danza Dragón])
213 = Camouflage [Camuflaje]
De acuerdo con la lista, Psicoataque usa el efecto nº 204 (el mismo que Sofoco). Ahora multiplica 204*4, que da 816.
Edit > Block > 816.

Ve al final de los bytes que has seleccionado. El pointer que está JUSTO DESPUÉS de los últimos bytes seleccionados es el que buscamos. Ésto se debe a que “0” también es un move effect. Así que el pointer del move effect de Psicoataque es 1B 84 1D 08, o la dirección 0x1D841B.
Ve a la dirección 0x1D841B

Ahora estás en el “move effect” para Psicoataque. Para saber dónde acaba la información [para el move effect] (donde acabamos de estar) y ver el pointer más cercano. Puedo ver que otro move effect tiene un pointer a 0x1D8426, así que sé que el move effect de Psicoataque va del offset 0x1D841B al 0x1D8425.

Ésta es la información para Psicoataque.
Offsets: 0x1D841B - 0x1D8425
2E 85 3E 02 02 FB 28 00 69 1D 08
Como hasta ahora, el usuario [quien usa el movimiento] se quedará con el ataque especial bajado durante dos rondas. ¡Pero queremos que la velocidad del usuario baje durante un solo turno! En este caso, lo único que necesitaremos modificar es, únicamente, un byte.

Hago notar que la mayoría de los movimientos acaban en los pointers 00 69 1D 08 (0x1D6900) o 4E 69 1D 08 (0x1D694E).

Si tu ataque, además, hace daño, usará el primero. Si no, el segundo.

Ahora, el byte que tenemos que cambiar es el que está en negrita.
2E 85 3E 02 02 FB 28 00 69 1D 08
Ese byte (FB) es el único responsable de que baje el Ataque Especial. Entonces, ¿cómo hacemos para que baje la Velocidad?

Aquí dejo una lista de lo que puedes hacer cambiando este byte. Os dejo los que funcionan el 100% de las veces. Quiero decir, que funcionan SIMEPRE. Hay más (no he probado de 00 a 0C) pero estoy seguro de que son los mismos efectos, simplemente con una inferior posibilidad de que ocurran. Sé que 01 tiene un 10% de posibilidades de dormir al oponente, 03 10% de quemarlo, etc.

C1: Te duermes (tú).
C2: Te envenenas.
C3: Te quemas.
C4: Te congelas.
C5: Te paralizas.
C6: Te envenenas gravemente.
C7: Te confundes.
C9: Congela a tu oponente.
CA: Efecto de Alboroto.
CB: Efecto de Día de Pago.
CD: Efecto de Sand Tomb [Bucle Arena].
CE: 1/4 daño por retroceso.
CF: Sube el Ataque del usuario un nivel.
D0: Sube la Defensa del usuario un nivel.
D1: Sube la Velocidad del usuario un nivel.
D2: Sube el Ataque Especial del usuario un nivel.
D3: Sube la Defensa Especial del usuario un nivel.
D4: Sube la precisión del usuario un nivel.
D5: Sube la evasión del usuario un nivel.
D6: Reduce el Ataque del usuario un nivel.
D7: Reduce la Defensa del usuario un nivel.
D8: Reduce la Velocidad del usuario un nivel.
D9: Reduce el Ataque Especial del usuario un nivel.
DA: Reduce la Defensa Especial del usuario un nivel.
DB: Reduce la precisión del usuario un nivel.
DC: Reduce la evasión del usuario un nivel.
DD: Toma una ronda para recuperarse (Hyper Beam, etc...)
DF: Efecto de Thief [Ladrón]
E2: El usuario sube todos los stats un nivel (expepto precisión y evasión).
E5: Reduce el Ataque y la Defensa del usuario un nivel.
E6: 1/3 retroceso.
E7: Sube el Ataque del usuario dos niveles.
E8: Sube la Defensa del usuario dos niveles.
E9: Sube la Velocidad del usuario dos niveles.
EA: Sube el Ataque Especial del usuario dos niveles.
EB: Sube la Defensa Especial del usuario dos niveles.
EC: Sube la precisión del usuario dos niveles.
ED: Sube la evasión del usuario dos niveles.
EE: Reduce el Ataque del usuario dos niveles.
EF: Reduce la Defensa del usuario dos niveles.
F0: Reduce la Velocidad del usuario dos niveles.
F1: Reduce el Ataque Especial del usuario dos niveles.
F2: Reduce la Defensa Especial del usuario dos niveles.
F3: Reduce la precisión del usuario dos niveles.
F4: Reduce la evasión del usuario dos niveles.
F5: Efecto de Outrage.
F6: Efecto de Knock Off.
FB: Reduce el Ataque Especial del usuario dos niveles.

De todos modos, queremos uno que SIMEPRE baje la Velocidad. Si miras, D8 SIEMPRE baja al rival la Velocidad en 1 punto. Así que el código de nuestro nuevo movimiento es:
2E 85 3E 02 02 D8 28 00 69 1D 08

¡Bien! ¡Ahora tenemos un/a Machada funcional!

Así que todo lo que tenemos que hacer es poner este código donde antes creamos el pointer en la tabla de move effects (la cual es 0x920000 en mi caso).

Ahora, en Pokemon Game Editor, simplemente cambia el move effect a 214 y ¡[el ataque] usará este efecto!
Pero, ¿qué pasa si queremos añadir múltiples efectos?
Por ejemplo, ¿Envite Ígneo?
Jambo51 dio también una solución.

Usaré su ejemplo en el hilo.

Envite Ígneo no solo causa retroceso, sino que, además, tiene posibilidades de quemar al oponente

Para esos tipos de ataques que necesitan múltiples efectos, necesitan un código diferente.

Si tu ataque provoca daño (en este caso, lo hará), empieza con este código:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00

Este es, de momento, nuestro código para Envite Ígneo. Todo lo que hace es causar daño.

Ahora, ¡debemos añadir el efecto de retroceso!

¿Os acordáis de cómo antes encontramos el efecto de Psicoataque? Pues en este caso, debemos encontrar un efecto existente para retroceso. Envite Ígneo efectúa 1/3 daño de retroceso. Hmmm… ¡Doble Filo también lo hace!

El efecto de Doble Filo (de acuerdo con la lista de Chaos Rush) es el nº 198. Así que 198*4 es 792. Así que empezando al principio de tu nueva tabla de “move effects”; Edit > Select Block > 792. El pointer tras los bytes seleccionados es el que buscamos. En este caso, es 3A 83 1D 08, o 0x1D833A.

¡Ve a esa dirección! De todos modos, antes de ir, veamos si podemos encontrar el pointer más cercano a esa ubicación, y sabemos dónde acaba Doble Filo. Justo después está el pointer a 0x1D8345, de modo que sabemos que ese último byte de Doble Filo está en 0x1D8344. ¿Lo entiendes? :)

El código de Doble Filo debería quedar algo así:
2E 85 3E 02 02 E6 28 00 69 1D 08

Ahora mismo estarás diciendo, “Hmmm… Es exactamente igual que el código que acabamos de hacer de Machada, ¡con el byte puesto como E6! Cierto. Si te fijas, E6 significa que SIEMPRE hace 1/3 de daño de retroceso. ¡Ahora cobra sentido!

Ahora añadimos eso [el nuevo código con el daño de retroceso] al código que hicimos previamente. No necesitamos el pointer al final, como sea; haremos el nuestro propio más tarde al final de nuestro propio movimiento. De modo que podemos deshacernos del 28 00 69 1D 08 (En este caso, 28 quiere decir “goto” [“ir a”, si se trata de un script, consiste en trasladarse a otro pointer en el que continúa el código] de modo que tampoco lo necesitaremos).

Ahora mismo, el código de Envite Ígneo debería lucir algo así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6

Ahora, simplemente añadimos un “15” tras de él. El 15 es usado para ejecutar este efecto, en este caso para ejecutar el daño por retroceso.

Ahora nuestro código debería ser algo así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15

¡Ahora necesitaremos la posibilidad de quemar! Aquí llegan las buenas noticias: es mucho más sencillo de hacer. Cambiando nuestro byte especial a 03 hace que haya un 10% de posibilidades de quemar. ASÍ QUE, podemos tomar el código del retroceso y cambiar ese byte que todos desesperadamente amamos [?] a 03.
2E 85 3E 02 02 03 28 00 69 1D 08

Ahora podemos añadir ese código al que teníamos hecho de antes de Envite Ígneo. Una vez más, eliminaremos el 28 00 69 1D 08 y añadiremos un 15 al final.

Aquí como debería quedar:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15

Y, finalmente, una vez has terminado de añadir tu ataque, añade el comando “goto” (28) y la dirección 0x1D6947, o 47 69 1D 08.

El código final quedaría así:
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15 28 47 69 1D 08

¡Ya tienes un funcional Envite Ígneo!

Una nota: ¡Todos los efectos que tenga una probabilidad de quemar y hacer retroceder, deben compartir la misma probabilidad de ocurrir! (Por limitaciones del juego). ES MÁS, no lo hagas pues hay una posibilidad de que los “allignments” de ambos estados ocurran al mismo tiempo: ¡no funcionará!
Para movimientos más complejos, se debe “diseccionar” y experimentar para crearlos. El código de Machada es mío, mientras que Envite Ígneo es de Jambo. Aquí os dejo alguno más. Si has logrado exitosamente hacer funcionar un “move effect”, por favor, házmelo saber y lo añadiré al post [puedo decir lo mismo por mi parte].
00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 4F 81 47 69 1D 08 50 01 F2 7D 1D 08 E2 01 3A 51 01 02 58 01 4C 01 4D 01 73 01 10 03 00 4E 01 01 3A 52 01 28 4E 69 1D 08 28 47 69 1D 08

1D 00 00 00 00 01 00 69 1D 08 2E 85 3E 02 02 A3 1C 00 07 00 00 00 77 04 90 08 28 00 69 1D 08 2E D2 3F 02 02 02 28 00 69 1D 08

2E 85 3E 02 02 D8 28 00 69 1D 08

00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 E6 15 2E 85 3E 02 02 03 15 28 47 69 1D 08

00 02 03 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 07 00 00 00 B0 69 1D 08 84 CC 69 1D 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 52 15 2E 85 3E 02 02 53 15 2E 85 3E 02 02 51 15 28 47 69 1D 08

00 02 03 1D 00 00 00 00 01 F2 7D 1D 08 1C 00 07 00 00 00 B0 69 1D 08 84 CC 69 1D 08 1C 00 FF 00 00 00 F2 7D 1D 08 01 F2 7D 1D 08 00 00 1F 00 20 00 39 8B 1D 08 09 0A 2E 85 3E 02 02 CF 15 2E 85 3E 02 02 D0 15 2E 85 3E 02 02 D4 15 28 47 69 1D 08

00 01 5E 69 1D 08 00 00 02 03 04 05 06 07 09 0A 0E 5C 00 3A 0B 00 0C 00 0D 12 40 00 0F 12 40 00 2E 85 3E 02 02 D7 15 2E 85 3E 02 02 DA 15 28 47 69 1D 08

Note: esta guía no muestra cómo asignar diferentes animaciones más que las añadidas. Pronto lo añadiré, en cuanto descubra cómo hacerlo. ;)
EDIT: Echa un vistazo a este hilo para hacer animaciones personalizadas, de Chaos Rush: http://www.pokecommunity.com/showthread.php?t=281520

EDIT 2: Todo el mundo lo hace. Actualiza el archivo .ini de PGE [Pokemon Game Editor] (Abre PGE, ve a Help > Update > ROM ini file). Entonces, ve a donde estuvimos cambiando los pointers para la info. de los ataques y debería haber un nuevo pointer al final que dice: “AttackAnimationPointer”. Cámbialo a la nueva dirección para las animaciones de los ataques (el original es 0x1C68F4, en mis ejemplos lo puse en 0x90336C).
El post está genial, me ha servido para empezar a añadir nuevos ataques a Fire Red, cosa que no me animaba a hacer. Probé el efecto de Danza Aleteo y no funciona, después intenté recrearlo yo mismo pero con poco éxito.

¿Cómo hago para que un efecto que incrementaba solo una estadística, incremente dos? ¿Y con tres?
 

Versekr Dark

Usuario mítico
El post está genial, me ha servido para empezar a añadir nuevos ataques a Fire Red, cosa que no me animaba a hacer. Probé el efecto de Danza Aleteo y no funciona, después intenté recrearlo yo mismo pero con poco éxito.

¿Cómo hago para que un efecto que incrementaba solo una estadística, incremente dos? ¿Y con tres?
#dynamic 0x800000
#freespacebyte 0xFF

#org @pickmove
jumpifhalfword 0x0 0x2023D4A 0x19F @quiverdance
jumpifhalfword 0x0 0x2023D4A 0x??? @geomancy
goto 0x1D8583

#org @quiverdance
attackcanceler
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x4 0xC @spattack
jumpifstat BANK_USER 0x3 0x5 0xC @spattack
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @spattack
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x38 0x0
setbyte 0x2023FDE 0x14
statbuffchange 0x1 true @spdefense
jumpifbyte 0x0 0x2023E87 0x2 @spdefense
printfromtable 0x83FE57C
waitmessage 0x40

#org @spdefense
setbyte 0x2023FDE 0x15
statbuffchange 0x1 true @speed
jumpifbyte 0x0 0x2023E87 0x2 @speed
printfromtable 0x83FE57C
waitmessage 0x40

#org @speed
setbyte 0x2023FDE 0x13
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E

#org @geomancy
jumpifsecondarystatus BANK_USER 0x1000 @turn2
jumpifword B_& 0x2023DD0 0x200 @turn2
call @geomancymessage
goto 0x81D694E

#org @geomancymessage
attackcanceler
printstring 0x130
ppreduce
attackanimation
waitanimation
orword 0x2023DD0 0x8000000
setbyte 0x2023E85 0x4C
seteffecttarget
copyarray 0x2023E87 0x2023FD3 0x1
setword 0x203C020 0x8DDDDDD
printstring 0x184
waitmessage DELAY_1SECOND
return

#org @turn2
attackcanceler
setbyte 0x2023E85 0xC
setbyte 0x2023FDC 0x1
clearstatus BANK_USER
orword 0x2023DD0 0x800
attackstring
ppreduce
jumpifstat BANK_USER 0x3 0x4 0xC @spattack2
jumpifstat BANK_USER 0x3 0x5 0xC @spattack2
jumpifstat BANK_USER B_= 0x3 0xC 0x81D85E7

#org @spattack2
attackanimation
waitanimation
setbyte 0x2023FDF 0x0
playstatchangeanimation 0x0 0x38 0x0
setbyte 0x2023FDE 0x24
statbuffchange 0x1 true @spdefense2
jumpifbyte 0x0 0x2023E87 0x2 @spdefense2
printfromtable 0x83FE57C
waitmessage 0x40

#org @spdefense2
setbyte 0x2023FDE 0x25
statbuffchange 0x1 true @speed2
jumpifbyte 0x0 0x2023E87 0x2 @speed2
printfromtable 0x83FE57C
waitmessage 0x40

#org @speed2
setbyte 0x2023FDE 0x23
statbuffchange 0x1 true 0x81D85E2
jumpifbyte 0x0 0x2023E87 0x2 0x81D85E2
printfromtable 0x83FE57C
waitmessage 0x40
goto 0x1D694E
At DDDDDD place the following hex:
FD 0F 00 DD E7 00 D5 D6 E7 E3 E6 D6 DD E2 DB 00 E4 E3 EB D9 E6 AB
 

Abaddon

Profesional de WaH
Hace años buscaba como hacer la expansión del move effect, soy un wahero mas gráfico, los post que vi acá en el foro siempre concurrían a otros sitios, por lo que preferí no indagar más. Como tu dices muchos post no son tutoriales para, si no mas bien buscan compartir información que facilita a las personas con conocimiento, pero veo que hiciste un gran trabajo de explicarlo a tu modo. Se que es tarde pero agradezco tu aporte, ahora que pienso retomar si es que me da el tiempo T.T, veo una posibilidad de retomar algunas ideas pasadas para concretar. Muchas Gracias
 
Arriba