Registrarse

[Script] GBA | Scripting | Sumar y Multiplicar 2 Variables

Dani_SR_17

¡Pokémon LionHeart!

Sumar y Multiplicar 2 Variables



Hola a todos (Otra vez), hoy traigo un sencillo (Siempre son sencillos :D ) script, que permite sumar y multiplicar 2 variables.

Algo muy básico y útil para lo que no existen comandos ¿:.

Bueno, al turrón, aquí tenéis unas ScreenShots para que veáis que no miento (Los Tiles son de Zein)




Aquí tenéis los Scripts listos para descargar:



Y aquí tenéis los Scripts:


Suma de 2 Variables

Código:
#dynamic 0x800000

#org @start
setvar 0x40FF 0x2 'Nº para sumar 1
buffernumber 0x0 0x40FF
setvar 0x40FE 0x4 'Nº para sumar 2
buffernumber 0x1 0x40FE
goto @Paso0

'-------------------------------------------------------------------

#org @Paso0 'Compruebo si la 1º var es 0.
compare 0x40FF 0x0
if 0x1 goto @Sumado2 'Es 0, luego el resultado es la 2º variable
if 0x2 goto @Paso1 'No es 0, vamos a la 2º comprobación

#org @Paso1
compare 0x40FE 0x0
if 0x1 goto @Sumado 'Es 0, luego el resultado es la 1º variable
if 0x2 goto @Suma1yResta1 'No es 0, vamos a sumar

#org @Suma1yResta1 'Suma 1 a la 1º y resta 1 a la 2º
addvar 0x40FF 0x1
subvar 0x40FE 0x1
goto @Paso1 'Vuelve a comprobar si la 2º es 0


'-------------------------------------------------------------------


#org @Sumado 'Script acabado solución en la 1º var
buffernumber 0x2 0x40FF
msgbox @LaSumaEs 0x6
end

#org @Sumado2 'Script acabado solución en la 2º var
buffernumber 0x2 0x40FE
msgbox @LaSumaEs 0x6
end


'-------------------------------------------------------------------


#org @LaSumaEs
= La suma de:\n[buffer1] y [buffer2]\les [buffer3]

Multiplicación de 2 Variables

Código:
#dynamic 0x800000

'Antes de nada, recuerdo que multiplicar 2 por 3, es sumar 3 veces 2.

#org @start
setvar 0x40FF 0x2 'Nº para multiplicar 1
buffernumber 0x0 0x40FF
setvar 0x40FE 0x4 'Nº para multiplicar 2
buffernumber 0x1 0x40FE
goto @AMultiplicar

'-------------------------------------------------------------------

#org @AMultiplicar
copyvar 0x40FD 0x40FF 'Copias la variable principal, luego usaras esta como "pivote"
goto @Paso0

#org @Paso0
compare 0x40FE 0x0
if 0x1 goto @EsCero
if 0x2 goto @Paso1

#org @Paso1 'Segunda comprobación
compare 0x40FE 0x1
if 0x1 goto @Fin 'Es 1, luego da lo mismo
if 0x2 goto @Paso2 'Ninguno de los casos anteriores, empieza el script

'-------------------------------------------------------------------

#org @Paso2 'El paso principal del script
copyvar 0x40FC 0x40FD 'Como vamos a modificar 40FF y otra variable más, guardamos el valor original de 40FF en 40FD y usamos 40FC
goto @Paso2-1

#org @Paso2-1
compare 0x40FC 0x0 'Vemos si 40FC es 0
if 0x1 goto @Paso2-2 'Si es 0, ya esta
if 0x2 goto @Suma1yResta1 'Si no, se suma y resta 1

#org @Suma1yResta1
addvar 0x40FF 0x1
subvar 0x40FC 0x1
goto @Paso2-1 'Volvemos al inicio

#org @Paso2-2
subvar 0x40FE 0x1 'Disminuimos en 1 la variabble 0x40FE
compare 0x40FE 0x1 
if 0x1 goto @Fin 'Ya esta multiplicado
if 0x2 goto @Paso2 'Vuelve al Paso 2, pero ahora 40FE vale 1 menos


'-------------------------------------------------------------------


#org @Fin 'El resultado es el valor de la 1º variable
buffernumber 0x2 0x40FF
msgbox @LaMultiplicaciónEs 0x6
end

#org @Fin2 'El resultado es el valor de la 2º variable
buffernumber 0x2 0x40FE
msgbox @LaMultiplicaciónEs 0x6
end

#org @EsCero 'Si alguno es 0
setvar 0x40FF 0x0
buffernumber 0x2 0x40FF
msgbox @LaMultiplicaciónEs 0x6
end

'-------------------------------------------------------------------

#org @LaMultiplicaciónEs
= La multiplicación de:\n[buffer1] y [buffer2]\les [buffer3]


Espero que os guste y os sirva :rolleyes:


Agradecimientos a @Sayer301, que le doy la lata muchos días con el tema de los scripts :shy:
 

Laquin

Usuario mítico
Pero tío, de donde sacas esas cosas!!!???
Jajajajaj, es increíble, de verdad, esto ya me ha sorprendido muchísimo!!
Muchas gracias! :D
Salu2!

EDIT: Erm... lo acabo de probar y... está muy bien y tal, pero si alguien lo juega pensará que es un texto normal en el que diga eso... Y sí, he probado también con 8+5, y me ha dado 13, pero al jugarlo parece que se ha puesto un texto normal...
EDIT2XD: Aunque si lo usamos con otras cosas si que puede dar buen resultado... ^^
EDIT3XD: Retiro lo dicho, sigue pareciendo un textbox normal :/
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Hmm, así que utilizando recursividad eeh?? xD

Me gusta bastante la idea y para quien no quiera utilizar el parche de JPAN es muy util. JPAN lo incluyó, además con la función de restar y dividir si no me equivoco, pero vamos, que es algo bastante eficaz.

Buen trabajo :)
 

Master Brock

Miembro insignia
Miembro insignia
Usuario de Platino
Otro scripter brillante en formacion...

Yo la lo dije por skype, sera muy util y estas mejorando muchiiisimo, enserio, molas 1000

Y nada, esta bastante bien todo, creo que llegaras muy lejos en este mundillo
 

RedMort

Aprendiendo Decomp
Hace un tiempo puse una duda relacionada a este tema, sabía que los buffers almacenaban información, pero no sabía cómo y me daba "miedo" tocarlos.
Ahora lo he entendido, y más que un aporte de scripts me ha servido como tutorial.
Que sepas que has ayudado un montonazo a mi hack con esto, en una parte muy importante de él.

Gran trabajo, y espero que sigas así :)
 

Dani_SR_17

¡Pokémon LionHeart!
Hace un tiempo puse una duda relacionada a este tema, sabía que los buffers almacenaban información, pero no sabía cómo y me daba "miedo" tocarlos.
Ahora lo he entendido, y más que un aporte de scripts me ha servido como tutorial.
Que sepas que has ayudado un montonazo a mi hack con esto, en una parte muy importante de él.

Gran trabajo, y espero que sigas así :)
Me alegro de que te sirva :D

Lo pongo en scripts, porque el primero lo puse en tutoriales y me lo movieron, pero vaya, que pueden servir para las dos cosas, por si te sirve en breve voy a sacar uno de restar y dividir.
 

L!no

GBA Developer
es un buen script, pero multiplicar es mas facil con ASM:

Código:
.align 2
.thumb

.main
push {r0-r1, lr}
mov r0, #0x[COLOR="Red"]2[/COLOR]
mov r1, #0x[COLOR="Red"]4[/COLOR]
mul r0, r0, r1
ldr r2, .VAR
strh r0, [r2]
pop {r0-r2, pc}

.VAR:
.word 0x020270B6 + (0x800D * 2)
esta rutina funciona multiplicando los datos de mov r0 y mov r1 guardandola en LASTRESULT.la rutina es facilmente modificable para albergar los numeros que desees cambiando los numeros en ROJO.

y para sumar es casi lo mismo:

Código:
.align 2
.thumb

.main
push {r0-r1, lr}
mov r0, #0x[COLOR="Red"]2[/COLOR]
mov r1, #0x[COLOR="Red"]4[/COLOR]
add r0, r0, r1
ldr r2, .VAR
strh r0, [r2]
pop {r0-r2, pc}

.VAR:
.word 0x020270B6 + (0x800D * 2)
aun asi,buenos scripts
 
Arriba