tuts_gba
Thread Id: 9641
Thread Name: R | Gráficos | Cómo introducir retratos (portraits) en un script (nivel fácil)
#0
Ray Laé Àlfori 0
Ruby/Sapphire: Cómo introducir retratos (portraits) en un script para que aparezcan durante el diálogo (nivel fácil)

Antes de empezar

Introducción


Éste es un tema por el cual ya me han preguntado varias personas, y creo que sería interesante compartirlo con todos vosotros, ya 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 (como me pasó a mí xD). En este tutorial os explicaré cómo podéis 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, gracias al cual se me ocurrió la idea: http://www.pokecommunity.com/showthread.php?t=168158 Simplemente he reducido un poco el proceso, quitando alguna cosa innecesaria, y os lo transmito a vosotros de forma más ordenada y completa (y en español ;p).

En este tutorial usaré como ejemplo un retrato hecho por mí, y en las scans también veréis gráficos que estoy elaborando para mi hack (ya que como base he usado una ROM de prueba para dicho hack, para ahorrar tiempo y dejaros con la intriga). No uséis ni los tiles, ni el retrato, por favor. Son para mi proyecto :p


¿Qué necesitaremos?



Conocimientos previos "recomendados" para poder entender el tutorial



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 mi caso, usaré este retrato como ejemplo:





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.




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:





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 (sería un poco raro encontrarse con una "cabeza flotante" de un personaje en medio de la hierba xD). En mi caso, asignaré mi 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".




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 he puesto significan lo siguiente:
(A): número hexagesimal del Pokémon del cual queremos mostrar su sprite. Podéis encontrar los números en la wiki de WAH, pero por si acaso, os pongo aquí los 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.
(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.

Bien, ahora toca explicar todo esto xD 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 he 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 (gracias a Rogy por esta última info ;p).



Ejemplo de script

Para que lo entendáis mejor, os pondré aquí 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

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



Os he indicado en negro el lugar donde está el showpokepic. Lo he puesto separado del script principal, en un offset a parte, y lo he "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 xD


Acabando de pulir los detalles gráficos

Una vez guardado ese script que os he puesto, y habiéndolo asignado a un mini usando Advance Map, el resultado sería este:




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 (lo he probado y es esa la que aparece, no la segunda).

Aquí tenemos el interrogante a editar:




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



El resultado sería, pues, el que os he mostrado al principio:




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. De todos modos, si alguien conoce una solución, que la diga xD


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 mi caso, el número FC por el número 3, nos saldría la imagen de un Venusaur:





También hay que tener en cuenta que, en mi script, he decidido 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. Pero si hacemos eso, también tendremos que cambiar el tamaño y la posición del hidebox para que tape bien la caja de texto.

Espero que todo esto os haya sido útil ^^ Imagino que este método puede perfeccionarse aún más, pero éstas son las conclusiones a las que yo he llegado y creo que el sistema funciona bastante bien. Si tenéis alguna sugerencia o duda sobre el tutorial, no dudéis en planteármela aquí =) Cuando pueda también pondré este tutorial en la wiki.


¡Saludos y suerte!


Ray Laé Àlfori (Rayku Rayquaza)


PD: el tutorial ya está en WAH: http://wahackpokemon.com/wiki/C%C3%B3mo_introducir_retratos_(portraits)_en_un_script
#1
CKaktus 27497
¡Muy buen tuto!
Hasta ahora no sabía como se hace.
Muchas gracias por este tutorial tan útil en la vida del Rom-Hacking.
¡Gracias y +gracias!
#2
.:F?an The KilleR:. 13541
Magnífico tutorial, que finalmente no reviste demasiada dificultad pero que no se nos suele ocurrir, siempre me he preguntado si se podría cambiar la posición del showpokepic y con tu tuto se me disiparon todas las dudas, por supuesto...

¡¡+1 Gracias!!

Salu2.
#3
SonicXBionicle114 15992
This helped me alot,now I can do this for my ROM, Thanks!!!
#4
Edo 12321
Hace tiempo que estaba esperando un tutorial que desarrolle este tema, ¡felicitaciones!
Al parecer todo es muy fácil de realizar, y tiene un resultado magnifico.
En fin, te has ganado un +Gracias (no te doy repu por que me da flojera).
Adiós, muchas gracias por el aporte.

Atte. Edo~
#5
Gut_Bro 14808
Oh, esto es genial!

Bueno, todo esta perfectamente explicado y se entiende al 100%. Lo probé hace tiempo con el tuto de pokéco y me funcionó, más no pude hacerlo funcionar en FR.

¿Conoces alguna forma de hacerlo en FR? Si esto se pudiera aplicar también allí, yo sería eternamente feliz (Bueno, solo por un ratito :D)

En fin, te doy un +Gracias y vas a mis favoritos :D

¡Felicidades!
#6
Gershel 12314
:O Ray Laé Àlfori!! Que buen tutorial, ya sabía que lo ibas a aplicar a tu hack pero no creía que harías un tutorial tan pronto :D El tuto está perfectamente redactado y muy bien complementado con imagenes.
Pues está perfecto, es un gran avance, creo que no había visto un tutorial sobre esto antes. Pues muchisimas gracias, me servirá demasiado!
Te mereces un + Gracias mío y muchos más.
Un saludo!
#7
RogellParadox~ 13353
congratualciones por el tutorial ,me servirá futuramente!!
#8
Nath 14572
Gran tutorial, servirá cuando haga mi hack.=P
Ah, y servirá de mucha ayuda, gracias.=P
.Techno
PD: ¡333 mensajes! x3
#9
trifindo 12318
Ja, ja, ja...! Te mereces mis enhorabuenas! :)
Parece que has decubierto mi truco en el omicrón. :OMG:
Me alegra que ahora más hackers lo puedan usar. :D
#10
Stupidest Kiwi Ever 15154
¡Genial! Está muy bien desarrollado y se entiende todo, es un gran aporte a la comunidad, ya que yo estaba buscando como hacerlo, gracias.
Espero que puedas poner como hacerlo en FR, porque en mi caso lo uso como base T_T, bueno aun así te mereces un +Gracias, nos vemos. ;)
#11
ObscureSideMt2 14003
Me encanta! genial tuto! si de aqui a unos años vuelvo al romhacking seguro que usaré esto para algo xD

