dupbool
Duplica el valor de arriba de la pila booleana. Sirve para guardar una condición y usarla de nuevo, por ejemplo para anidar condiciones en el cuerpo.
Datos
dupbool apila una copia del valor de arriba de la pila booleana. Con la pila vacía no hace nada.
Su uso es anidar condiciones dentro del cuerpo: guardás una copia de la condición de afuera, la combinás con una de adentro usando and, y al terminar un dropbool te devuelve la de afuera intacta para la siguiente. El bot This'n'That 1.01 (Peksa), del Bestiario, lo hace para equilibrar energía (.nrg) y cuerpo (.body):
' This'n'That 1.01 (Peksa): equilibra energía y cuerpo
cond
start
*.nrg *.body !%= dupbool
*.nrg *.body > and
*.nrg *.body sub 100 ceil .strbody store dropbool
*.body *.nrg > and
*.body *.nrg sub 100 ceil .fdbody store
stopLa condición de afuera es «energía y cuerpo difieren en más de un 10 %» (!%=). La pila booleana pasa por:
| Después de | Pila booleana (tope a la derecha) |
|---|---|
!%= dupbool | difieren, difieren |
> and | difieren, (difieren y sobra energía) |
dropbool | difieren |
> and | (difieren y sobra cuerpo) |
Así, si sobra energía la pasa al cuerpo (.strbody) y si sobra cuerpo lo pasa a energía (.fdbody), de a 100 como mucho (ceil se queda con el menor). Un bot que arranca con 3000 de energía y 1000 de cuerpo se detiene en 1300 y 1170.