Jaos Dawn

jaosdawn

Cómo introducir retratos (portraits) en un script

Introducción

Éste es un aspecto del ROM-hacking que sin duda puede ser muy útil y atractivo en un hack. Se trata de algo bastante simple, una vez lo sabes, pero que de entrada puede no ocurrírsete. En este tutorial explicaremos cómo hacer que, dentro de un diálogo, aparezcan las caras de los distintos personajes y Pokémon que hablan. El resultado final sería algo así:

http://www.youtube.com/watch?v=vJUt1Gsyshs

Este método está basado en un tutorial de Pokecommunity: http://www.pokecommunity.com/showthread.php?t=168158 Aquí reduciremos un poco el proceso, quitando alguna cosa innecesaria, y lo mostraremos de forma más ordenada y completa, y en español.

¿Qué necesitaremos?

  • Una ROM (nuestro hack) de base Ruby o Sapphire. El método también sirve para otras ROMs, pero sería necesario hacer un par de leves modificaciones del proceso.
  • UnLZ-GBA o cualquier otro editor de gráficos comprimidos.
  • Rsball, incluido en el pack de Elitemap.
  • Free Space Finder (FSF) o un editor hexagesimal, para buscar espacios libres.
  • Advance Map 1.92 y XSE (aseguraos de que tenéis la última versión de XSE).
  • Un sprite (retrato) para insertar, indexado a 16 colores y de tamaño 64x64 px (como cualquier sprite de un Pokémon).

Conocimientos previos "recomendados" para poder entender el tutorial

  • Saber usar UnLZ-GBA.
  • Tener una idea básica de scripting y de cómo asignar un script a un mini usando Advance Map.
  • Saber indexar sprites.
  • Saber buscar espacio libre en la ROM.
  • Saber qué es una coordenada.


Haced una copia de seguridad de vuestra ROM cada vez que acabéis uno de los pasos mostrados en este tutorial.

 

Primer paso: Insertar el retrato

Nuestro retrato tendrá exactamente el mismo tamaño y las mismas características que un sprite de Pokémon normal: tendrá un tamaño 64x64 píxeles y estará indexado con una paleta de 16 colores (el primero de los cuales será el color de fondo). En este caso, usaremos este retrato como ejemplo:

1_ana_retrato_indexado-1.png
Ejemplo de retrato para insertar

Escogido e indexado el retrato, debemos buscar espacio libre en la ROM usando FSF o un editor hex. A continuación, abriremos nuestro hack con UnLZ-GBA e insertaremos el sprite en el espacio libre que hemos encontrado, y su paleta, en otro espacio libre. No olvidéis apuntaros los dos offsets en un documento de texto, porque más tarde volveremos a necesitarlos.

3a_unlz-1.png
Insertando el retrato don UnLZ

Ahora el retrato ya está insertado en la ROM.

Segundo paso: Asignar el retrato a un Pokémon

Para hacer que el retrato se muestre en el juego usaremos un comando showpokepic. ¿Qué hace showpokepic? Pues hace que el juego muestre la imagen de un Pokémon, de esta manera:

2_ejemplo_showpokepic-1.png
Ejemplo de showpokepic

Nosotros aprovecharemos las características del showpokepic para mostrar retratos. Por ello, tendremos que hacer que nuestro retrato sea el sprite de un Pokémon, y así después podremos mostrarlo usando showpokepic, como si fuera un Pokémon más. Para no tener que "sacrificar" ninguno de los 386 Pokémon que trae el juego, podemos usar los 25 espacios libres que hay entre Celevi y Treecko para introducir hasta 25 retratos diferentes. También podemos sacrificar algún Pokémon, pero en ese caso tendríamos que hacer que no apareciera nunca en el juego, ni como Pokémon salvaje, ni de ningún otro modo. En este caso, como ejemplo, asignaremos el retrato al primer Pokémon vacío de esos 25, el que sería el Pokémon número 252.

Para asignar el retrato a un Pokémon, abriremos Rsball, cargaremos nuestra ROM (recordad que la ROM tiene que estar en la misma carpeta que Rsball) e iremos al Pokémon número 252. Hecho esto, en la parte de abajo, donde pone "Gestión de puntos de localización", copiaremos los dos offsets donde antes (con Unlz) hemos introducido el sprite y su paleta, y haremos click en "aplicar cambios de offset".

3b_rsball-1.png
Cambiando offsets con Rsball

Ahora, el Pokémon número 252 tiene asignado nuestro retrato como sprite.

Tercer y último paso: Usar el comando showpokepic en un sprite para mostrar el retrato

El showpokepic

Ahora viene la parte más importante. En un script, debemos introducir los siguientes comandos justo antes de la msgbox correspondiente, para que aparezca nuestro retrato:

special 0x140
showpokepic 0xA 0xB 0xC
hidebox 0x0 0x0 0x1D 0x13