+gracias sirve para esto ^^
#12
Shawn 14970
Woow genial, muy buen tutorial, yo ya lo probé en mi hack y funcionó ^^
Gracias, ayudará a mejorar la estetica de los hack en cuanto a scripts :XD:
salu2!!
+ Gracias
#13
Rogy 12282
Te me has adelantado, yo quería hacer el tutorial...

De todas maneras, creo que los parámetros del hidebox se pueden mejorar.
En vez de esconder todo cuadro que esté en esas coordenadas, mejor ajustar los parámetros a toda la pantalla, así se da la libertad de poder poner el retrato (pokétexto llamado por mí) donde te plazca, así:

'---------------
#org 0x1A037F
lock
special 0x140 'Especial para ajuste de paletas
showpokepic 0x7 0x16 0x7 'Crea caja con Pokémon
hidebox 0x0 0x0 0x1D 0x13 'Esconde cualquier caja que se encuentre en la pantalla
msgbox 0x88000F2 MSG_NORMAL '"¡Sqüeeeero, sqüé!"
waitmsg
hidepokepic 'Esconde caja(que ya no está) y Pokémon
release
end

Tienen que ser esos parámetros justos para que no dé errores. Si nos pasamos con la altura o anchura, que te cuente Sca, que me ayudó a ajustar los parámetros para esto, los minis que se encuentren en la zona del cuadro que desaparece se vuelven feas rayas verticales.

¡Saludos! (y a ver si termino el pixel over de nuestro reto...)
#14
Sr. kaktus 16532
Buenísimo tutorial!
Puede que nos sirva en nuestro hack Dreams to Emptiness :D
#15
Ray Laé Àlfori 0
Gracias a todos por comentar, me alegro mucho de que el tutorial os resulte útil =)

Posteo para avisar de que he modificado el tutorial, añadiendo los parámetros del hidebox que ha posteado Rogy, que son perfectos para cualquier tipo de showpokepic. Muchas gracias (de parte de todos) por la información, Rogy ^^

También he modificado con la nueva info el tutorial en la wahackpedia ( http://web.wahackforo.com/wiki/C%C3%B3mo_introducir_retratos_(portraits)_en_un_script )

Saludos a todos y gracias =)


Ray Laé Àlfori (Rayku Rayquaza)
#16
J.com 12785
Muy buen tuto!!
Una pregunta: En vez de usar uno de los 386 pokemon (+ las interrogaciones) ¿como puedo hacerlo para usar una imagen de un entrenador?
(las 82 imagenes de entrenadores)

Saludos!
#17
Rogy 12282
Iniciado por €r-JavÿtO 57

Muy buen tuto!!
Una pregunta: En vez de usar uno de los 386 pokemon (+ las interrogaciones) ¿como puedo hacerlo para usar una imagen de un entrenador?
(las 82 imagenes de entrenadores)

Saludos!


Eso está todavía en investigación, si no me equivoco, así que habrá que esperar
#18
wobba_ffet 12383
tengo una duda con el metodo
cundo usas las imagenes de los signos de interrogacion no se ve afectada la pokedex
por que tenia entendido que esas imagenes arruinaban la dex
#19
Ray Laé Àlfori 0
Hola a todos =) Me paso para responder a las dudas ^^

Iniciado por €r-JavÿtO 57

Muy buen tuto!!
Una pregunta: En vez de usar uno de los 386 pokemon (+ las interrogaciones) ¿como puedo hacerlo para usar una imagen de un entrenador?
(las 82 imagenes de entrenadores)

Saludos!

Hazle caso a Rogy xD Sinceramente, no sé cómo hacerlo. Siento no poder ayudarte ^^U Si algún día se descubre cómo, ya actualizaré el tutorial =)

Iniciado por dm gump

tengo una duda con el metodo
cundo usas las imagenes de los signos de interrogacion no se ve afectada la pokedex
por que tenia entendido que esas imagenes arruinaban la dex

Bueno, técnicamente no usas las imágenes con signos de interrogación, ya que (como explico en el tutorial) en realidad asignas a los Pokémon una imagen distinta usando RS-Ball. Pero entiendo lo que quieres decir. Y no, no afecta para nada ^^ Sólo se produce error con la Pokédex cuando pones alguno de esos 25 Pokémon en estado salvaje, lo capturas y el juego intenta mostrar sus dados de la Dex. Como esos 25 no están en la Dex, el juego se congela. Pero haciendo esto (un showpokepic) no hay problema, porque la Pokédex no se ve afectada en ningún modo =)

Por otro lado, añado (la otra vez no dije nada sobre eso ^^U) que lamentablemente no sé cómo aplicar esto a FR, y mi ROM de trabajo es Ruby, así que tampoco lo he investigado nunca. Sin embargo, si alguien descubre un modo de hacerlo, que me lo diga y mejoraré el tutorial para que sirva para ambas bases =)

¡Saludos y suerte a todos!


Rayku Rayquaza (Ray Laé Àlfori)