Registrarse

[ASM] FR | Expansión y personalización de Fondos de Batalla

Gold

Porrero a tiempo parcial
Miembro insignia
Expansion de fondos de batalla
Por Karatekid552 y reescrito por mi


Todos sabemos ya como insertar tus fondos de batalla, estos nos dan nuevos aires y un mejor aspecto grafico, pero pasa que a veces queremos que un entrenador eapecial o zona muestre un fondo personalizado, por ejemplo en una ruta nevada queremos ver un fondo nevado, pero ¿como?

Gracias a Karatekid552 es posible, ya que ha desarrollado un parche que mueve la tabla de punteros a los fondos a la direccion 0xF10000, con este espacio tenemos la posibiladad de tener hasta xFFFF fondos (unos 65,000 fondos en total)

Pero primero conozcamos la estructura de la tabla de punteros y su respectiva offset:

The Table

la tabla es simple, en el juego se contabilizan 20 fondos de batalla, enumerados con una ID que va de 0 a 19, los cuales son (datos conservados en Ingles)

1. Hierba alta
2. Hierba alta2
3. Arena (de desierto)
4. suelo común
5. Océano
6. Costa
7. Craggy
8. Cueva
9. Multi/Indoor- White & Grey & some Yellow in the Palette (Normal Trainer Battle)
10. Multi/Indoor- Green & a little Yellow (Rival Trainer Battle)
11. Multi/Indoor- White & Grey ()
12. Multi/Indoor- White & Grey & some Tan in the Palette ("Gym" Trainer Battles (that option in A-Map))
13. Multi/Indoor- White & Grey & some Tan in the Palette (2) (batalla xe lider de gimnasio (si, los lideres tienen su propio fondo))
14. Multi2/Indoor2- White & Grey
15. Multi2/Indoor2- White & Grey & some Purple in the Palette
16. Multi2/Indoor2- Blue & some Tan in the Palette
17. Multi2/Indoor2- Yellow & Tan
18. Multi2/Indoor2- Purple & some Tan in the Palette
19. Multi2/Indoor2- Turquoise & some Tan in the Palette
20. Multi2/Indoor2- White & Grey & some Purple in the Palette

por cada fondo se asignan 20 tablas de punteros las cuales se organizan de la siguiente manera:


Código:
VV VV VV 08  WW WW WW 08  XX XX XX 08  YY YY YY 08  ZZ ZZ ZZ 08
 
VV = Offset del fondo
WW = Offset del tilemap
XX = Imagen de entrada
(Ej. la hierba que se mueve cuando iniciamos una batalla en la hierba.)
YY = Tilemap de la imagen de entrada
ZZ = Paleta

Esa es la documentacion de los fondos y su ubicacion original de cada tabla de punteros:

Grass Background

VV = 24844C
WW = 2489A8
XX = 248C68
YY = 248F58
ZZ = 248400

Second Grass Background (hay dos fondos de hierba repetidos, ignoro el porque.)

VV = 2490C4
WW = 249620
XX = 2498DC
YY = 249E10
ZZ = 249074

Sand Background

VV = 249FE4
WW = 24A37C
XX = 24A618
YY = 24A844
ZZ = 249F98

Field Background

VV = 24A990
WW = 24ACD0
XX = 24AF70
YY = 24B0DC
ZZ = 24A940

Sea Background

VV = 24B1EC
WW = 24B608
XX = 24B8A8
YY = 24BBE0
ZZ = 24B19C

Pond Background

VV = 24BD38
WW = 24C07C
XX = 24C314
YY = 24C520
ZZ = 24BCE0

Craggy Background (No se donde se supone que es llamado este fondo)

VV = 24C624
WW = 24C9B8
XX = 24CBF8
YY = 24CEC8
ZZ = 24C5D8

Cave Background

VV = 24CFEC
WW = 24D418
XX = 24D6B8
YY = 24DC98
ZZ = 24CF98

Multi-type Backgrounds/Indoor Backgrounds (El que se usa en batallas al aire libre)

-hay un total de cinco fondos compartidos. usan la misma configuración, pero diferentes paletas.
VV = 24DE34
WW = 24E16C
XX = 24E410
YY = 24E490
ZZ =
1. 24DDF0
2. 24E81C
3. 24E528
4. 24E56C
5. 24E5B8

Fondos de interiores, son 7 fondos que tambien comparten todo menos paletas

