Registrarse

[ASM] FR | VS Bars

Sayer301!

UnityLord!
Miembro de honor
Bueno, hoy traigo otro tutorial hecho por Zinc. Que pese a estar baneado sigue aportándonos tutos desde el mas allá (indirecta!)
Bueno sin mas preámbulos os dejo el tuto:

Iniciado por Zinc

Hoy les traigo (por fin) un tutorial sobre cómo usar esos mugshots y VS Bars que aparecen. Para hacer esto usaremos ASM :D
Las rutinas ASM están hechas por Jambo51, así que debes darle créditos a él.

¿Qué necesitamos?
-Conocimientos Avanzados
-Editor Hexadecimal
-Compilador de ASM https://www.mediafire.com/?l287si9c95ij12i (créditos a Andrea).
-XSE
-Visual Boy Advance

Haciendo la magia (Fire Red Inglés)
Para "la magia" necesitaremos 3 rutinas ASM que deberemos insertar. :
Código:
.text
.align 2
.thumb
.thumb_func
.global mugshothackone

main:
cmp r0, #0x87
beq there
cmp r0, #0x88
beq there
ldr r4, ramoffset
ldrh r4, [r4, #0x0]
lsl r5, r4, #0x2
add r5, r4, r5
lsl r4, r5, #0x3
ldr r5, place
ldr r5, [r5, #0x0]
add r0, r4, r5
ldrb r0, [r0, #0x3]
there: add r4, r0, #0x0
add r5, r1, #0x0
add r6, r2, #0x0
mov r9, r3
ldr r7, [sp, #0x34]
ldr r0, return
bx r0

.align

place: .word 0x08044028
ramoffset: .word 0x020386AE
return: .word 0x0808386D
Código:
.text
.align 2
.thumb
.thumb_func
.global mugshothacktwo

main:
ldrb r5, [r4, #0x3]
lsl r5, r5, #0x18
lsr r5, r5, #0x18
cmp r5, #0x0
beq normalchecks
mov r1, #0x5A
ldr r5, returnone
bx r5

normalchecks: cmp r1, #0x57
bne later
add r1, r2, #0x0
mov r0, #0xCD
ldr r5, returntwo
bx r5

later: ldr r5, returnone
bx r5

.align
returntwo: .word 0x0807FFA5
returnone: .word 0x08080009
Código:
.text
.align 2
.thumb
.thumb_func
.global mugshotpallethack

main:
ldr r1, ramoffset
ldrh r1, [r1, #0x0]
lsl r0, r1, #0x2
add r0, r0, r1
lsl r1, r0, #0x3
ldr r0, trainertable
ldr r0, [r0, #0x0]
add r1, r0, r1
ldrb r1, [r1, #0x1]
cmp r1, #0x5A
beq oldway
cmp r1, #0x57
beq oldway
ldr r1, ramoffset
ldrb r1, [r1, #0x3]
sub r1, #0x1
lsl r1, r1, #0x2
ldr r0, table2
add r1, r1, r0
ldr r0, [r1, #0x0]
b back
oldway: ldr r1, table
mov r2, r8
mov r3, #0x26
ldrh r0, [r2, r3]
lsl r0, r0, #0x2
add r0, r0, r1
ldr r0, [r0, #0x0]
back: ldr r1, return
bx r1

.align
ramoffset: .word 0x020386AE
trainertable: .word 0x08044028
table: .word 0x083FA740
table2: .word 0x08FFFFFF
return: .word 0x080D28D5

No olvides anotar los offsets en los que insertas las rutinas xDD.

Como los amo a todos ustedes, les dejo los bytes listos para meter en el HEX Editor. Anota las direcciones, es MUY importante.

87 28 0A D0 88 28 08 D0 08 4C 24 88 A5 00 65 19 EC 00 05 4D 2D 68 60 19 C0 78 04 1C 0D 1C 16 1C 99 46 0D 9F 02 48 00 47 28 40 04 08 AE 86 03 02 6D 38 08 08

E5 78 2D 06 2D 0E 00 2D 02 D0 5A 21 05 4D 28 47 57 29 03 D1 11 1C CD 20 01 4D 28 47 01 4D 28 47 A5 FF 07 08 09 00 08 08

0E 49 09 88 88 00 40 18 C1 00 0D 48 00 68 41 18 49 78 5A 29 09 D0 57 29 07 D0 08 49 C9 78 01 39 89 00 09 48 09 18 08 68 06 E0 06 49 42 46 26 23 D0 5A 80 00 40 18 00 68 04 49 08 47 AE 86 03 02 28 40 04 08 40 A7 3F 08 FF FF FF 08 D5 28 0D 08

En mi ejemplo pondré las rutinas en los siguientes offsets:
ASM1.bin en 750000 --> usamos 750001

ASM2.bin en 750040 --> usamos 750041

ASM3.bin en 750070 --> usamos 750071

Después vamos al offset 83862 y cambiamos lo que está ahí por lo que tenemos aquí:

01 4C 20 47 00 00 XX XX XX 08

XX XX XX = Pointer de ASM1

Pointer ASM1 (un pointer es un offset permutado): 01 00 75

Después vamos al offset 7FF90 y cambiamos lo que está ahí por lo que tenemos aquí:

00 4A 10 47 XX XX XX 08

XX XX XX = Pointer de ASM2

Pointer ASM2: 41 00 75

Después vamos al offset D28C6 y cambiamos lo que está ahí por lo que tenemos aquí:

01 49 08 47 00 00 XX XX XX 08

XX XX XX = Pointer de ASM3

Pointer ASM3: 71 00 75

Ahora nos vamos a algún editor de trainerbattles y hacemos o editamos uno. Pero para ahorrar tiempo yo usaré uno ya existente.
¿Olvidaste cómo se hacen las trainerbattles? ¿¡Lo olvidaste!? Eres una vergüenza como rom hacker
Hay que poner esto (además de la estructura básica de un script):



¿Ves lo que dice "Reserved"? Ahí siempre poníamos un 0x0 en las trainerbattles normales; pero ahora pondremos 0x200.
Entonces solo 0x200. Dentro del juego funciona.

Ahora nos queda solo el último cambio. Vamos de nuevo al editor Hexadecimal y vamos al offset 801f5 y cambiamos el byte (debería ser 88) a 78.

---Prueba in-game---

Los colores de la barra de arriba se ven "diferentes" porque aún no los cambio. Están en el offset 3FA6A0, se puede cambiar con APE.

Muchas gracias por leer, espero les haya sido de mucha utilidad.
El tutorial pertenece a Hackrex de RHO.
Link al tutorial: https://board.romresources.net/board219-rom-hacking-tools-tutorials-ressourcen/board16-rom-hacking-tutorials/board210-tutorial-archiv/10155-mugshots-vor-trainer-kämpfen-einfügen/
Bien hasta aquí el tutorial de Zinc, ahora vengo a explicaros las paletas de mi puño y letra.

Bien, ahora vamos a hacer una tabla de paletas para colorear nuestra VS bar de diferente modo segun el momento.


Para ello solo tienes que crear tu paleta de 16 colores ya sea en CMP, en Paint, PS, o donde os de la gana, guardarla, ahora explicar? como insertarla en cualquier parte de la ROM.

Abre el FSF, busca espacio para la paleta (64bytes necesarios) y luego vas al APE, aquí solo tienes que cargar la dirección que te dio FSF, sobre esa paleta (negra) tendrás que poner la tuya, para lo cual solo tienes que cargar la paleta y darle a Guardar. Al volverle a dar a Cargar en esa dirección, nos debería dar nuestra paleta.

Así debéis insertar 3 o 4, las que queréis vosotros.

Bien, ahora imaginemos que hemos insertado las paletas en los offsets, pues las vamos a permutar!
80 00 00 > 00 00 80
80 30 00 > 00 30 80
80 80 00 > 00 80 80
(Como veis es solo cambiar el orden, es super sencillo)



Ahora abrimos el FSF y buscamos un offset que va a necesaitar 4 bytes por paleta. Es decir si metemos 7 paletas (7*4=28, los bytes necesarios serán 28, al igual que si solo metemos 3, (3*4=12), solo seran necesarios 12) De todas formas yo recomiendo buscar cerca de los 100, que siempre podríamos añadir nuevas paletas si queremos.


Bien ahora apuntamos la dire en un bloc de notas y vamos a esta nueva dirección con el HxD.

En esta nueva dirección, nos vamos a dedicar a poner todos los repunteos a las paletas una detrás de otra, siguiendo el ejemplo de antes, sería asi:

00 00 80 00 30 80 00 80 80

¿Lo entendéis? Espero que si porque me explico faatal.

Habéis apuntado bien la dirección ¿No? porque es fundamental ahora mismo.

Fijaos, en el "ASM3.bin" tenemos una serie de FF FF FF casi al final de esta rutina, pues este FF FF FF es lo que deberemos sustituir por esa dirección que hemos apuntado en el bloc
NOTA: Recuerda, todas las direcciones acaban en 08 y hay que permutar la dirección, aunque tras las FF FF FF ya esté el 08 incluido y no nos hace falta cambiarlo.

Es decir, tendríais que darle la vuelta, como hemos hecho antes y añadirle un 08 al final. Si por ejemplo la hubiesemos insertado en el offset 90 00 00
Habria que sustituir el FF FF FF 08 por esto:
00 00 90 08
Es decir, cambios los FF FF FF por 00 00 90, simplemente.

LISTO, YA ESTA TODO HECHO Y HEMOS TERMINADO, ¿Contento? Ah claro, se me olvidaba...

¿Ahora como hacemos para llamar a una paleta u otra?

Os acordais del reserved que hablamos antes?
Hablamos de esto:

Bien, pues si pones 100, saldrá la paleta 1, si pones 200 la 2, si pones 300 la 3 y así sucesivamene, la verdad que solo he metido hasta 7 paletas, no se cuantas se podrán meter.

A mi me quedaron así:



Ahora si que si hemos terminado, saludo y que os cunda!
 
Última edición por un moderador:

Synchrony

Baneado
Respuesta: [ASM-FR] VS Bars antes de una batalla

Fantástico el tutorial éste. Es muy útil para todos los que trabajan en FireRed y los que quieren trabajar en él. Gracias por traerlo, y a Zinc por traducirlo
¡Suerte!
 

MegaSceptile9

Usuario mítico
Respuesta: [ASM-FR] VS Bars antes de una batalla

No puedo creer que casi nadie a comentado esto.

Esta genial, muy facil de entender, gracias a ti por sacarlo
del cementerio XD y gracias al creador original.
 

Dresron

Bro
Colaborador
Respuesta: [ASM-FR] VS Bars antes de una batalla

Muy util este tutorial, Zinc es el puto amo, gracias por traer denuevo este tutorial Sayer.
 
Respuesta: [ASM-FR] VS Bars antes de una batalla

Hello friends: D Well I do not like much of a bar vs. the effect of Fire Red.
Then I also find it much easier to redo it from scratch in a new style D / P
 
M

Miembro eliminado 28262

Invitado
Respuesta: [ASM-FR] VS Bars antes de una batalla

no entiendo absolutamente nada de esto, nunca he usado el asm compiler, y si haces algun parche? o al menos explicas mas detalladamente, no todos somos unos genios sabiondos del HR como tu
 

Dragonite

But where's your heart
Respuesta: [ASM-FR] VS Bars antes de una batalla

Es GENIAL! Super f?cil y entendible, por supuesto!

Definitivamente Zinc se lo ha currado.
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: FR | Otros | [ASM] VS Bars antes de una batalla

Tuto actualizado, ahora explico como editar las paletas de las VS bars y como añadir tantas como quieras.

Saludos a todos!


EDITO: Imagenes resubidas.
 

Nachoius

Caminante del cielo
Respuesta: FR | ASM | VS Bars antes de una batalla

no hay manera de poner mugshots en vez de sprites-trainers en el bars de batalla??
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: FR | ASM | VS Bars antes de una batalla

no hay manera de poner mugshots en vez de sprites-trainers en el bars de batalla??
Claro que se puede, busca en el subforo y encontrarás uno donde se explica eso, y no wolo podes hacer eso, tambien podes modificar algunos paretros de la rutina original.
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: FR | ASM | VS Bars antes de una batalla

¡Tutorial Recuperado!

Aunque la imagen de prueba se cayo...

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

Por otra parte, vaya me parece que esta genial en cierta parte, lo acabo de aplicar en una ROM en blanco y ha salido todo perfectamente!

Creo que este tipos de sistemas son muy utiles a la hora de luchar contra los "Especiales en un juego"

Gran tutorial, un saludo!
 

jiangzhengwenjz

Usuario mítico
Respuesta: FR | ASM | VS Bars antes de una batalla

This is a port to Pokemon Emerald USA (BPEE).
I don't hack Emerald but my friend jirachiwishmaker requested the code, so I will share it.
1. Make these byte changes:
Código:
0x147C6A - 00 00 00 00 (disable the palette mixing)
0xB13FD - 78 (for safety's sake)
0x5C8F90 - CD 6A 0F 73 51 7B 93 7F D5 7F FF 7F (filling the palette...)
0x5C8F70 - CD 6A 0F 73 51 7B 93 7F D5 7F FF 7F
0x5C8F50 - CD 6A 0F 73 51 7B 93 7F D5 7F FF 7F
2. Insert these 3 ASM codes in free space and change bytes accordingly:
insert 00 48 00 47 AA AA AA 08 at 0xB0F44, in which AA AA AA 08 is the pointer to the following routine (thumb mode +1)
Código:
.thumb
.align 2
ldrb r2, [r4, #7]
cmp r2, #0
beq normal
ldr r0, =0x80B0F5D
bx r0

normal:
ldrh r2, [r4]
lsl r0, r2, #2
add r0, r0, r2
lsl r0, r0, #3
add r0, r0, r1
ldr r1, =0x80B0F4F
bx r1
insert 00 48 00 47 BB BB BB 08 at 0xB5E78, BB BB BB 08 = pointer to the following code (thumb mode +1)
Código:
.thumb
.align 2
cmp r4, #0x47
beq normal
cmp r4, #0x48
beq normal
ldr r0, =0x2038BCA
ldrh r0, [r0]
lsl r5, r0, #2
add r5, r0, r5
lsl r0, r5, #3
ldr r5, =0x806E4C4
ldr r5, [r5]
add r0, r0, r5
ldrb r4, [r0, #3]

normal: 
add r5, r1, #0
add r6, r2, #0
mov r9, r3
ldr r7, [sp, #0x34]
ldr r0, =0x80B5E81
bx r0
insert 01 49 08 47 00 00 CC CC CC 08 at 0x147C42, CC CC CC 08 = pointer to the following code (thumb mode +1)
change 0x8FFFFFF to the palette table in your ROM and it can have 255 custom palettes.
The table's structure is [pointer1][pointer2]........................
Every pointer will point to a 16-color uncompressed palette (32 bytes)
Código:
.thumb
main:
 ldr r1, ramoffset
 ldrh r1, [r1, #0x0]
 lsl r0, r1, #0x2
 add r0, r0, r1
 lsl r1, r0, #0x3
 ldr r0, trainertable
 ldr r0, [r0, #0x0]
 add r1, r0, r1
 ldrb r1, [r1, #0x1]
 cmp r1, #0x1f
 beq oldway
 cmp r1, #0x26
 beq oldway
 ldr r1, ramoffset
 ldrb r1, [r1, #0x7]
 sub r1, #0x1
 lsl r1, r1, #0x2
 ldr r0, table2
 add r1, r1, r0
 ldr r0, [r1, #0x0]
 b back
oldway: ldr r1, table
 mov r2, r8
 mov r3, #0x26
 ldrh r0, [r2, r3]
 lsl r0, r0, #0x2
 add r0, r0, r1
 ldr r0, [r0, #0x0]
back: ldr r1, return
 bx r1

.align 2
ramoffset: .word 0x02038BCA
trainertable: .word 0x0806E4C4
table:  .word 0x085C8FDC
table2:  .word 0x08FFFFFF
return:  .word 0x08147C51
To activate it in a script, you can use this format:
Código:
trainerbattle 0(type, you can change it to fit your script) 0x50(your chosen trainer's ID) [b]0x0100[/b]   0x8XXXXXX   0x8YYYYYY
0x8XXXXXX & 0x8YYYYYY are pointers to the battle messages as usual.
0x0100 means the first palette in your custom table at 0x8FFFFFF, and 0x0200 means the second, ...... 0xff00 means the 255th palette.

Some sample palettes in the original game: (If you don't change the tiles and tileset, please build your palette in this format using APE)
Código:
D5 18 CE 39 52 4A D6 5A 5A 6B 17 5C 59 64 9B 6C DD 74 1F 7D CD 6A 0F 73 51 7B 93 7F D5 7F FF 7F
Código:
D5 18 CE 39 52 4A D6 5A 5A 6B 41 07 A4 13 C6 1B E9 27 EF 3F FC 45 3E 4E 7F 56 BF 5E FF 66 FC 45
Give credit to Jambo51 (for the routines for BPRE) and jirachiwishmaker (for finding some offsets) if you use this hack. I only adjusted the routines so that it will be compatible with Emerald's RAM structure and fixed a small glitch in Jambo51's code1. So no credit needed for me, if you don't want to make your credit list long.
 
Última edición:

Jaizu

Usuario mítico
Respuesta: FR | ASM | VS Bars antes de una batalla

Thanks for your amazing job o:
Thats looks really good, will test it and hopefully post some results soon.
 

Naren Jr.

Puto amo
Usuario de Platino
Respuesta: FR | ASM | VS Bars antes de una batalla

Sí desean personalizar los colores de la barra del player

La normal de sayer es esta:


Si van a 0D28EC y cambian el 0C por un 00 se podrá personalizar el color de la barra del player acá la muestra:


Saludos!
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: FR | ASM | VS Bars antes de una batalla

Sí desean personalizar los colores de la barra del player

La normal de sayer es esta:


Si van a 0D28EC y cambian el 0C por un 00 se podrá personalizar el color de la barra del player acá la muestra:


Saludos!
Vale la pena poner las offsets de cada paleta in-game c:

0x3FA660 (Agatha)
0x3FA680 (Bruno)
0x3FA6A0 (Lorelei)
0x3FA6C0 (Lance)
0x3FA6E0 (Gary Champion)
0x3FA700 (Male Player BG)
0x3FA720 (Female Player BG)
 

Jo7a

Kiero mi nick amarillo D:
Respuesta: FR | ASM | VS Bars antes de una batalla

Para editar al gusto la paleta del prota dejo esto por aquí que saqué hace un tiempo:

En el APE carga el offset 003FA700
Debería salir una paleta (no comprimida)
Los 5 primeros colores son los que usa la bar del prota (el 1º NO es color de fondo, ojo)
El 6º color debería ser blanco, pero ese no lo toques,
ni el 6º ni los siguientes, pero creo que los siguientes son negros (al menos en mi caso)
 

Skyflyer

Creador de Pokémon Zenit
Necesito ayuda con esto, espero que podáis ayudarme. He hecho todo lo del primer post, y justo cuando acaba la parte de Zinc si voy al juego y pruebo el script me sale lo siguiente:


Después he importado cuatro paletas de forma seguida, siendo las 4 las de la vs bar del chico:


Ahora pruebo a ir cambiado el número entre 0x100, 0x200, 0x300... y siempre me sale de la forma:


Por último por probar he hecho lo que dicen aquí arriba de cambiar en ese offset el C0 por 00 y me queda así:


Es evidente que algo falla, y creo que falla desde la parte de zinc. He tratado de hacerlo varias veces todo de cero pero siempre acabo de la misma manera. Alguna ayuda porfa? Os lo agradecería mucho.
 
Última edición:

Sayer301!

UnityLord!
Miembro de honor
Respuesta: Re: FR | ASM | VS Bars antes de una batalla

Necesito ayuda con esto, espero que podáis ayudarme. He hecho todo lo del primer post, y justo cuando acaba la parte de Zinc si voy al juego y pruebo el script me sale lo siguiente:


Después he importado cuatro paletas de forma seguida, siendo las 4 las de la vs bar del chico:


Ahora pruebo a ir cambiado el número entre 0x100, 0x200, 0x300... y siempre me sale de la forma:


Por último por probar he hecho lo que dicen aquí arriba de cambiar en ese offset el C0 por 00 y me queda así:


Es evidente que algo falla, y creo que falla desde la parte de zinc. He tratado de hacerlo varias veces todo de cero pero siempre acabo de la misma manera. Alguna ayuda porfa? Os lo agradecería mucho.
Has probado a completar la paleta de la primera imagen? Porque segun lo pintas la primera imagen iba perfecto pero sin completar.
 

Skyflyer

Creador de Pokémon Zenit
Re: Respuesta: Re: FR | ASM | VS Bars antes de una batalla

Has probado a completar la paleta de la primera imagen? Porque segun lo pintas la primera imagen iba perfecto pero sin completar.
Me parece que ya sé cuál es el error gracias a lo que me has dicho. Por cierto, antes que nada, no sé cómo hacer que las imágenes salgan más pequeñas xD En fin, creo que está todo bien insertado pero me falla la paleta del rival. Por qué me sale así? porque las paletas del jugador y del rival no siguen el mismo patrón ni orden de colores. Me explico.

La paleta del jugador es la que podéis ver aquí:


Como veis los únicos colores que se muestran son 6, que definen la barra de tu prota si eres chico (en el offset a continuación de éste está el de la prota femenina). De hecho deduzco que el blanco, el sexto, marca el color de las rayitas que hay. Pero a lo que iba, la estructura de la paleta de cualquier entrenador del alto mando es de esta manera:



Ajá, os habéis dado cuenta de que los colores siguen otro patrón, otro orden. De hechos e observa algo interesante. Los colores de las líneas del borde de ambas barras, tanto de tu rival como las de tu personaje, vienen definidas en ésta paleta del rival, que como véis son los colores del 2º al 5º. Después tenemos los 5 colores que muestra la barra del rival. Conclusión? Que para que salgan bien los colores hay que ponerlos bien en orden xD Seguro que muchos lo deducirían al implementar esto a tu juego, pero como no he visto a nadie aclarar esto de los colores pues aprovecho para hacerlo para un futuro yo que llegue y se atasque como me ha pasado xDD

PD: En todas las paletas de los rivales el primer color es el mismo, el D528, una especie de rojo tirando a granate. Luego desde el color 11 al 16, ambos incluídos, son siempre negros. En el caso del prota lo podéis ver en la imagen, no sé muy bien cómo afecta cambiar los demás colores pero en principio con tocar los 5 primeros debería ser suficiente. ¡Un saludo!

EDITO: He tratado de poner como dice el tutorial las 3 paletas a insertar, he cogido la de Lance y la he copiado en 3 offsets diferentes. Sin embargo en el script del entrenador en el que pongo tanto 0x100 como 0x200 salen así

Y en el que pongo 0x300 sale así

Si alguien me puede ayudar y decir dónde tengo que tocar qué cosa... Me estoy volviendo loco :(

Por cierto, también me he dado cuenta de que las paletas de Lorelei y Bruno en lugar de espacios negros en su paleta tienen los colores del entrenador chico y de la chica, respectivamente. No sé la relación de ésto la verdad.
 
Última edición:
Arriba