Registrarse

{FR} Crear bucles en los scripts

Estado
Cerrado para nuevas respuestas.

Toni

Leyenda de WaH
Pues lo dicho, ¿Se pueden crear bucles para ahorrar espacios en la rom? Si se puede agradecería que me comentaseis como. Gracias.
 

kakarotto

Leyenda de WaH
Te refieres crear unas instrucciones que en varios scripts pudiera llamarlos tantas veces como kisieras?
 

Toni

Leyenda de WaH
No, me refiero a poder llamar a un pointer hasta cierto lugar y luego poder continuar scripteando a partir de ahí para no gastar espacio tonto.
No sé si me estoy explicando.
 

Rubire4

Usuario mítico
No entiendo muy bien lo que quieres hacer, ¿puedes poner un ejemplo o especificar más?
 

Toni

Leyenda de WaH
No entiendo muy bien lo que quieres hacer, ¿puedes poner un ejemplo o especificar más?
En una tienda hay una master ball y una poción.
Lo que quiero hacer es que cuando se active una flag hayan una master, uan poción y un carameloraro, pero que pueda aprovechar el pointer donde esté la master y la poción y sumarle el carameloraro.
Solo es un ejemplo.
No sé, es difícil de explicar.
Sorry.
 

Rubire4

Usuario mítico
@Toni Podrías hacer ésto, pero no sé si es lo que buscas, no te explicas muy bien xD:

Código:
#dynamic 0x700000

#org @start
lock
faceplayer
checkflag 0x(Flag)
compare LASTRESULT 0x1
if 0x1 goto @start2
pokemart @mart1
release
end

#org @@start2
pokemart @concarameloraro
release
end

#org @mart1
#raw word 0x(masterball)
#raw word 0x(pocion)

#org @concarameloraro
#raw word 0x(masterball)
#raw word 0x(pocion)
#raw word 0x(carameloraro)

Y para coger cada pointer, en vez de copiar directamente el primer offset al compilar, copias tambien los de los objetos del pokemart.
 
Última edición:

MrNightology

Usuario mítico
Un bucle en programación tiene una sintaxis tal que por ejemplo en C/C++:
Código:
int i=0;
while(i < N){
     //codigo a ejecutar
     i++;
}

o también:

for(int i=0; i<N; i++){
     //codigo a ejecutar
}
Supongo que en cuanto a scripts de gba, el código podría ser algo así:
Código:
#org @inicio
setvar 0x[VARIABLE] 0x0 //Inicio variable a 0; int i=0;
goto @bucle

#org @bucle
compare 0x[VARIABLE] 0xN
if 0x1 goto @fin
//codigo a ejecutar
addvar 0x[VARIABLE] 0x1 //Sumo 1 a la variable = i++;
goto @bucle

#org @fin
end
Espero haberte ayudado.
 

kakarotto

Leyenda de WaH
La definicion de bucle es tal que asi pero el kiere hacer algo como asi:

Function darMasterPocion(){
...
}

Y luego en otro script hacer en plan:
#dynamic 0x800000
lock
faceplayer
darMasterPocion()
Giveitem carameloraro
Release
End

Me equivoco?
 

Cheve

MoonLover~
Miembro de honor
Poderse se puede, pero para lo que tu quieres en específico no. Porque la tienda carga los datos (items) que tu le das todos al mismo tiempo, no va de uno en uno. (es decir no puedo poner dos pokemart y que uno se "sume" al otro)
 

Toni

Leyenda de WaH
Poderse se puede, pero para lo que tu quieres en específico no. Porque la tienda carga los datos (items) que tu le das todos al mismo tiempo, no va de uno en uno. (es decir no puedo poner dos pokemart y que uno se "sume" al otro)
Yo no lo quiero para un pokemart, solo era por poner un ejemplo.
En realidad lo quiero para mi sistema de alquimia, donde gasto muchos bytes tontos.
 

Xabier2012

Usuario mítico
Siempre puedes llamar offsets y por medio de returns seguir el script.
Por ejemplo, si utilizas muchas veces el comando giveiten 0x? 0x?, lo que puedes hacer es un:

Código:
#org @daritem
giveitem 0x? 0x?
return
Y cada vez que quieras utilizar ese comando llama al offset generado en @daritem desde cualquier script. Claro está que con este ejemplo no se gana mucho puesto que el propio call 0x????? ya gasta espacio, pero si tienes 3 o más comandos ya te merece la pena.

Por ejemplo, compilas esto:
Código:
#dynamic 0x800000

#org @inicio
sound 0x4B
setvar 0x8004 0xF
setvar 0x8005 0xF
setvar 0x8006 0xF
setvar 0x8007 0xF
special 0x136
waitstate
return
Y se te almacena en el offset 0x800000. Cada vez que quieras generar un terremoto haces un call/goto 0x800000 y te ahorras espacio. Como tiene el return el script continuará cuando acabe el terremoto.
 
Estado
Cerrado para nuevas respuestas.
Arriba