VV = 24E858
WW = 24EB90
XX = 24E410
YY = 24E490
ZZ =
1. 24E604
2. 24E650
3. 24E6A4
4. 24E6F0
5. 24E740
6. 24E78C
7. 24E7DC

Para expandir la tabla no se requiere gran ciencia, solo aplica el parche que esta al final del tema y vete al final de la nueva tabla de fondos, no borres ningun dato si no estas seguro que estas haciendo (es obvio, pero uno nunca sabe que locuras puede hacer la gente)


Ahora expandamos, pero ¿y ahora que?

Aunque creeras que hay que ser pro para esto, es falso, solo hay que tener conocimientos en hexadecimal e inserccion de datos comprimidos sin repunteo (despues hago un tuto explicando esto, es sencillo)

si recuerdas, dije que habían 20 fondos usables, curiosamete se enumeran en sistema decimal, partiendo del número 0, entonces siguiendo esa numeración asumimos que los fondos del 0 al 19 estan llenos. entonces, insertare sin repuntear dos fondos extra, uno para rutas nevadas, el otro para la batalla contra el campeón, y luego haré un repunteo manual al final de la nueva tabla ubicada en 0xF10000 usando el formato mencionado antes.

El código interno del juego no nos permite tocar ni expandir esta tabla, pero este parche modifica esa rutina ASM no solo moviendola de lugar, sino haciendola dependiente a la varable 0x40F7. lo cual hace que si comprueba que el valor de esa variable es 0, el juego sigue la rutina. común, pero si encuentra un valor distinto a ese, el juego cargará el número de fondo del valor de la variable.

En resumen, si fijamos el valor de la variable 0x40F7 a 20, el juego cargará el fondo número 20, si no hay fondo 20 el juego se crasheara, pero como inserte mi fondo nevado entonces el fondo nevado es el número 20, por lo tanto al fijar en 20 su valor el juego cargará el fondo número 20

Sencillo ¿No? pero para hacerlo funcional y que se cargue el fondo nevado en una ruta especifica pues solo haremos un script de nivel 02, en el cual debe ser agregado esto (mira el macrotutorial de Javi para hwcer scripts de nivel):

Código:
Setvar 0x40F7 0x20
Al hacer esto automaticamente al pisar la ruta se cargará ese fondo, pero ¡al salir de esa ruta se sigue cargando ese fondo! pues la unica solucion que encontre es que crees otro script de nivel en los mapas que interconectan esa ruta, poniendo esto:

Código:
setvar 0x40F7 0x0
eso hara que la variable vuelva a tener 0 como valor, con lo cual la rutina seguirá normal.


Ahora para la batalla del campeón solo tendremos que hacer casi lo mismo, ahora el fondo de campeón lo inserté despues del nevado, por lo cual es el fondo 21, para ello haremos lo mismo, solo que en vez de hacer un script de nivel se lo asignaremos al script del npc (algo asi era el trainerbattle)

Código:
setvar 0x40F7 0x21
trainerbattle 0x1B0 0x200 @puto @quien @lea @esto


#org @esto
msgbox @texto 0x6
setvar 0x40F7 0x0
end
el script esta mal hecho, pero como para hacer esto debes saber de scripteo medio pues sabras que los setvar van antes de la trainer battle y al final del script.

Entonces ¿Es dificil? un poco quizás, para mi es sencillo, pero para ustedes quizas no, recordad que con esto podemos hacer que cada mapa tenga su propio fondo de batalla.

ahora si el link del parche de la rutina:



El parche es compatible con el JPAN hacked engine, el 649 patch de Jambo51, el Decapitalization patch de MrDollSteak, y el 870 parch de Jonkane.


En caso de tener ya usada la direccion 0xF00000 aqui se incluye la rutina sin compilar


Creditos: a Karatekid552 por la rutina ASM y por el metodo de hacer esto, pero que yo amplié e hice mas entendible

A la vez el agradece a Driver, Jambo51, Darthatron, Mat, Tajaros, Narutoactor y Drfuji.
 
Última edición:

Dani_SR_17

¡Pokémon LionHeart!
Respuesta: FR|Scripting&ASM| Expansion y Personalizacion de Fondos de Batalla

Muy útil, me viene genial, necesitaba bastantes fondos, la pega, es que la variable que usa, ya la tengo usada en mi hack..., creo que toca modificar algún script.

Aunque si pudieras subir algunas scans, quedaría mucho mejor.
 

MegaSceptile9

Usuario mítico
Respuesta: FR|Scripting&ASM| Expansion y Personalizacion de Fondos de Batalla

¡Jajajajajajajajajaja, esto es una broma, cierto?!...ya veo que no XD.

Es una de las cosas más geniales que he visto en vida, espero
no tener ocupada esa dirección, porque no sabría que hacer con
la rutina sin compilar :s

Gracias por este tuto :D

PD: ¿Y si aplico el parche a una rom limpia de fire red y con el HxD voy a la dirección F10000, copio la rutina y la pego en el lugar que yo quiera de mi hack, funcionaría?

PDD: creo que no, porque no movería la tabla de punteros a los fondos, pero quiero salir de dudas.
 
M

Miembro eliminado 28262

Invitado
Respuesta: FR|Scripting&ASM| Expansion y Personalizacion de Fondos de Batalla

¿Pero porqué hay solamente 2 comentarios?
es incomprensible! PEEEEEEEDAAZO DE APORTE, me ha molado cuanto menos, está super chulo, sencillo y bien explicado, que mal que no te pueda dar repu, pero aun asi, Gracias ;)
 

Guilly Alpha

It's eleven o'clock
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Una pasada de aporte que no habi visto nunca!! xD

Una pregunta, ¿el parche solo une los bg a la variable 407f o tambien los expande?, esa parte no la entendi muy bien xD

Y Si en el trainerbattle con el setvar te derrotan, ¿el bg queda modificado?
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Una pasada de aporte que no habi visto nunca!! xD

Una pregunta, ¿el parche solo une los bg a la variable 407f o tambien los expande?, esa parte no la entendi muy bien xD

Y Si en el trainerbattle con el setvar te derrotan, ¿el bg queda modificado?
Los expande llevando la tabla a 0xF00000 y desde aquí puedes agregar los que tu quieras, usando la variable esa los llamas cuando quieras.

Y sí supongo que quedan con el BG modificado xD
 

Derlo

Usuario mítico
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Los links eston offlines!
alguien podría reupar?
 

Derlo

Usuario mítico
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Someone got?
Make the routine work using the tutorial?
When beginning the battle, the music is playing and BG does not load, is all black!
The patch operates normal. but the tutorial, no.

IPS FILE:
Battle BG Hack BPRE - Download - 4shared
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

¿Alguien tendrá el código fuente de esta rutina?

La necesito ya que el offset que utiliza, el 0xF00000 ya lo tengo ocupado por el parche de Paletas Dinámicas de Overworld