Las letras que salen en el código significan lo siguiente: (A): número hexagesimal del Pokémon del cual queremos mostrar su sprite. Estos son los números que corresponden a los 25 espacios vacíos: FC, FD, FE, FF, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 10A, 10B, 10C, 10D, 10E, 10F, 110, 111, 112, 113, 114. El resto de números podéis encontrarlos en Códigos GBA. (B): coordenada X (posición horizontal en la que se mostrará el sprite) (C): coordenada Y (posición vertical en la que se mostrará el sprite) (D) i (E): posición en la que se "borrará" la caja de texto. (F) i (G): tamaño (ancho y altura respectivamente) que tendrá el "borrador" de la caja de texto.

Vamos a explicar un poco más toda la estructura de los comandos. En primer lugar encontramos el comando "special 0x140". Este comando hará que nuestro showpokepic se muestre con los colores correctos. Si no lo usáramos, se vería de color negro y azul.

Luego tenemos el "showpokepic" en sí, con tres indicadores: Pokémon a mostrar y sus dos coordenadas de posición.

Finalmente tenemos un comando curioso, el "hidebox". ¿Os habéis fijado en la imagen de un Pikachu que hemos puesto antes? Ese Pikachu tiene un "borde", una caja de texto, a su alrededor. Lo que hace "hidebox" es borrar ese borde. Simplemente tenéis que poner los números adecuados en (D), (E), (F) y (G) para que el "hidebox" abarque lo suficiente como para borrar toda la caja.

Lo más adecuado es usar los parámetros que salen en el ejemplo (hidebox 0x0 0x0 0x1D 0x13), ya que con ellos se tapa cualquier caja que pueda aparecer en la pantalla, de modo que el showpokepic puede hacerse en la posición que se quiera sin tener que modificar el hidebox.

Ejemplo de script

Para entenderlo mejor, observaremos un script de ejemplo (usando la última versión de XSE):

'---------------
#dynamic 0x800000
#org @principal
faceplayer
>>>call @cara [desde aquí llamamos el script, justo antes de la msgbox]
msgbox @mensaje MSG_FACE
hidepokepic
end

>>>#org @cara
>>>special 0x140
>>>showpokepic 0xFC 0x15 0x6
>>>hidebox 0x0 0x0 0x1D 0x13
>>>return

'---------
' Strings
'---------
#org @mensaje
= Hola, Ana, ¡soy tu doble! :3

Tenéis indicado con unos signos ">>>" (que debéis borrar al insertar el script) el lugar donde está el showpokepic. En este script lo hemos puesto separado del script principal, en un offset a parte, y lo hemos "llamado" con un comando call. De esa manera, no gastamos espacio inútil poniendo una y otra vez los comandos, sino que los ponemos una sola vez y después sólo hace falta llamarlos desde el script principal.

Recordad que después del showpokepic hay que poner un hidepokepic, porque si no la imagen se quedaría ahí incluso al terminar el script.

Acabando de pulir los detalles gráficos

Una vez guardado el script anterior, y habiéndolo asignado a un mini usando Advance Map, el resultado sería este:

5_retrato_no_se_ve_bien-1.png
Primer resultado del script

Pero ¿qué ocurre? ¿Por qué sale ahí en medio ese interrogante? Pues el culpable es sin duda el "special 0x140": pero no podemos eliminarlo, es absolutamente necesario. ¿Qué hacemos, entonces? Hay más maneras de arreglarlo, pero basta, simplemente, con buscar la imagen del interrogante en UnLZ, guardarla, borrarla con Paint (dejando sólo el color de fondo) e introducirla así en el juego. De esa manera, la imagen del interrogante sigue apareciendo igual, pero no la vemos, porque es transparente.

En UnLZ encontraréis, alrededor del número 200 en Ruby, dos imágenes del interrogante. Sólo tenéis que editar la primera, ya que es esa la que aparece, no la segunda.

Aquí tenemos el interrogante a editar:

6_editandointerrogante-1.png
Editando el sprite del interrogante

Entonces lo guardamos, lo borramos y lo volvemos a insertar, así:

6_editandointerrogante2-1.png
Editando el sprite del interrogante, segundo paso

El resultado sería, pues, el que hemos visto en el vídeo de ejemplo del principio:

7-yasevebien-1.png
Resultado final

¡Ya lo tenemos! A veces puede que haya un pequeño error gráfico y que, durante una milésima de segundo, se vea un trozo del cuadro de texto (por la parte de arriba de la pantalla) antes de que el juego ejecute la orden de esconderlo. Pero se trata de algo menor, pasa pocas veces y apenas se nota.

Detalles finales y conclusión

Este tutorial, por supuesto, podéis aplicarlo igualmente para mostrar la imagen de sprites de Pokémon. Si substituimos, en este caso, el número FC por el número 3, nos saldría la imagen de un Venusaur:

8-venusaur-1.png
Showpokepic con Venusaur

También hay que tener en cuenta que, en este script de ejemplo, hemos hecho que el sprite salga en la parte inferior derecha. Cambiando los números de (B) y (C), podemos hacer que el sprite aparezca donde queramos: más arriba, más abajo, etc.

Todos los gráficos usados como ejemplo en este tutorial (incluídos los del vídeo) pertenecen al autor señalado en cada caso. Si quieres usarlos o modificarlos, deberás tener el permiso del autor.

Hoy habia 7 visitantes (47 clics a subpáginas) ¡Aqui en esta página!

48.858309 2.294533 Eiffel Tower, Paris, France Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis