Registrarse

[Scripting] Haciendo un bucle en XSE

Katherine

Omnipresente
Miembro de honor
Mira, es muy triste que tenga que llegar a este nivel, pero es que hay gente que se supone que medianamente sabe de scripting pero después no te sabe hacer un mísero bucle. Así gente a patadas me he encontrado. Claro, tampoco les culpo de que no esté explicado absolutamente todo en un tutorial (guiño guiño, el de Xabier que hoy en día es referencia, guiño guiño), pero vaya, que esto ya roza lo absurdo. Pensé que nunca más haría un tutorial relacionado con algo de RH porque ya hace siglos que no toco nada.

Así que aquí estoy, revelando que todo script no tiene por qué ser finito (funcional, por supuesto, ya si se congela la pantalla porque habéis hecho algo mal es cosa vuestra). Explicaré cómo hacer simples bucles, básicamente os revolucionaré el scripting a los que nunca habéis hecho uno y pensaréis: ¿cómo he podido ser tan idiota? Sí, así es. Hoy os explicaré algo que es muy simple, que solo hay que usar un goto, un simple GOTO.

Puedes empezar compilando esto, compañero del metal:

Código:
#dynamic 0x800000
#org @inicio
msgbox @msg 6
goto @inicio

#org @msg
= Hola, soy un mensaje infinito.
Wow, ¿qué está pasando? Bueno, creo que ni hace falta que lo explique si tienes unas mínimas nociones de Scripting, pero sí, hará falta porque no hay que dar nada por explicado: básicamente estamos llamando al mismo offset una y otra vez. El script empieza por un offset, ejecuta un msgbox y seguidamente vuelve a llamarse dónde este empezaba en la última línea, provocando así, algo que no termina nunca.

Sin embargo, eso no queda ahí, y los más espabilados ya os habréis dado cuenta de que esto da muchísimo juego para optimización de código, reduciendo así enormemente los bytes que desperdiciamos con un mísero bucle, pero claro, tendré que dar algunas pistas a los que necesitáis un pequeño empujoncito, así que aquí va el segundo script:

Código:
#dynamic 0x800000
#org @inicio
setvar 0x4011 0 'Se supone que $4011 ya es cero, pero si la solemos usar para bucles es posible que tengamos que inicializarla de nuevo.
setflag 0x828
msgbox @msg 6
goto @loop

#org @loop
addvar 0x4011 1
givepokemon 0x4011 5 0 0 0 0
compare 0x4011 6
if 3 goto @loop
end

#org @msg
= ¡Te voy a dar seis Pokémon!
Y como a algunos os dará pereza compilarlo por vosotros mismos y ver el resultado, aquí una imagen del equipo Pokémon:


Podríamos usar seis givepokemon, sí, pero los bucles nos pueden echar un cable en eso. Quizá en este caso no supone un ahorro y solo es complejidad añadida, pero hay muchísimos casos en los que podemos simplificar todo con un simple bucle.

Y ahora que has leído hasta aquí y piensas que quizá tengo algo más interesante que decir, es sí: no uses XSE por dios, y usa RA que te permite hacer lo mismo más legible con estructuras de alto nivel como un while. RA es RedAlien, otro editor de scripts, y el mejor que hay ahora mismo, así que ya estás tardando en descargártelo si no lo has probado nunca. Ya es hora de abandonar un poco el mítico XSE, que parece que a todos les da miedo probar algo nuevo pero objetivamente mejor.

No hay nada más que decir, es una chorrada, pero hay tanta gente que lo desconoce que tenía que explicarlo en un tema por muy tonto que sea. Quiero ver el tema lleno de comentarios con kokoros azules, btw (?)

EDIT: Como me ha comentado Franco, se pueden usar variables temporales y es lo ideal para estos casos. Pero tampoco quería introducir mucha información y que os explotara el cerebro (?).

¡Nos vemos! Miau revoir~.
 
Última edición:

FelixTheCat

Profesional de WaH
Respuesta: [Scripting] Haciendo un bucle en XSE | Revelando porque no todo script tiene que ser finito

Bueno...
¿cómo he podido ser tan idiota? Sí, así es.
describe mi situación actual.
Gracias por el tutorial, el futuro es pasar links de tutoriales para absolutamente todo (?)
Bastante bien explicado y con una imagen, no se puede pedir mas
Debo ser el único subnormal que tiene problemas con el RA, aun así, lo voy a volver a usar, presión social ¯\_(ツ)_/¯



Arrivederci~
 

MichaKing

Grafista avanzado
Respuesta: [Scripting] Haciendo un bucle en XSE | Revelando porque no todo script tiene que ser finito


Vaya vaya... un tutorial que aunque parezca básico, puede revolucionar completamente la manera de scriptear para algunos. Me parece increíble que con un simple Goto se puedan hacer cosas como estas, sin dudas es una muestra de ingenio el poder hacer estos bucles. Veré qué si se me ocurre algo útil usando este sencillo y práctico método.

Se despide, MichaKing~
 

Kurilin

Usuario de platino
Respuesta: [Scripting] Haciendo un bucle en XSE | Revelando porque no todo script tiene que ser finito

El tutorial es muy bueno, debería tener más comentarios ya que está bien hecho y puede llegar a ser muy útil, muchas gracias y que te valla bien.
 
Arriba