Registrarse

[Oficial] Tema de Investigaciones para ROMs Españolas

.Areku_Sama

Old school ROM-Hacker EST. 2006
Esto es oro puro:
Saltar el intro del Profesor Abedul/Birch En Pokemon Esmeralda [BPES]

ir al OFFSET 0x308AC Y reemplazar los siguientes bytes:
B1 08 03 08

Por estos otros:
31 16 03 08

El intro no se logra saltar del todo. Aún aparece un segundo del intro del Profesor Abedul, pero silenciando el sonido del intro y cambiando las paletas verdes del fondo a negra. Es como si no hubiese nada.

Créditos a Le-Pug y a Touched.
Post original:

https://www.pokecommunity.com/showpost.php?p=8444249&postcount=590
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Bueno paso por aquí dejando mi granito de arena como había prometido :D

ROJO FUEGO

Pos. Y = 0x054AF4
Banco = 0x054AF8
Mapa = 0x054AFA
Pos. X = 0x054AFC

0x079226 - Número del Pokémon

0x046216 - Cambiar 05 a 01
0x046C96 - Cambiar 05 a 01
0x054A60 - Cambiar 08 40 a 01 20
0x054A90 - Cambiar 08 40 a 01 20
0x137778 - Cambiar 05 01



- Objeto en la PC = 0x3FCB9C Codificado de la misma manera que en el PokeMart. Ejemplo: MasterBall=01, PokéBall=02, etc.
- Cantidad de Objeto = 0x3FCB9C en Hex
- Dinero Inicial = 0x054C54 Se pasa a Hex y se escribe permutado desde 0x054C54 hasta 0x054C56.
Ejemplo: 100.000 = 0x0186A0 => A0 86 01
0x111131 - Cambiar 28 a 01
0x111133 - Cambiar D0 a E0



0x0440C2 - Cambiar 01 a 00
0x125C24 - Cambiar 01 a 00



NOTA: Son las opciones con las cuales se comienza en un JUEGO NUEVO

IMAGEN Y VELOC. TEXTO Cambiar el valor por la combinación deseada en 0x054A60.

IMAGEN = TIPO 1, y VELOC. TEXTO
LENTA = 00, MEDIA = 01, RÁPIDA = 02

IMAGEN = TIPO 2, y VELOC. TEXTO
LENTA = 08, MEDIA = 09, RÁPIDA = 0A

IMAGEN = TIPO 3, y VELOC. TEXTO
LENTA = 10, MEDIA = 11, RÁPIDA = 12

IMAGEN = TIPO 4, y VELOC. TEXTO
LENTA = 18, MEDIA = 19, RÁPIDA = 1A

IMAGEN = TIPO 5, y VELOC. TEXTO
LENTA = 20, MEDIA = 21, RÁPIDA = 22

IMAGEN = TIPO 6, y VELOC. TEXTO
LENTA = 28, MEDIA = 29, RÁPIDA = 2A

IMAGEN = TIPO 7, y VELOC. TEXTO
LENTA = 30, MEDIA = 31, RÁPIDA = 32

IMAGEN = TIPO 8, y VELOC. TEXTO
LENTA = 38, MEDIA = 39, RÁPIDA = 3A

IMAGEN = TIPO 9, y VELOC. TEXTO
LENTA = 40, MEDIA = 41, RÁPIDA = 42

IMAGEN = TIPO 10, y VELOC. TEXTO
LENTA = 48, MEDIA = 49, RÁPIDA = 4A

IMAGEN = TIPO 11, y VELOC. TEXTO
LENTA = 50, MEDIA = 51, RÁPIDA = 52

IMAGEN = TIPO 12, y VELOC. TEXTO
LENTA = 58, MEDIA = 59, RÁPIDA = 5A

IMAGEN = TIPO 13, y VELOC. TEXTO
LENTA = 60, MEDIA = 61, RÁPIDA = 62

IMAGEN = TIPO 14, y VELOC. TEXTO
LENTA = 68, MEDIA = 69, RÁPIDA = 6A

IMAGEN = TIPO 15, y VELOC. TEXTO
LENTA = 70, MEDIA = 71, RÁPIDA = 72

IMAGEN = TIPO 16, y VELOC. TEXTO
LENTA = 78, MEDIA = 79, RÁPIDA = 7A

IMAGEN = TIPO 17, y VELOC. TEXTO
LENTA = 80, MEDIA = 81, RÁPIDA = 82

IMAGEN = TIPO 18, y VELOC. TEXTO
LENTA = 88, MEDIA = 89, RÁPIDA = 8A

IMAGEN = TIPO 19, y VELOC. TEXTO
LENTA = 90, MEDIA = 91, RÁPIDA = 92

IMAGEN = TIPO 20, y VELOC. TEXTO
LENTA = 98, MEDIA = 99, RÁPIDA = 9A

ANIM. COMBATE = SÍ, TIPO DE COMBATE = CAMBIO, SONIDO = MONO
0X054A90 = 00
ANIM. COMBATE = SÍ, TIPO DE COMBATE = CAMBIO, SONIDO = ESTÉREO
0X054A90 = 01
ANIM. COMBATE = SÍ, TIPO DE COMBATE = MANTENER, SONIDO = MONO
0X054A90 = 02
ANIM. COMBATE = SÍ, TIPO DE COMBATE = MANTENER, SONIDO = ESTÉREO
0X054A90 = 03
ANIM. COMBATE = NO, TIPO DE COMBATE = CAMBIO, SONIDO = MONO
0X054A90 = 04
ANIM. COMBATE = NO, TIPO DE COMBATE = CAMBIO, SONIDO = ESTÉREO
0X054A90 = 05
ANIM. COMBATE = NO, TIPO DE COMBATE = MANTENER, SONIDO = MONO
0X054A90 = 06
ANIM. COMBATE = NO, TIPO DE COMBATE = MANTENER, SONIDO = ESTÉREO
0X054A90 = 07

- CONTROLES Cambiar el valor de 0x054A96 de acuerdo a la función deseada.
AYUDA = 00, LR = 01, L=A = 02

Créditos:
- Hex Helper Double OH de Joexv
- GBA Intro Manager de Diegoisawesome
 

Bugrhak

A long time ago I used to call myself "Subzero".
*RF|Quitar mensajes de Oak en batalla



Esto lo que hace básicamente es quitar los mensajes de Oak en batalla (trainerbattle de tipo 0x9), dichos mensajes son los que aparecen en la primera batalla que disputa el protagonista en RojoFuego donde Oak cuenta lo básico que se debe hacer al luchar, etc.


Procedimiento:


1)-
En un editor hexadecimal ve a la dirección 0x0804B4.

2)- Una vez ahí,reemplaza (su usas HxD, hazlo con "CTRL+B" para pegar escribiendo):


Código:
20 68 10 21 08 43 20 60
Por:

Código:
00 00 00 00 00 00 00 00
Eso es todo lo que hay que hacer.


♠Un saludo!♠
 
Última edición:

Bugrhak

A long time ago I used to call myself "Subzero".
RF - Puntos de cura y posiciones de vuelo.
Hola XD
He estado hasta el "cogote" de tarea, y hasta ahora solo he podido localizar los offsets de los puntos de cura y vuelo. Aún me falta localizar los offsets de ruby y esmeralda (ésto habría sido más fácil y rápido si hubiese utilizado la herramienta de javi, pero como estoy en linux, no puedo).

