DarwinBotsManual
Abrir la app EnglishEN

Memoria libre y epigenética

El mapa de las 1000 celdas de memoria de un bot: cuáles usa el motor, cuáles son tuyas, qué se borra solo y qué pasa a los hijos.

Cada bot tiene una memoria de 1000 celdas, numeradas del 1 al 1000. Cada celda guarda un entero; lo que escribe el ADN queda siempre entre −32000 y 32000 (ver Escribir en la memoria). Algunas celdas tienen nombre y las usa el motor para hablar con el bot (son las sysvars); el resto son tuyas. Esta página es el mapa.

El mapa de 1 a 1000

Las celdas con nombre están agrupadas por tema. La lista completa, con lo que hace cada una, está en Todas las sysvars.

CeldasQué hayGrupo
1–12, 18–19Órdenes de movimiento y disparo, edad, masa, .timerMovimiento, Cuerpo, energía y estado
194–221Lo que pasó en el ciclo: velocidad, choques, sabores, borde, posición, díaChoques y golpes, Posición y entorno
300–303, 310–315Reproducción, energía, cuerpoReproducción, Cuerpo, energía y estado
330–331, 335–341Lazos, ADN y virusADN y virus
400–402Sol y conteo de botsPosición y entorno
410–429, 800–819Canales de comunicaciónEntradas y salidas
437–487Lazos y lo que se siente por ellosLazos, Lo que se siente por un lazo (tref*)
501–539Ojos y su configuraciónOjos
685–715Lo que ve el ojo centralLo que se ve (ref*)
721–731La firma propiaLa firma propia (my*)
820–839Defensas y desechosDefensas
900–901, 920–924Disparo hacia atrás, cloroplastosDisparos, Cloroplastos y luz
971–990Memoria genética, sin nombreMemoria genética instantánea (971-975), Memoria genética diferida (976-990)

La memoria libre

Más de 700 celdas no tienen nombre ni las toca el motor. Son estas:

13–17, 20–193, 222–299, 304–309, 316–329, 332–334, 342–399, 403–409, 430–436, 472, 500, 512–520, 530, 540–684, 691–694, 700, 716–720, 732–799, 840–899, 902–919, 925–970, 991–1000

La zona 20–193 es la clásica para variables propias: la mayoría de los bots del Bestiario ponen sus def en 50, 51, 52… Lo que guardás en una celda libre se queda ahí toda la vida del bot, hasta que lo cambies. También se guarda con la simulación.

La celda 221 tiene nombre (.hitang) pero en el DarwinBots 2.48.32 nada la escribe nunca: en la práctica es una celda libre más.

Las celdas con nombre no sirven para guardar

Si escribís en una celda que el motor usa, el motor la pisa. Fijate en este bot:

' La celda de .nrg no sirve para guardar nada
def antes 60
def libre 61

cond
start
*.nrg .antes store
1 .nrg store
1 .libre store
stop

Al correrlo, .nrg vuelve a valer la energía real (3000) en cada ciclo, y eso es lo que la celda 60 copia al ciclo siguiente: el 1 se perdió. En cambio, la celda 61 conserva su 1. Escribir en .nrg tampoco cambia la energía del bot: es solo un número que el motor publica.

Quién más puede escribir tu memoria libre

«Libre» quiere decir que el motor no la usa, no que esté a salvo. Hay cuatro vías que pueden cambiarla desde afuera:

Qué borra el motor y cuándo

El ADN corre en el medio del ciclo; casi todo lo demás (física, visión, disparos) pasa después (ver El ciclo y el orden de las acciones). De ahí salen cuatro comportamientos:

Tipo de celdaEjemplosQué pasa
Sentidos.eye5, .edge, .refxposEl motor los escribe después del ADN; tu ADN los lee en el ciclo siguiente y se borran justo después. Siempre llegan con un ciclo de atraso.
Datos publicados.nrg, .body, .robage, .aimEl motor los reescribe en cada ciclo. Lo que guardes ahí se pierde.
Órdenes.up, .shoot, .aimdxLas escribís vos; el motor las cumple y las pone en 0 en el mismo ciclo.
Configuración.focuseye, .eye5dir, .memloc, .out1El motor las lee pero no las borra: valen hasta que las cambies.

Hay órdenes que no se borran siempre, y conviene conocerlas:

Al nacer

Un hijo nace con la memoria entera en 0. Después el motor completa lo suyo (la energía, el largo del ADN, la cantidad de genes y algunas más) y le pasa dos cosas del padre: el .timer, que sigue contando desde el valor del padre, y la memoria genética. Tus variables de la memoria libre no se heredan: el hijo arranca con ellas en 0.

La memoria genética (971–990)

Las celdas 971 a 990 no tienen nombre, pero el motor las trata distinto: son el único puente de memoria entre un bot y sus hijos. Hay dos zonas.

971–975, instantánea. Al nacer, el hijo recibe una copia de esas cinco celdas del padre. Ya están ahí en su primer ciclo de vida. Ver Memoria genética instantánea (971-975).

976–990, diferida. Al nacer, las quince celdas del padre se guardan aparte, en una reserva del hijo, y le llegan de a una por ciclo y en orden: primero la 976, después la 977, y así hasta la 990, unos quince ciclos después de nacer. Cada entrega tiene dos condiciones:

Ver Memoria genética diferida (976-990).

Este bot cuenta generaciones en la celda 971:

' Cuenta generaciones en la memoria genetica
def generacion 971
def listo 50

' Una sola vez en la vida: suma 1 a lo que heredo
cond
*.listo 0 =
start
.generacion inc
1 .listo store
stop

' Se reproduce a los 10 ciclos de vida
cond
*.robage 10 =
start
50 .repro store
stop

El fundador pone 971 en 1. Su hijo nace con 971 = 1 (copia instantánea) y en su primer ciclo lo sube a 2. La marca de la celda 50 evita que lo sume más de una vez, y funciona justamente porque la 50 no se hereda: el hijo la recibe en 0.

Algunos detalles más:

La dirección 0

El ADN no puede llegar a una celda 0: toda dirección se ajusta al rango 1..1000, y al leer, el 0 cae en la 1000 (*0 y 0 * leen la celda 1000). Un store a la dirección 0 no hace nada. Las reglas, con ejemplos, están en Números y direcciones y Números y direcciones.

Por dentro existe una celda 0, pero la usa solo el motor, como basurero: si un ataque de veneno o toxina apunta a la 340 (.delgene, la que borra genes), el golpe se desvía a la celda 0 y así no puede borrarle genes a nadie. Nadie la lee. Ver Dirección 0.