Registrarse

[Scripting] Ahorrando espacio a la hora de modificar scripts

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:
Código:
call 0x800000
¿Comando + 80 + 00 + 00 no son 4 bytes?
No, porque la dirección se transforma en:
Código:
call 0x08800000
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í:
Código:
#org @inicio
msgbox @texto 0x6
end
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í
Código:
msgbox @texto
callstd 0x6
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:

Código:
#org @inicio
call @nuevo
end

#org @nuevo
msgbox @texto 0x6
applymovement move_player @movimiento
waitmovement 0x0
return
En fin, sé que para un script así son pocos bytes, pero si queremos rehacer viejos scripts tenemos dos opciones:

  • 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
 

Master Brock

Miembro insignia
Miembro insignia
Usuario de Platino
El tuto está muy guapo, es muy importante el espacio a la hora de hacer los scripts, que podemos compilar tontamente una y otra vez y malgastamos espacio tontamente.

Lo veo un buen aporte, pasa que la peña comenta antes en Hp Box de un lila(?) antes que esto.

Pues eso, a chuparla, marica
 

Gold

Porrero a tiempo parcial
Miembro insignia
Pues son buenos consejos para quienes no quieran usar espacio extendido, aunque yo en lo personal prefiero usar espacio extendido para esto, igual gracias, de seguro a alguien le va a servir saber esto.
 

Sayer301!

UnityLord!
Miembro de honor
En un sistema que yo ya uso de por sí, pero siempre me ha dado muchísima pereza explicarlo, te agradezco de verdad que lo hayas hecho tu, así solo tendré que pasar el link cuando me pregunten jajajaja.

A ver si te engorilas y traes mas cositas guapeton (K)
 

RedMort

Aprendiendo Decomp
Yo no dejaba scripts a medias, pero si que se me iban ocurriendo nuevas cosas que añadir, y esto en su día me hubiera ayudado un montón.
Es un comando sencillo pero muy útil, gran tuto ^^
 
Arriba