:(
 

Jo7a

Kiero mi nick amarillo D:
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

¿Alguien tendrá el código fuente de esta rutina?

La necesito ya que el offset que utiliza, el 0xF00000 ya lo tengo ocupado por el parche de Paletas Dinámicas de Overworld

:(
Por suerte usé esta rutina en mi hack, y apunté la rutina original en un block (que ahora tiene el link caido).

Lo que tengo es esto:

.align 2
.thumb

/*Well, this is the source code for the battle bg hack. Pretty simple stuff.
When the battle bg is loaded, the game stores the background number to be loaded in r0.
This hack branches the routine right after that to check the var and if there is something in it,
load that as the new background.

The branches to this routine (BPRE only) need to be done as follows:

0x0800F26C= change "ldr r5, #0x0824EE34" to "ldr r5, #0x08F00001" (or the location you choose to put this routine at.)
0x0800F26E= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F270= change "add r4,r4,r0" to "pop {r5}"

0x0800F2B8= change "ldr r5, #0x0824EE34" to "ldr r5, 0x08F00041" (The location Main2 begins at, +1. It was 0x08F00031 in the patch)
0x0800F2BA= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F2BC= change "add r4,r4,r0" to "pop {r5}"

Now, at 0x0800F320, 0x0800FD5C, and 0x0800FD88 change the pointer (which points to the original bg table [0x0824EE34])
to the new BG table location which is 0x08F10000 in here and the patch.

This source is based off what is in the patch. It is ment to modified so that hackers who have already used 0xF00000+ in their
hacks can have flexibility in the location of the routine.

I haven't tested this routine as it is, but it should work... "Should" being the key word...
The reason being, I was given the routine without the var_loader already in a German Rom and I branched it later
to include the var_loader, so this source code is the all in one.*/



.org 0xF00000
Main: ldr r5, new_bg_table
push {r5}
push {r1}
bl varloader

post_var_loader: cmp r1,#0x0
beq return
mov r0,r1

return: pop {r1}
ldr r5, return_offset
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader: push {r0, r2}
ldr r0, var_id
bl call_decrypt
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader

call_decrypt: ldr r2, vardecrypt
bx r2


.align 2



var_id: .word 0x000040F7
vardecrypt: .word 0x0806E455
new_bg_table: .word 0x08F10000
return_offset: .word 0x0800F271



.align 2

Main2: ldr r5, new_bg_table2
push {r5}
push {r1}
bl varloader2

post_var_loader2: cmp r1,#0x0
beq return2
mov r0,r1

return2: pop {r1}
ldr r5, return_offset2
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader2: push {r0, r2}
ldr r0, var_id2
bl call_decrypt2
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader2

call_decrypt2: ldr r2, vardecrypt2
bx r2

.align 2


var_id2: .word 0x000040F7
vardecrypt2: .word 0x0806E455
new_bg_table2: .word 0x08F10000
return_offset2: .word 0x0800F2BC

Espero que te sirva.
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Por suerte usé esta rutina en mi hack, y apunté la rutina original en un block (que ahora tiene el link caido).

Lo que tengo es esto:

.align 2
.thumb

/*Well, this is the source code for the battle bg hack. Pretty simple stuff.
When the battle bg is loaded, the game stores the background number to be loaded in r0.
This hack branches the routine right after that to check the var and if there is something in it,
load that as the new background.

The branches to this routine (BPRE only) need to be done as follows:

0x0800F26C= change "ldr r5, #0x0824EE34" to "ldr r5, #0x08F00001" (or the location you choose to put this routine at.)
0x0800F26E= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F270= change "add r4,r4,r0" to "pop {r5}"

0x0800F2B8= change "ldr r5, #0x0824EE34" to "ldr r5, 0x08F00041" (The location Main2 begins at, +1. It was 0x08F00031 in the patch)
0x0800F2BA= change "lsl r4,r0,#0x2" to "bx r5"
0x0800F2BC= change "add r4,r4,r0" to "pop {r5}"

Now, at 0x0800F320, 0x0800FD5C, and 0x0800FD88 change the pointer (which points to the original bg table [0x0824EE34])
to the new BG table location which is 0x08F10000 in here and the patch.

This source is based off what is in the patch. It is ment to modified so that hackers who have already used 0xF00000+ in their
hacks can have flexibility in the location of the routine.

I haven't tested this routine as it is, but it should work... "Should" being the key word...
The reason being, I was given the routine without the var_loader already in a German Rom and I branched it later
to include the var_loader, so this source code is the all in one.*/



.org 0xF00000
Main: ldr r5, new_bg_table
push {r5}
push {r1}
bl varloader

post_var_loader: cmp r1,#0x0
beq return
mov r0,r1

return: pop {r1}
ldr r5, return_offset
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader: push {r0, r2}
ldr r0, var_id
bl call_decrypt
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader

call_decrypt: ldr r2, vardecrypt
bx r2


.align 2



var_id: .word 0x000040F7
vardecrypt: .word 0x0806E455
new_bg_table: .word 0x08F10000
return_offset: .word 0x0800F271



.align 2

Main2: ldr r5, new_bg_table2
push {r5}
push {r1}
bl varloader2

post_var_loader2: cmp r1,#0x0
beq return2
mov r0,r1

return2: pop {r1}
ldr r5, return_offset2
lsl r4,r0,#0x2
add r4,r4,r0
bx r5

varloader2: push {r0, r2}
ldr r0, var_id2
bl call_decrypt2
ldrh r0, [r0]
mov r1, r0
pop {r0,r2}
bl post_var_loader2

call_decrypt2: ldr r2, vardecrypt2
bx r2

.align 2


var_id2: .word 0x000040F7
vardecrypt2: .word 0x0806E455
new_bg_table2: .word 0x08F10000
return_offset2: .word 0x0800F2BC

Espero que te sirva.
Excelente hermano!

Sip, es exactamente lo que estaba buscando.

Eres el mejor Jo7a.
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Someone got?
Make the routine work using the tutorial?
When beginning the battle, the music is playing and BG does not load, is all black!
The patch operates normal. but the tutorial, no.

IPS FILE:
Battle BG Hack BPRE - Download - 4shared
Saludos Derlo. Lograste hacer que funcionara esta rutina?

A mi tambien me carga los BG en negro.

O alguien que sepa porque ocurre esto?
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Bueno tal como había dicho Derlo, la rutina funciona perfectamente, más no el tutorial. Acabo de dar con el problema y es que el tutorial tiene un detalle. La cosa es que el conteo es en HEX y no en decimal como dicen acá, por lo que el BG #21 no sería 20 sino 14.

Saludos y espero les sirva la información.

:D
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Bueno tal como había dicho Derlo, la rutina funciona perfectamente, más no el tutorial. Acabo de dar con el problema y es que el tutorial tiene un detalle. La cosa es que el conteo es en HEX y no en decimal como dicen acá, por lo que el BG #21 no sería 20 sino 14.

Saludos y espero les sirva la información.

:D
¿Seguro que está mal? porque he probado muchas veces a usarlo, y efectivamente los carácteres de la A a la F no eran tomados, simplemente no cargaba el fondo en cuestión.
 

CompuMax

Discord: CompuMax#0425
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

¿Seguro que está mal? porque he probado muchas veces a usarlo, y efectivamente los carácteres de la A a la F no eran tomados, simplemente no cargaba el fondo en cuestión.
Si hermano, Lo acabo de probar y funciona perfectamente teniendo en cuenta esa consideración. Aquí el resultado:


De hecho si no hay fondo 20 (es decir, el fondo 33 en la tabla) el juego no se crashea, solo carga todo en negro. Claro si hace una llamada a un espacio vacío, es decir, lleno de FF. Quedando de esta manera:


Estos son los de los BG A y B respectivamente:


Como puedes ver sólo cambian las paletas, tal como dice dice la teoría.

jeje
 
Última edición:

Elite4

El Comienza del Fin
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

¿Seguro que está mal? porque he probado muchas veces a usarlo, y efectivamente los carácteres de la A a la F no eran tomados, simplemente no cargaba el fondo en cuestión.
hay algo que no me queda bien claro, al insertar el bg nuevo debo colocarlo al final de la nueva tabla como dices osea en F000A0 o al F10190, y mi otra duda seria ¿las papeletas del nuevo bg donde deberia de colocarlas para el bg nuevo la reconosca?
 

hacanoca

Héroe de WaH
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Muchas gracias
Tengo una duda, si estoy interesado en usar una variable diferente, ¿basta con cambiar en el código que posteó Jo7a las partes donde dice ".word 0x000040F7" por la variable que yo quiera?
¿O debo hacer algo más?
y para cambiar la dirección de la tabla igual, ¿sólo cambiar los ".word 0x08F10000"?
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

Muchas gracias
Tengo una duda, si estoy interesado en usar una variable diferente, ¿basta con cambiar en el código que posteó Jo7a las partes donde dice ".word 0x000040F7" por la variable que yo quiera?
¿O debo hacer algo más?
y para cambiar la dirección de la tabla igual, ¿sólo cambiar los ".word 0x08F10000"?
Sip, solo hay que cambiar dichas líneas y con eso cambiarás la dirección de la rutina y la variable que se usa.

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

Y en otras noticias he actualizado los links caídos del tema principal. Tanto el parche como el código fuente funcionan al 100%
 

hacanoca

Héroe de WaH
Respuesta: FR | ASM | Expansión y personalización de Fondos de Batalla

ⓖⓞⓛⓓ;429605 dijo:
Sip, solo hay que cambiar dichas líneas y con eso cambiarás la dirección de la rutina y la variable que se usa.

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

Y en otras noticias he actualizado los links caídos del tema principal. Tanto el parche como el código fuente funcionan al 100%
Gracias.
¿Oye, será que te puedo molestar con otra cosa? :p
Es que intenté hacer el procedimiento modificando esas líneas, pero no me funcionó.
¿Será que podrías ampliar el tutorial, explicando el procedimiento para los que queremos aplicar la rutina y no el parche?
Te lo agradecería mucho.

Lo que yo hice fue cambiar las líneas que mencioné, compilé la rutina y la inserté en el offset que yo deseaba, apliqué el parche en una rom limpia y miré aparte de la nueva tabla y de la rutina cuáles offsets cambiaban, y modifiqué ya en mi juego esos mismos offsets a los cambios que daba el parche (teniendo cuidado de poner los punteros de mi rutina+1 y mi puntero de la tabla de BG).
Eso fue lo que hice, pero no logré el resultado. El juego se ponía en negro al iniciar una batalla.

Me serviría mucho una mano, no sé bien cómo hacerlo funcionar.

Una inquietud, ¿el offset de "vardecrypt" para qué sirve?
¿Ese no es necesario modificarlo?
 
Arriba