Offset de los puntos de cura: 0x3E8F88
Offset de los puntos de vuelo: 0x3E8EE0

Sólo falta detallar ambas tablas, y demás aspectos, pero en sí, solo con ver la tabla, es fácil de entender.

*Posteo esto "incompleto" para que al que le de curiosidad, valla y lo mire, así me evito explicarlo yo(?) así aprende algo, y no tiene todo masticadito (?). Posiblemente, mañana tenga todo completo.*

♠Un saludo!♠
 

Bugrhak

A long time ago I used to call myself "Subzero".
Hola!
El otro día estaba aburrido, así que me puse portar algunas rutinas para Rojo Fuego. Espero que alguien las use :/


*Define los puntos de cura a los mapas que quieras*


Esta rutina pertenece al apartado de rutinas dispuestas por el engine de jpan, así que hay que darle sus merecidos créditos. Y a mi un pequeño agradecimiento por haber portado la rutina a la rom española :V jaja

Este método está diseñado para determinar en qué mapa apareces tras perder un combate. Resalto el hecho de que al implementar este sistema, el anterior queda "inutilizado".

Lo primero será insertar una rutina. La rutina a insertar opera mediante tres variables que por defecto son la 0x405A, 0x405B 0x405C, si por algún motivo no quieres usar esas, y te apetece usar otra diferente, cambia las partes en color rojo en la rutina (si cambias las variables, estas no deben ser dinámicas [0x8000-0x800F]).

Para no perder tiempo compilando la rutina, la dejo ya lista XD:

0B 48 AE F7 D7 FA 01 06 00 0A 09 0E 21 70 60 70 FF 20 A0 70 07 48 AE F7 CD FA 00 04 00 0C A0 80 05 48 AE F7 C7 FA 00 04 00 0C E0 80 38 E0 00 00 5A 40 00 00 5B 40 00 00 5C 40 00 00
Nota: Si cambias las variables, ten en cuenta que en la rutina aparecen como si estuvieran "permutadas", por ejemplo la variable 0x405A, queda 5A40.

La rutina debes insertarla (si usas HXD, con CTRL+B o sea, "pegar escribiendo") en la dirección 0xBFFEC. Si, tan simple como eso, no hay que hacer mas nada, la rutina queda felizmente implementada y en funcionamiento.

Dejando la rutina un poco de lado, hablemos del método de uso:


Hay que crear un script de nivel de tipo 03 en todos los mapas donde se ejecute una batalla, tan simple como eso.

Ejemplo facultativo:

Código:
#dynamic 0x800000
#org [MENTION=15825]Rojo[/MENTION]Fuego

sethalingplace 0x'el parámetro ha de ser 0x1 ó 0x0. Si el parámetro es 0x0, se carga el script de cura de un centro pokémon. Y si es 0x1, se carga el script de cura de la casa del prota.
setvar 0x405A 0xMMBB 'El valor de la variable determina tanto el mapa, como el banco de mapa. Donde en el primer byte de la variable (0x[B]MM[/B]BB, se pone el número de mapa, y en el segundo byte [0xMM[B]BB[/B], el del banco.
setvar 0x405B 0x'Posición en "X" dentro del mapa.
setvar 0x405c 0x'Posición en "Y" dentro del mapa.
end 'No need for explanation.

También, si se quiere un poco más de "personalización y profesionalidad", se puede crear un script en el que se cure a los pokémons (mediante el special 0x0) obviamente, pero además, añadiéndole al script una comparación del valor de la variable 0x405A para determinar lo que suceda según el mapa en el que aparezcamos una vez perdida una batalla.

Eso ha de ser así ya que solo disponemos de dos scripts de cura. Si!, los que mencioné que se determinan su ejecución mediante el sethealingplace.

Dichos scripts son llamados desde la dirección 07F604 (el que nos cura los pokémon en el CP tras haber perdido una batalla), y 07F624 (el de cuando los pokémons son curados en la casa del prota por su madre).

Allí, hay que poner los punteros hacia la dirección de los respectivos scripts.



*Escribe el nombre del protagonista*



Sencillo, esta rutina sirva para cambiarle el nombre al protagonista, o darle uno si es que no tiene.
A diferencia de la rutina original que trae el juego, en la que tras darle nombre al jugador, el script terminaba abriendo también el menú, con esta rutina no ocurre eso.


============
¿Qué hacer?
============


Compila esta rutina ASM e insértala en un lugar con suficiente espacio libre en tu rom:

Código:
push {r4, lr}
sub sp, sp, #0x8
ldr r0, =0x3004F5C
ldr r1, [r0]
ldrb r2, [r1, #8]
mov r3, #0x0
ldr r0, =0x80569B9
str r0, [sp, #4]
mov r0, #0
str r0, [sp]
ldr r4, =0x809DB0D
bl bx_r4
add sp, sp, #0x8
pop {r4, pc}

bx_r4: bx r4

O bien, inserta la rutina ya compilada:

Código:
10 B5 82 B0 06 48 01 68 0A 7A 00 23 05 48 01 90 00 20 00 90 04 4C 00 F0 02 F8 02 B0 10 BD 20 47 5C 4F 00 03 B9 69 05 08 0D DB 09 08

=============
Modo de uso:
=============



Código:
#dynamic 0x800000
#org [MENTION=15825]Rojo[/MENTION]Fuego
[bla bla bla]
callASM 0x'offset donde insertaste la rutina +1
waitstate 'espera a que la rutina se ejecute correctamente. Si no se pone este comando, el script termina luego de que le pongas un nombre al jugador.
[bla bla bla]
end

*Cambia el género (sexo) del protagonista*

Esta rutina la hizo Javi, y para ahorrarme la descripción, cito lo que el ha dicho XD.

Javi4315♪ dijo:
Esta rutina te permite cambiar del personaje masculino al personaje femenino. Si la elección de un personaje es forzada, luego tienes la opción de tener un segundo personaje con su propio mini, sprite y backsprite. Eso o lo que se te ocurra.

El funcionamiento es muy sencillo. Simplemente tienes que guardar en la variable 0x8000 el valor 0x0 (para convertirte en chico) o 0x1 (para convertirte en chica). Luego, simplemente, ejecuta la rutina.

La rutina es la siguiente:

Código:
.align 2
.thumb

push {r0-r1,lr}
ldr r0, .data
ldr r1, [r0]
mov r0, #0x0
ldr r0, .var_8000
ldrb r0, [r0]
strb r0, [r1,#0x8]
pop {r0-r1,pc}

.data: .word 0x3004F5C    
.var_8000: .word 0x020370B8
Compilada:

Código:
03 B5 03 48 01 68 00 20 02 48 00 78 08 72 03 BD 5C 4F 00 03 B8 70 03 02


♠Un saludo!♠
 
Última edición:

Bugrhak

A long time ago I used to call myself "Subzero".
Hola a todos, Hoy vengo a aportar un poco más para Rubí y Esmeralda que son las roms para las que he aportado menos, y en general en este tema hay menos aportes dedicados a estas roms.

¡Empecemos con algo rápido!



E-R|Quitar "intro" del camión

*Créditos a Diegoisawesome (por los datos de las rom inglesas que recopilé de su herramienta) y a mi por haberlos buscado para la rom española*

Esto sirve para quitar la "sacudida" y el ruido a motor de cuando iniciamos una nueva partida.
Recordar que si no hacéis esto, por más que cambiéis el mapa en el que se inicia el juego, aparecerá tanto el sonido del
camión como la sacudida.

Ir a las direcciones correspondientes según el rom, y a partir de ellas escribir los bytes que aparecen a continuación.

Esmeralda

Offset: 030872
Reemplazar BB 20 40 00 por 77 20 FF 30

Offset: 0FB154
Reemplazar 85 AF 0F 08 por 11 60 08 08


Rubí

Offset: 00A46A
Reemplazar BB 20 40 00 por 77 20 FF 30

Offset: 00A6D2
Reemplazar AF 20 40 00 por 5F 20 FF 30

Offset: 00B452
Reemplazar AF 24 64 00 por 5F 24 FF 34

Offset: 0C79C8
Reemplazar F9 77 0C 08 por 49 49 05 08




R|Cambiar el nombre del protagonista


Esto es muy sencillo de lograr, para ello, simplemente haremos una serie de WBTOs. 8, para ser exactos:

Código:
writebytetooffset 0x[LETRA] 0x2024EA4
writebytetooffset 0x[LETRA] 0x2024EA5
writebytetooffset 0x[LETRA] 0x2024EA6
writebytetooffset 0x[LETRA] 0x2024EA7
writebytetooffset 0x[LETRA] 0x2024EA8
writebytetooffset 0x[LETRA] 0x2024EA9
writebytetooffset 0x[LETRA] 0x2024EAA
writebytetooffset 0xFF 0x2024EAB

Donde "[LETRA]" en cada caso sería el valor hexadecimal correspondiente a la letra que queramos poner.
Si el nombre que se ponga ahí usa menos de 7 letras, en las que queden hay que poner FF.
Así de simple!




R|Establecer el género (sexo) del protagonista


Esto también se consigue sin problemas usando WBTO;

Código:
writebytetooffset 0x[GENERO] 0x2024EAC
Donde "[GENERO]" sería el valor correspondiente al genero a cambiar; 0 para chico y 1 para chica.
Para hay que refrescar la pantalla mediante un warp para que se apliquen los cambios.




R|Datos para añadir más comandos o editar los que vienen en el juego.

Esto es investigación 100% mia, y di con ella cuando investigaba la dirección de la ram donde se guarda el nombre del prota, para lo del apartado de mas arriba XD.

La tabla de comandos está a partir del offset 0x14B328 y ocupa una dimensión de 0x31C bytes (En DEC; 796) o sea que va hasta el offset 14B643. Para añadir más comandos copiad y pegad la tabla en una dirección con suficiente espacio libre en buestra rom.
Luego buscad la siguiente estructura de bytes que corresponden:

28 B3 14 08 40 B6 14 08

Como ven, son dos punteros. El primero sería el de donde empieza la tabla, y el segundo, es un puntero (*atención que puede marear eh!*) al ultimo puntero que está en la tabla de comandos (además, este puntero tiene la función de "limitador" para que haya una cantidad específica de comandos). Con esto que os acabo de decir, si repuntean la tabla, supongo que ya saben lo que hay que hacer!

¿Y como hago para saber cual es cual?​

Si recordarán, en XSE al presionar "F1" aparece una mini ayuda que explica cuantos parámetros tiene cada comando y bla bla bla...


De esa imágen interesa lo que está encerrado en rojo, donde ese numero equivale a la posición del comando detro de la tabla de comandos.

Para que se entienda mejor, les hago un ejemplo:

Yo buscaré en la tabla el puntero del comando checkgendel.
Así que sabiendo que la tabla empieza en 0x14B328, que es un puntero por comando (un puntero =4 bytes) y que el checgender es el comando A0 en la tabla, hago lo siguiente:

0xA0 * 0x4 = 0x280. y ahora, 0x14B328 + 0x280= 0x14B5A8.

Así que el el puntero a la rutina del comando checkgender está en 0x14B5A8. :D

Ahora os toca hacer vuestra magia con ASM ;)


RF|Editar las opciones del menú principal


He aquí todo lo que necesitaréis para crear funciones "personalizadas" para el menú. Si, hablo del menú que se despliega cuando pulsamos "START",
donde salen opciones como la de guardar la partida, etc.
Kaiser de Emperana hizo un tutorial
(ESTE) que explica todo detalladamente. Me basaré en su tuto para llevar a cabo esto.




Primero, hay que crear un script en el cual ira lo que queramos que se ejecute cada vez que seleccionemos la opción del menú.

Ahora hay que editar los datos en rojo de la siguiente rutina por los datos que os dejo más abajo:

En YYYYYY, ponen este offset:
Rojo Fuego: 069BA8
Esmeralda:
Ruby:

En ZZZZZZ, ponen este offset:
Rojo Fuego: 06F579
Esmeralda:
Ruby:


Y en XXXXXX ponen el offset del Script que quieren que se ejecute.


Código:
.align 2
.thumb

Main:
	push {r0,lr}
	bl CERRAR_MENU
	bl RUTINASONICARVALHO
	pop {r0,pc}

CERRAR_MENU:
	ldr r0, RUTINA_EXIT
	bx r0

RUTINASONICARVALHO:
	push {lr}
	ldr r0, SCRIPT_ADRESS
	bl SCRIPT_ROUTINE
	pop {pc}

SCRIPT_ROUTINE:
	ldr r1, SCRIPT_EXECUTER
	bx r1

.align 2

RUTINA_EXIT:
	.word 0x08[COLOR="RED"]YYYYYY[/COLOR]
SCRIPT_ADRESS: 
	.word 0x08[COLOR="RED"]XXXXXX[/COLOR]
SCRIPT_EXECUTER: 
	.word 0x08[COLOR="RED"]ZZZZZZ[/COLOR]




Una vez compilada e insertada la rutina en el rom, hay que ir al offset del puntero que llama a la rutina que vamos a
reemplazar, y escribimos allí el offset permutado +1 hacia la rutina que acabamos de insertar.
No olvides cambiar tanto el nombre de la opción, como su descripción para que sea acorde a la nueva función que le acabas de dar.


Aquí todos los datos restantes que son de importancia según el rom en que se esté trabajando.


Descripción de la opción "POKÉDEX":

Offset del texto: 0x414782
Puntero al texto: 0x3A2A84


Descripción de la opción "POKÉMON":[/FONT]

Offset del texto: 0x4147C9
Puntero al texto: 0x3A2A88


Descripción de la opción "MOCHILA":

Offset del texto: 0x41480A
Puntero al texto: 0x3A2A8C


Descripción de la opción "[PLAYER]":

Offset del texto: 0x41484E
Puntero al texto: 0x3A2A90 y 0x3A2AA4


Descripción de la opción "GUARDAR":

Offset del texto: 0x414896
Puntero al texto: 0x3A2A94


Descripción de la opción "OPCIONES":

Offset del texto: 0x4148E2
Puntero al texto: 0x3A2A98


Descripción de la opción "SALIR"

Offset del texto: 0x414930
Puntero al texto: 0x3A2A9C


Descripción de la opción "RETIR."

Offset del texto: 0x414962
Puntero al texto: 0x3A2AA0


Esta parte está dispuesta de la siguiente forma; [Puntero a nombre de la opción][Puntero a la rutina de la función en
si][Puntero a nombre de la opción][Puntero a la rutina de la función en si], la secuencia se sucede hasta llegar a la ultima
opción, o sea, "SALIR".
Pero para que no se mareen, dejo todo ya masticadito y por separado porque se lo noobs que son (?)XDDDDDD.


POKÉDEX:

Offset del texto: 0x4109FF
Puntero al texto: 0x3A2A34


POKÉMON:

Offset del texto: 0x4101A8
Puntero al texto: 0x3A2A3C


MOCHILA:

Offset del texto: 0x410A07
Puntero al texto: 0x3A2A44


[PLAYER]:

Offset del texto: 0x410A14
Puntero al texto: 0x3A2A4C


GUARDAR:

Offset del texto: 0x410A17
Puntero al texto: 0x3A2A54


OPCIONES:

Offset del texto: 0x410A1F
Puntero al texto: 0x3A2A5C


SALIR:

Offset del texto: 0x410A28
Puntero al texto: 0x3A2A64


RETIR.:

Offset del texto: 0x410A2E
Puntero al texto: 0x3A2A6C


POKÉDEX:

Offset a la rutina: 0x06F449
Puntero a la rutina: 0x3A2A38


POKÉMON:

Offset a la rutina: 0x06F485
Puntero a la rutina: 0x3A2A40


MOCHILA:

Offset a la rutina: 0x06F4B9
Puntero a la rutina: 0x3A2A48


[PLAYER]:

Offset a la rutina: 0x06F4ED
Puntero a la rutina: 0x3A2A50


GUARDAR:

Offset a la rutina: 0x06F521
Puntero a la rutina: 0x3A2A58


OPCIONES:

Offset a la rutina: 0x06F535
Puntero a la rutina: 0x3A2A60


SALIR:

Offset a la rutina: 0x06F579
Puntero a la rutina: 0x3A2A6A


RETIR.:

Offset a la rutina: 0x06F58D
Puntero a la rutina: 0x3A2A70

Por ahora eso es todo, luego traeré la documentación para cambiar las opciones en Rubí y Esmeralda.

♠Un saludo!♠
 
Última edición:

Bugrhak

A long time ago I used to call myself "Subzero".
¡Hola waheros! Con ánimos de revivir un poco este tema, hoy os traigo un puñadito de cosas para Rojo Fuego. :T




ASM | Precios de objetos de la tienda ajustados por porcentaje



Los créditos por esta maravilla van para FBI, quien hizo la rutina, yo solo la hice funcional en la rom de nuestro idioma, aunque no está demás agradecer XDD.

La rutina que verán a continuación, nos permite ajustar mediante un porcentaje, los precios de los objetos de la tienda.
Dicho porcentaje puede ser tanto de aumento, como de disminución del precio.
El porcentaje es "global", es decir, afecta a todos los objetos. Por si no has pillado esto ultimo, significa que si se pone
un aumento porcentual del 50%, todos los objetos van a estar 50% más caros que su valor habitual.



Compila e inserta la rutina en un lugar con suficiente espacio vacío en tu rom:


================
Pasos a seguir
================

Código:
.text
.align 2
.thumb
.thumb_func

start:
	add r0, r0, r4
	ldrh r0, [r0, #0x10]
	mov r4, r0
	push {r2-r3}
	mov r0, #0x98
	lsl r0, r0, #0x2
	ldr r2, =(0x806E708 +1)
	bl linker
	cmp r0, #0x0
	beq noChange
	
calculateNewPrice:
	ldr r1, =(0x20370B8)
	ldrh r1, [r1]
	mov r0, r4
	mul r0, r0, r1
	mov r1, #0x64
	ldr r2, =(0x81E379c +1)
	bl linker
	mov r1, r4

checkModification:
	ldr r2, =(0x20370BA)
	ldrb r2, [r2]
	cmp r2, #0x0
	bne decreasePrice
	add r0, r0, r1
	b end
	
noChange:
	mov r0, r4
	b end
	
decreasePrice:
	sub r0, r1, r0
	
end:
	pop {r2-r3}
	pop {r4}
	pop {r1}
	bx r1
	
linker:
	bx r2
	
.align 2

Ahora dirígete a la dirección 0x09AACC y escribe estos bytes:

Código:
00 49 08 47 PP PP PP 08
PP PP PP = Offset permutado de donde insertaste la rutina +1.




=============
Modo de uso
=============


La flag 0x260 determina si el sistema está en funcionamiento o no.
Sabiendo eso, si la flag está activada, podemos hacer que los precios oscilen en base al porcentaje establecido.


La variable 0x8000 dicta si el porcentaje es de aumento o disminución del precio.
Cuando el valor de la variable está a 0x0, es interpretado como un incremento en el porcentaje. Cualquier valor distinto de
0x0, es interpretado como decrecimiento porcentual (porcentaje a favor de la disminución del precio).


La variable 0x8001 es el porcentaje.
Si queremos poner 50% de aumento, pues ponemos 0x32 (0x32= 50 en numeración decimal).
Donde 50% es 0,5. 0,5 multiplicado por 100; 50. No voy a explicar como calcular porcentajes, ya deberían de saber hacerlo.
XDDDDDDDDDDDD



Y por si a caso, un script de ejemplo:


Código:
#dynamic 0x800000

#org @start
special 0x187
compare LASTRESULT 0x2
if 0x1 goto @snippet1
lock
faceplayer
preparemsg   [MENTION=29127]String[/MENTION]1 '"¡Hola! ¿Puedo ayudarte en algo?"
waitmsg
[b]setflag 0x260		  //Activa el sistema de porcentaje[/b]
[b]setvar 0x8000 0x1	 //El porcentaje es de disminución del precio[/b]
[b]setvar 0x8001 0x50	//Disminución de un 50%[/b]
pokemart  [MENTION=39694]Mar[/MENTION]t1
[b]clearflag 0x260	      //Desactiva el sistema[/b]
msgbox   [MENTION=29127]String[/MENTION]2 MSG_KEEPOPEN '"¡Vuelve cuando quieras!"
release
end

'---------------
#org @snippet1
release
end


'---------
' Strings
'---------
#org   [MENTION=29127]String[/MENTION]1
= ¡Hola! ¿Puedo ayudarte en algo?

#org   [MENTION=29127]String[/MENTION]2
= ¡Vuelve cuando quieras!


'-----------
' MartItems
'-----------
#org  [MENTION=39694]Mar[/MENTION]t1
#raw word 0x4
#raw word 0xD
#raw word 0xE
#raw word 0x12
#raw word 0x11
#raw word 0xF
#raw word 0x55
#raw word 0x56
#raw word 0x0



ASM | Showpokepic Pro


Es que las rutinas de JaviSenseiNumeritos me encantan XDDD
Ya sabéis para quien van los créditos, Javi4315♪ ;)

Con este recurso, podremos optar por mostrar o no la “caja” que aparece cuando mostramos el sprite de un pokémon con este comando (showpokepic).



Primero, compila la siguiente rutina e insertala en un lugar con suficiente espacio libre en tu rom.
¡MUY IMPORTANTE, ANOTA EL OFFSET DE DONDE LA INSERTASTE!

Código:
.align 2
.thumb

push {lr}
lsl r0, r0, #0x18
lsr r0, r0, #0x18
lsl r1, r1, #0x18
lsr r1, r1, #0x18
mov r2, #0x85
lsl r2, r2, #0x2
mov r3, #0xE
ldr r6, =0x810F499
bl call
pop {r0}
bx r0

call:
bx r6
Para los vagos, aquí la rutina ya compilada

Código:
00 B5 00 06 00 0E 09 06 09 0E 85 22 92 00 0E 23 02 4E 00 F0 02 F8 01 BC 00 47 30 47 99 F4 10 08

Ahora, compila e inserta esta rutina.
Debes editar la parte de la rutina donde aparece 0x08FFFFFF. Allí, donde pone FFFFFF, escribe en su lugar el offset de donde insertaste la primera rutina +1.


No olvides anotar también el offset de donde insertaste esta rutina.

Código:
.align 2
.thumb

ldr r6, =0x020370B8
ldrb r6, [r6]
cmp r6, #0x1
beq end
ldr r6, =0x08FFFFFF
bx r6

end:
push {lr}
pop {r0}
bx r0


Ahora ve al offset 0F7ACC

Y escribe los siguientes bytes:

Código:
00 4E 30 47 XX XX XX 08
Donde XX XX XX es el offset permutado +1 de donde insertaste la segunda rutina.


Eso es todo.

El modo de uso es simple; cuando la variable 0x8000 tenga el valor 0x1, la caja no se “dibuja”. En cambio, si el valor de la variable es distinto de 0x1, la caja si se dibuja.

Por las dudas, un script facultativo:

Código:
setvar 0x8000 0x1	'para que no se dibuje la caja
showpokepic 0x7E 0xA 0x5	'Muestra en el centro de la pantalla el sprite de un Magmar .
[…]

Deportivas sin tener que activar una flag


Ir a 0x05BB0E

Reemplazar 12 F0 FB FD por 01 20 C0 46

Los créditos esta vez son para Sagiri de PokeCommunity.


Pokémon Game Editor (PGE) INI Pokémon Rojo Fuego (BPRS)

Por ultimo, os dejo los datos de Rojo fuego, para incluir en el archivo “.ini” de la herramienta Pokémon Game Editor.

Código:
[BPRS]
ROMName=Pokémon Rojo Fuego (Español)
ItemData=3D4F50
AttackNames=242800
TMData=454C1C
TotalTMsPlusHMs=58
TotalTMs=50
ItemIMGData=3CF48C
NumberOfItems=375
NumberOfAttacks=354
MoveTutorAttacks=4541D8
NumberOfMoveTutorAttacks=16
PokemonNames=24164C
NumberOfPokemon=412
NationalDexTable=24D7B6
SecondDexTable=24D480
PokedexData=44912C
NumberOfDexEntries=387
PokemonData=24FF4C
AbilityNames=24B408
NumberOfAbilities=78
Pointer2PointersToMapBanks=55340
OriginalBankPointer0=34D7CC
OriginalBankPointer1=34D7E0
OriginalBankPointer2=34D9CC
OriginalBankPointer3=34DABC
OriginalBankPointer4=34DBC4
OriginalBankPointer5=34DBD4
OriginalBankPointer6=34DBEC
OriginalBankPointer7=34DC0C
OriginalBankPointer8=34DC34
OriginalBankPointer9=34DC4C
OriginalBankPointer10=34DC6C
OriginalBankPointer11=34DCBC
OriginalBankPointer12=34DCE4
OriginalBankPointer13=34DD04
OriginalBankPointer14=34DD0C
OriginalBankPointer15=34DD34
OriginalBankPointer16=34DD44
OriginalBankPointer17=34DD4C
OriginalBankPointer18=34DD54
OriginalBankPointer19=34DD5C
OriginalBankPointer20=34DD60
OriginalBankPointer21=34DD64
OriginalBankPointer22=34DD6C
OriginalBankPointer23=34DD74
OriginalBankPointer24=34DD80
OriginalBankPointer25=34DD88
OriginalBankPointer26=34DD94
OriginalBankPointer27=34DD9C
OriginalBankPointer28=34DDA0
OriginalBankPointer29=34DDA4
OriginalBankPointer30=34DDA8
OriginalBankPointer31=34DDAC
OriginalBankPointer32=34DDC8
OriginalBankPointer33=34DDDC
OriginalBankPointer34=34DDF0
OriginalBankPointer35=34DE10
OriginalBankPointer36=34DE30
OriginalBankPointer37=34DE44
OriginalBankPointer38=34DE58
OriginalBankPointer39=34DE5C
OriginalBankPointer40=34DE60
OriginalBankPointer41=34DE64
OriginalBankPointer42=34DE6C
NumberOfMapsInBank0=4
NumberOfMapsInBank1=122
NumberOfMapsInBank2=59
NumberOfMapsInBank3=65
NumberOfMapsInBank4=3
NumberOfMapsInBank5=5
NumberOfMapsInBank6=7
NumberOfMapsInBank7=9
NumberOfMapsInBank8=5
NumberOfMapsInBank9=7
NumberOfMapsInBank10=19
NumberOfMapsInBank11=9
NumberOfMapsInBank12=7
NumberOfMapsInBank13=1
NumberOfMapsInBank14=9
NumberOfMapsInBank15=3
NumberOfMapsInBank16=1
NumberOfMapsInBank17=1
NumberOfMapsInBank18=1
NumberOfMapsInBank19=0
NumberOfMapsInBank20=0
NumberOfMapsInBank21=1
NumberOfMapsInBank22=1
NumberOfMapsInBank23=2
NumberOfMapsInBank24=1
NumberOfMapsInBank25=2
NumberOfMapsInBank26=1
NumberOfMapsInBank27=0
NumberOfMapsInBank28=0
NumberOfMapsInBank29=0
NumberOfMapsInBank30=0
NumberOfMapsInBank31=6
NumberOfMapsInBank32=4
NumberOfMapsInBank33=4
NumberOfMapsInBank34=7
NumberOfMapsInBank35=7
NumberOfMapsInBank36=4
NumberOfMapsInBank37=4
NumberOfMapsInBank38=0
NumberOfMapsInBank39=0
NumberOfMapsInBank40=0
NumberOfMapsInBank41=1
NumberOfMapsInBank42=0
MapLabelData=459F14
NumberOfMapLabels=109
PokemonFrontSprites=230818
PokemonBackSprites=231CB8
PokemonNormalPal=232A78
PokemonShinyPal=233838
IconPointerTable=3CE958
IconPalTable=3CF038
CryTable=483210
CryTable2=484440
CryConversionTable=24F19C
FootPrintTable=43A6C8
PokemonAttackTable=258F7C
PokemonEvolutions=254F1C
TMHMCompatibility=24E390
TMHMLenPerPoke=8
MoveTutorCompatibility=4541F6
EnemyYTable=230138
PlayerYTable=2315D8
EnemyAltitudeTable=235770
AttackData=24C3CC
AttackDescriptionTable=47EF78
AbilityDescriptionTable=24B2D0
AttackAnimationTable=1C6420
IconPals=3CE8F8
JamboLearnableMovesTerm=0000FF
StartSearchingForSpaceOffset=710DF0
FreeSpaceSearchInterval=100
NumberOfEvolutionsPerPokemon=5
NumberOfEvolutionTypes=15
EvolutionName0=None
EvolutionName1=Happiness
EvolutionName2=Happiness (Day)
EvolutionName3=Happiness (Night)
EvolutionName4=Level
EvolutionName5=Trade
EvolutionName6=Trade w/ Item
EvolutionName7=Item
EvolutionName8=Atk > Def
EvolutionName9=Atk = Def
EvolutionName10=Atk < Def
EvolutionName11=High Personality
EvolutionName12=Low Personality
EvolutionName13=Allow Pokemon Creation
EvolutionName14=Create Extra Pokemon
EvolutionName15=Max Beauty
Evolution0Param=none
Evolution1Param=evolvesbutnoparms
Evolution2Param=evolvesbutnoparms
Evolution3Param=evolvesbutnoparms
Evolution4Param=level
Evolution5Param=evolvesbutnoparms
Evolution6Param=item
Evolution7Param=item
Evolution8Param=level
Evolution9Param=level
Evolution10Param=level
Evolution11Param=level
Evolution12Param=level
Evolution13Param=evolvesbutnoparms
Evolution14Param=level
Evolution15Param=evolvesbasedonvalue
EggMoveTable=25A6D4
EggMoveTableLimiter=45C9C
HabitatTable=44D528
ItemAnimationTable=45A3CC
TrainerTable=23A25C
NumberOfTrainers=742
TrainerClasses=239CC4
NumberOfTrainerClasses=6B
TrainerImageTable=234CE8
NumberOfTrainerImages=147
TrainerPaletteTable=235188
TrainerClassMoney=24A98C
DexSizeTrainerSprite=135
TradeData=268754
NumberOfTrades=9
PokedexAlphabetTable=43E834
PokedexLightestTable=43EB6A
PokedexSmallestTable=43EE6E
PokedexTypeTable=43F172


♠¡Un saludo!♠
 
Última edición:

Berserker1523

2-Intentando discernir qué es lo más importante...
Pokémon Rojo Fuego

Estos fueron los offsets que encontré para seguir el tutorial de ShyRayq de agregar el tipo Hada en FR: https://web.archive.org/web/20160531010632/https://www.pokecommunity.com/showthread.php?t=313872

Imagen de los tipos (status): E95D10
Paleta E95CF0

No sé que es una tabla
"Tabla" para acomodar los tipos con su respectiva coordenada de la imagen: 44D570

"Tabla" para definir la efectividad de los tipos: 24A7BC

"Tabla" que contiene el nombre del tipo del movimiento usado en el HUD a la hora de atacar en un combate (el texto que aparece abajo a la derecha que dice: "Tipo/elTipoEnCuestión"): 24A90C

------------------------------------------------------------------------------------

Offsets de los datos de los Pokémon y los movimientos (Si ya lo han puesto, pues es mejor tenerlo 2 veces (?))

Datos de los ataques (en el tuto decía que empezaban 12 bytes en FR antes de lo que de verdad era, donde solo habían 00s, no sé si sí sea así): "Real": 24C3CC
Hipotético: (donde empieza el primer ataque: Destructor): 24C3E8

Información útil: La longitud hipotética de un ataque es de 5 bytes, el byte n°3 es el tipo de este. Luego de estos 5 bytes, como "separación" entre los tipos (tal vez si sean útiles estos bytes), hay 3 bytes de valor 00, luego 1 byte de valor 33 seguido de 3 bytes de valor 00, luego de esto comienza el nuevo ataque y así sucesivamente.
--Se puede ver el orden de los ataques con cualquier editor de estos, por ejemplo Gen 3 Tools (aunque están predeterminados para Fire Red, es decir, en inglés).


Datos de los Pokémon (Pokédex, es decir, de todos los pokes disponibles en el juego, no los del equipo del jugador) : "Real": 24FF4C
Hipotético: 24FF68 (datos bulbasaur).

Información útil: La longitud hipotética de los datos de un pokémon es de 0x17 Bytes (23 en decimal), los bytes n°7 y n°8 son los 2 tipos del pokémon (si tiene un solo tipo, tendrán el mismo valor). Luego de esto, vienen 2 bytes de valor 00, 1 byte de valor 03 seguido de otros 2 bytes de valor 00. Después, empieza el siguiente Pokémon en la Pokédex.

Tipos de Squirtle: 250016
 
Última edición:

Versekr Dark

Usuario mítico
Experiencia al capturar Pokémon Rojo Fuego(Esp)

Créditos a: lsmash


2E E0 3F 02 02 00 2E 0C 3C 02 02 00 2E 0D 3C 02 02 00 23 00 F1 97 95 1D 0828 8C 95 1D 08

-Go to 1D9587, and replace the original bytes with 41 XX XX XX 08

-Next, go to 159D8, and replace the bytes with 11 5A 01 08.

Hacer las MTs infinitas en Pokémon Rojo Fuego(Esp):

Créditos a: FBI

Now navigate to 0x132070 and insert:
Code:
00 48 00 47 XX XX XX 08

Routine:

00 2D 01 D1 05 4B 18 47 38 1C 08 21 22 1C 04 4E 00 F0 02 F8 01 4B 18 47 30 47 C0 46 7B 20 13 08 79 37 13 08

Make it consumable after animation:
Insert: 00 00 00 00 at 0x1250F0

Now navigate to 0x132021 and change the byte to E0

Make it Ungivable:
insert that at 0x13287D: 00 00 17 E0

To insert:
Do the byte changes below
0x1250F4: 00 00 00 00
0x125DFC: 00 00 00 00
 

Acimut

Profesional de WaH
Revivo este tema con las .ini de Rojo Fuego y Esmeralda para Gen 3 Tools 2.9.1
Poner los .ini en la carpeta "Roms Data"

ROJO FUEGO BPRS
BPRS.ini
INI:
##########################################################
######################## READ ME #########################
##########################################################

# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)

##########################################################
######################## READ ME #########################
##########################################################



[GENERAL]
ROMCode=BPRS
ROMName=Pokémon Rojo Fuego (Español)

[MOVE]
NumberOfMoves=354
----------------------------------------------------------
SoundBasedMoves=@1A5EC
MoveAnimationTable=@72608
MoveDescriptionTable=@E574C
MoveData=@1CC
MoveNames=@148

[ITEM]
IndexOfFirstTM=289
NumberOfHMs=8
NumberOfItems=374
NumberOfTMs=100
----------------------------------------------------------
TMData=@125C08
ItemIMGData=@98B74
ItemData=@1C8

[ABILITY]
NumberOfAbilities=77
----------------------------------------------------------
AbilityDescriptionTable=@1C4
AbilityNames=@1C0

[POKEMON]
NumberOfPokemon=411
NumberOfMoveTutors=15
NumberOfMaxEvolutions=5
----------------------------------------------------------
PokemonShinyPal=@134
DexDataTable=@88FEC
PokemonNormalPal=@130
PokemonBackSprites=@12C
PokemonFrontSprites=@128
MoveTutorCompatibility=@120D90
TMHMCompatibility=@43B54
PokemonEvolutions=@42E58
PokemonMoveTable=@3E968
PokemonNames=@144
MoveTutorData=@120D44
PokemonData=@1BC

[TRAINER]
NumberOfTrainers=742
NumberOfTrainerImages=147
NumberOfClassNames=107
----------------------------------------------------------
TrainerPaletteTable=@34638
TrainerImageTable=@34628
ClassMoneyLocation=@2593C
ClassNamesLocation=@D7BF4
TrainerData=@FB70

[MISC]
SizeOfBattleText=247
SizeOfPCText=325
SizeOfNatureNames=162
----------------------------------------------------------
BattleText=@32B24
PCText=@3CE6F4
NatureNames=@45E4E4


ESMERALDA BPES
BPES.ini
INI:
##########################################################
######################## READ ME #########################
##########################################################

# The symbol @ means that the offset is read dynamically from the ROM.
# Which means that even if you repointed a data, G3T will be able to find the new pointer without having you update this file, except if you did some extremely advanced ASM hacking. (Which is very rare even in the most heavily ASM hacked ROMs)
# You can still edit the offsets to make G3T go directly to the data's offset, like in most of the tools.
# You will still need to edit this file if you changed a table or a data's size. (Such as NumberOfMoves f.e.)
# Exemples of how to edit MoveData properly for an untouched English Fire Red ROM:
# - "MoveData=@1CC" (dynamic offset)
# - "MoveData=&H250C04" (direct offset, in hexadecimal)
# - "MoveData=2427908" (direct offset, in decimal)

##########################################################
######################## READ ME #########################
##########################################################



[GENERAL]
ROMCode=BPES
ROMName=Pokémon Esmeralda (Español)

[MOVE]
NumberOfContestEffects=47
NumberOfMoves=354
----------------------------------------------------------
SoundBasedMoves=&HE4D424
ContestDescriptionTable=@DB12C
ContestMoveEffectData=@DAF6C
ContestMoveData=@D8248
MoveAnimationTable=@A3A58
MoveDescriptionTable=@1C3B1C
MoveData=@1CC
MoveNames=@148

[ITEM]
IndexOfFirstTM=289
NumberOfHMs=8
NumberOfItems=376
NumberOfTMs=50
----------------------------------------------------------
TMData=@1B6930
ItemIMGData=@1AFC54
ItemData=@1C8

[ABILITY]
NumberOfAbilities=77
----------------------------------------------------------
AbilityDescriptionTable=@1C4
AbilityNames=@1C0

[POKEMON]
NumberOfPokemon=411
NumberOfMaxEvolutions=5
----------------------------------------------------------
PokemonAnimations=@128
PokemonShinyPal=@134
PokemonNormalPal=@130
PokemonBackSprites=@12C
PokemonFrontSprites=@2CAE0
MoveTutorCompatibility=@1B1FB0
TMHMCompatibility=@6E048
PokemonEvolutions=@6D140
PokemonMoveTable=@6930C
PokemonNames=@144
PokemonData=@1BC

[TRAINER]
NumberOfTrainers=742
NumberOfTrainerImages=92
NumberOfClassNames=66
----------------------------------------------------------
TrainerPaletteTable=@5DF80
TrainerImageTable=@5DF78
ClassMoneyLocation=@4E6A8
ClassNamesLocation=@183B4
TrainerData=@3587C

[MISC]
SizeOfBattleText=295
SizeOfPCText=356
SizeOfNatureNames=162
----------------------------------------------------------
BattleText=@16A228
PCText=@57E55C
NatureNames=@61F46C
 

Elyseum

Usuario de platino
Increible aporte el de las inis de Rojo Fuego y Esmeralda para Gen 3 Tools 2.9.1 , ya eh podido probar la herramienta a fondo en el apartado de movimientos, y quisiera hacer una observacion.
Aparentemente los ataques que demoran un turno antes de atacar (Ataque Aereo, Deseo Oculto, etc.) en las versiones Inglesas, solo poseen una animacion, a lo que me refiero es que al momento de ejecutar Ataque Aereo, en el 1er turno no habra ninguna animacion, y recien al 2do turno aparecera.
En cambio en las versiones en español al inicio del ataque aparecera una animacion, y al final del movimiento recien aparecera la animacion de la version inglesa.
¿POR QUE ES IMPORTANTE?
Por que si quieres usar la animacion de uno de estos movimientos, esta no sera la del movimiento en si, si no mas bien la de la carga del movimiento. ejemplo: si quieres crear el movimiento "Pajaro Osado" y darle la animacion de "Ataque Aereo", solo aparecera la parte donde se carga el movimiento.
imagino que la forma de solucionar esto, es reemplazando la animacion por la de la version en ingles, ó encontrar la animacion de la 2da parte del movimiento para lo que yo almenos no e podido dar con ella.
 

Acimut

Profesional de WaH
Respondo este mensaje aquí, pues creo que es donde debería estar.

Gracias, acabo de probarlo en esmeralda y funciona muy bien, claro que solo lo e tocado superficialmente, ya que recien comenzare a sacarle todo el jugo, y si pudieras quisiera saber como consigues los offset para editar los inis, me gustaria apoyar creando esos inis para todas las herramientas que solo funcionan con las versiones en ingles.
Lamentablemente no puedo ayudarte con eso, ya sabes, un detective no revela sus métodos. ¡Espera! ¡Era broma! En realidad no hay mucho misterio con ello, solo tomo el offset de la versión inglesa y mediante heurística hallo el equivalente en la versión española, es casi hacer la investigación que nunca se hizo pero con ayuda de la que se ha hecho en la inglesa (?. Tal vez debería hacer un tutorial al respecto? personalmente pienso que hacer un tutorial es más tedioso que hacer investigación, pero te dejo algunas notas personales que pueden ayudarte a la hora de buscar algo con ayuda de un editor hexadecimal:

Esto es teniendo en cuenta que tienes los offset para la versión inglesa.
1. Al buscar una rutina o función, suele ser muy similares en ambas versiones, difieren de punteros y en ocasiones de saltos de código (b o bl en ASM).

2. Si tienes suerte la función que buscas es idéntica en ambas versiones, y solo basta con buscar una parte del código en hexadecimal en la versión española. Edit: casi lo olvido, hay veces que parte del código también es idéntico a la de otras funciones, por lo que si buscas, por ejemplo, con HxD al momento de la búsqueda dale F3 o "seguir buscando" y posiblemente encontrarás varios offset con el mismo código; ten en cuenta que la mayoría de los offset en ambas versiones no están muy lejos, (a excepción del código en rojo fuego correspondiente a los offset del 084xxxxx, que difiere del fire red por 0x5988 bytes) así que guíate del código de la función anterior o siguiente para hallar tu offset (muchas funciones suelen estar en el mismo orden en ambas versiones).

3. Siempre ten en cuenta los punteros, los puedes diferenciar porque están en offset alineados(terminados en 0, 4, 8 o C) casi siempre (por no decir siempre) son diferentes en ambas versiones, por lo que es un verdadero quebradero de cabeza hallar tablas de punteros. Si preguntan cómo hago para hallar las tablas, tengo 2 métodos pero es algo complejo explicarlos así que lo dejaré para después.

4. En cuanto a los punteros, sigue la siguiente regla: offset permutado + dirección de memoria. En otras palabras, puntero a la ROM = XX XX XX 08, Puntero a la WRAM = XX XX XX 02, Puntero a la IRAM = XX XX XX 03. Hay más pero nos importan estas. Ya sabemos que los punteros a la ROM son diferentes en ambas versiones, pero ten en cuenta que muchas veces los punteros a IRAM también son diferentes y debemos tomarlo en cuenta, mientras que los puntero a la WRAM suelen ser iguales (así como el resto y por eso no los menciono).

5. En ocasiones, la rutina o función que buscas pareciera no estar en la rom española, pero créame, está ahí. Muchas veces me ayuda buscar el código de la función inmediatamente anterior o la siguiente, siempre teniendo en cuenta no tomar punteros al buscar código.

6. Para hallar un puntero suelo ir a la dirección de este y buscar el código equivalente en la rom española.

7. las paletas suelen ser las mismas (? basta con buscar el equivalente en hexadecimal

8. los gráficos son iguales, con excepción a los que contienen texto en ellos, como los iconos de tipos. Para esto sigo teniendo problemas.

Bien, si quiero una tabla de punteros, recuerda que habrá una función o rutina que necesite de esta, por lo que si tienes el offset de la tabla, sólo es buscar el puntero de esta y hallar la función/rutina en la rom inglesa y buscar la función/rutina equivalente en la rom española, y esta contendrá el puntero a la tabla.

Esto todo lo que recuerdo ahora, no tengo acceso a un PC o pondría imágenes.
 
Última edición:

Elyseum

Usuario de platino
HUEVOS NACEN NIVEL 1 POKEMON ESMERALDA
070974: XX 22
071410: XX 22
1C2E20: XX 21
Solo deben buscar esas direcciones en HxD y cambiar los dos 1ros digitos (05) representados con XX por el nivel deseado, en este caso sera 01, debe quedar de esta manera: 070974: 01 22
El link original es http://www.pokecommunity.com/showthread.php?p=7584159#post7584159 para la version inglesa, yo solo busque las direcciones para la version en Español y lo probe.
PD: En el link se menciona que se debe poner el mismo nivel en las 3 direciones o producira errores, desconozco por que son 3 direcciones y no solo una la cual deberia ser el huevo, pense que podrian ser los grupos huevos, pero la descarte por que son mas de 3 grupos de huevos asi que no encaja bien, si alguien sabe por que son 3 direcciones que lo comente para tener un mayor entendimiento.
 

Elyseum

Usuario de platino
EDITAR LA TABLA DE TIPOS SIN REPUNTEAR POKEMON ESMERALDA (Limitado)
OFFSET: 320F4C

Esa es la Tabla de tipos Original de Esmeralda, cada efectividad esta separada en 3 pares de datos, veamos el 1er grupo:
00 (significa que el tipo Normal) 05 (al tipoRoca) 05 (le baja Poco efectivo) con solo ver la imagen se entiende rapidisimo.
TIPOS TUTO.png

Si queremos Modificar mucho en los tipos, tendrias que repuntear la nueva tabla que hagas, por que como podran observar, solo figuran resistencias y efectividades, golpes neutros no aparecen, por lo que el tamaño de la tabla crecera en funcion de todas las resistencias y efectividades que agregen.

¿Entonces que podemos hacer? pues reusar los datos que no necesites, ejemplo: en los nuevos juegos el tipo acero ya no resiste al siniestro y al fantasma, por lo que tienes 2 campos libres ahi, o derrepente hay resistencias que consideras absurdas como que los tipo lucha sean efectivos con el acero, siendo que en la vida real un luchador no puede romper una plancha de acero, entonces puedes usar tu imaginacion para obtener espacios libres y acomodarlos como mejor te parezcan, por ejemplo poner que el Tipo Hielo resista a los dragones y a los voladores, etc.

Los cambios son limitados, pero en mi opinion es una opcion muy practica y sencilla para dar ajustes pequeños a la desbalanceada tabla de tipos actual.
 

aiki

right now I'm sleeping.
¿Van a seguir aportando?
------------------------------------------------

*Insertar portada 240 colores en RF

lo que les dejaré serán las posiciones en unLZ-GBA y las direcciones HEX de APE para que puedan seguir el siguiente tutorial:

[Gráficos] FR | Insertar portada de 240 colores

offset - Paleta
00EAA058 - 1
00EAA078 - 2
00EAA098 - 3
00EAA0B8 - 4
00EAA0D8 - 5
00EAA0F8 - 6
00EAA118 - 7
00EAA138 - 8
00EAA158 - 9
00EAA178 - 10
00EAA198 - 11
00EAA1B8 - 12
00EAA1D8 - 13

00EABFF8 - 14
00EACAA4 - 15

Posicion - offset
1998 - 00EAA258
1999 (raw)
2000 (transparente)
2001 (transparente)
2002 (transparente)
2003 (transparente)
140 (brillo)

Todos los créditos de el tutorial a seguir van hacia @Cheve_X .
 

aiki

right now I'm sleeping.
*Cambiar mochila y su fondo en RF.

Me dispuse a investigar las direcciones de las paletas y RAWs de el fondo, y la mochila siguiendo el tutorial de @Jaizu .

e830bc - Fondo Mochila en Rojo Fuego!
e832b0 - Raw Mochila en Rojo Fuego!
e8361c - Mochila en Rojo Fuego!

e84550 - Paleta Mochila en Rojo Fuego!
e835a4 - Paleta Fondo Mochila en Rojo Fuego!


Y así me quedó.

1675 - Pokemon Rojo Fuego (S)(Rising Sun)_01.png


En cuanto a las direcciones en HxD, creo que son para quitar la animación en la que se sacude la mochila al desplazar de item. De todas maneras luego intentaré portearlas a Rojo Fuego.

Los créditos al usar la mochila están en el tutorial original.
Yo solo investigué sus respectivos offset en la rom española.

¡Viva España! xd
 

Anzu_Blue

Anzu Blue y Uroboros
Pokemon Rubí - Battle Background Estáticos
Offeset: 1FE394
reemplazamos 1C 00 00 04 por D0 70 03 02
cambios para eliminar la entrada del pokémon enemigo:
1041C -> 01
10456 -> 10

Pokemon Esmeralda- Battle Background Estáticos
Offeset: 320ED4
reemplazamos 1C 00 00 04 por D0 70 03 02
cambios para eliminar la entrada del pokémon enemigo:
397E4 -> 01
3981E -> 10

Pokemon Rojo Fuego- Battle Background Estáticos
Offeset: 24A750
reemplazamos 1C 00 00 04 por D0 70 03 02
cambios para eliminar la entrada del pokémon enemigo:
011CDC -> 01
011D16 -> 10

Edito el tema para añadir los cambios para Pokemon Rojo Fuego y Pokemon Esmeralda

Todos los créditos de el tutorial a seguir Ban hacia CompuMax y Derlo
 
Última edición:

Anzu_Blue

Anzu Blue y Uroboros
Pokemon Esmeralda - Exp. All.

En el offset 4A4BE escribiremos 02 21
En el offset 4A594 escribiremos 01 22
En el offset 4A634 escribiremos 01 20

Creditos al post de Lunos para Pokémon Emerald
 

Anzu_Blue

Anzu Blue y Uroboros
Mini Hacks para Rojo Fuego - BPRS

Ajustar evs a 252
0438E8 FF -> FC
0438EE FF-> FC

Tiempo Infinito en la zona safari
Offset = 0x06AA2A
Bytes por defecto = 01 38
Cambiar por = 00 38

Proteccion/ Dateccion/ Aguante - Actualizado gen 5
Offset = 0x026f3A
Bytes por defecto = 04 7A 64 00 A4 18 1D F0 84 FF 21 88
Cambiar por = 01 7A 14 88 CC 40 1D F0 84 FF 21 1C

Perdida de velocidad por paralisis actualizado a gen 7
Offset Bytes por defecto Cambiar por
0x014DD0 80 08 40 08
0x014EB0 BF 08 7F 08

Piel Tosca actualizada a gen 4
Offset = 0x0182F4
Bytes por defecto = 00 09
Cambiar por = C0 08

Actualizar la tabla de probabilidad de Golpes Criticos
Offset = 0x24bcf0
Bytes por defecto = 10 00 08 00 04 00 03 00 02 00
Cambiar por = 10 00 08 00 02 00 01 00 01 00
 
Arriba