Jaizu
Usuario mítico
Buenas!
A veces se me va un poco la olla y me pongo a pensar mucho, a buscar ideas y diseñar las líneas de nuevos conceptos para mi hack. Algo que siempre me dio mucha pereza fue hacer scripts. Yo y mi vieja(y actualmente inexistente) manía de dejar los scripts a medias siempre me hacía malgastar mucho espacio en mi ROM.
Scripteando en una copia
El primer truco para ahorrar espacio es hacer los scripts en una copia de tu ROM. Una vez hecho en una copia pásalo a tu nueva ROM, esta vez usando DYNAMIC para buscar TODOS los offsets de tu script. Quizás a la gente le parecerá una tontería, pero preguntarle a Ángel Asakura, por ejemplo, cuán importante es el espacio cuando estás acabando tu Hack ROM.
¿Y si quiero hacer cambios? ¿Perderé espacio sí o sí?
¡No! Aquí es dónde mi ingenio se lució y pensé, ¿por qué no reemplazar un comando por otro que me permita cambiar más scripts?
Es decir, si tengo un msgbox y quiero un applymovement después de mi caja de texto, ¿puede arreglarlo? Si tu comando tiene 5 bytes o más sí.
¿Y por qué 5 bytes o más?
Porque lo que haremos será reemplazar nuestro comando por uno de 5 bytes, el comando call.
¿Por qué 5 bytes y no 4?
Aunque usemos un:
¿Comando + 80 + 00 + 00 no son 4 bytes?
No, porque la dirección se transforma en:
Por lo cual son 5 bytes: COMANDO + 08 + 80 + 00 + 00
¿Algún ejemplo de como quedaría mi script agrandado sin perder espacio?
¡Claro!
Imaginemos que nuestro script es un t-box, es decir, tenemos nuestro script al que así:
Y ahora quiero añadirle un applymovement con su waitmovement. Bien, es bastante sencillo, tan solo reemplazamos nuestro msgbox por un call.
¿Cuántos bytes ocupa un msgbox? 7 bytes
Si alguien recuerda el viejo XSE, el msgbox se hacía tal que así
Es por eso que ocupa 7 bytes, porque realmente son dos comandos(el que carga la dirección y el que define el tipo)
Y como todos sabemos; 7 > 5, por lo que podemos reemplazar nuestro comando por un call y hacer nuestro puente deseado para ahorrarnos un par de bytes! :angel:
En fin, sé que para un script así son pocos bytes, pero si queremos rehacer viejos scripts tenemos dos opciones:
No soy la cosa más eficiente haciendo tutoriales, pero espero que os sirva.
Agradecimientos a cosarara por ayudarme a comprender la cantidad de bytes de varios comandos.
Edito: El XSE os dice cuantos bytes ocupa cada comando
A veces se me va un poco la olla y me pongo a pensar mucho, a buscar ideas y diseñar las líneas de nuevos conceptos para mi hack. Algo que siempre me dio mucha pereza fue hacer scripts. Yo y mi vieja(y actualmente inexistente) manía de dejar los scripts a medias siempre me hacía malgastar mucho espacio en mi ROM.
Scripteando en una copia
El primer truco para ahorrar espacio es hacer los scripts en una copia de tu ROM. Una vez hecho en una copia pásalo a tu nueva ROM, esta vez usando DYNAMIC para buscar TODOS los offsets de tu script. Quizás a la gente le parecerá una tontería, pero preguntarle a Ángel Asakura, por ejemplo, cuán importante es el espacio cuando estás acabando tu Hack ROM.
¿Y si quiero hacer cambios? ¿Perderé espacio sí o sí?
¡No! Aquí es dónde mi ingenio se lució y pensé, ¿por qué no reemplazar un comando por otro que me permita cambiar más scripts?
Es decir, si tengo un msgbox y quiero un applymovement después de mi caja de texto, ¿puede arreglarlo? Si tu comando tiene 5 bytes o más sí.
¿Y por qué 5 bytes o más?
Porque lo que haremos será reemplazar nuestro comando por uno de 5 bytes, el comando call.
¿Por qué 5 bytes y no 4?
Aunque usemos un:
Código:
call 0x800000
No, porque la dirección se transforma en:
Código:
call 0x08800000
¿Algún ejemplo de como quedaría mi script agrandado sin perder espacio?
¡Claro!
Imaginemos que nuestro script es un t-box, es decir, tenemos nuestro script al que así:
Código:
#org @inicio
msgbox @texto 0x6
end
¿Cuántos bytes ocupa un msgbox? 7 bytes
Si alguien recuerda el viejo XSE, el msgbox se hacía tal que así
Código:
msgbox @texto
callstd 0x6
Y como todos sabemos; 7 > 5, por lo que podemos reemplazar nuestro comando por un call y hacer nuestro puente deseado para ahorrarnos un par de bytes! :angel:
Código:
#org @inicio
call @nuevo
end
#org @nuevo
msgbox @texto 0x6
applymovement move_player @movimiento
waitmovement 0x0
return
- Hacer el puente que explico
- Borrar el viejo script por completo y rehacerlo
No soy la cosa más eficiente haciendo tutoriales, pero espero que os sirva.
Agradecimientos a cosarara por ayudarme a comprender la cantidad de bytes de varios comandos.
Edito: El XSE os dice cuantos bytes ocupa cada comando
Tutorial originalmente creado para RomHack.it | No difundir sin permiso