DarwinBotsManual
Abrir la app EnglishEN

Lazos y multicelulares

Cómo se ata un bot a otro, cómo se comporta el lazo como un resorte, qué viaja por él y cómo, con lazos endurecidos, varios bots forman un organismo multicelular.

Un lazo (en inglés tie) une a dos bots. Físicamente es un resorte que los mantiene a cierta distancia; además es un canal: por él cada bot siente al otro, le escribe en la memoria y le pasa o le saca recursos. Con lazos endurecidos, varios bots dejan de ser individuos sueltos y forman un multicelular (multibot): un organismo que reparte la energía, sostiene su forma y se mueve como una sola cosa.

Esta página cuenta el mecanismo de conjunto. Cada celda tiene su página en la referencia, agrupadas en Lazos.

Dos formas de tener un lazo

Lazo de nacimientoLazo hecho con .tie
CuándoTodo parto ata al padre con el hijoCuando el bot lo pide
Cuánto duraSe corta solo a los 100 ciclosHasta que se corte o se rompa
Se endureceNuncaA los 19 ciclos
Quién lo creaEl padreEl bot que escribió .tie

Cómo se crea un lazo

Escribís un número distinto de 0 en .tie y, al final de la fase de acciones, el motor intenta atarte al bot que estás viendo (el mismo que describen .refeye y compañía). Si no ves a nadie, en tus dos primeros ciclos de vida prueba con tu padre, y si no, con el último bot que te tocó. El atajo del padre es fiable al principio de una simulación; más adelante, cuando los bots ya nacieron y murieron muchas veces, puede no encontrarlo, así que conviene que el hijo lo esté mirando.

La orden se borra siempre, salga o no.

Para que el lazo se forme:

Cada intento con alguien a tiro cuesta energía: el costo de atar (Atar) dividido por la cantidad de lazos que tenés después del intento más uno. El primer lazo cuesta la mitad, el segundo un tercio, y un intento que falla sin ningún lazo cuesta el precio entero. El lazo de nacimiento también lo cobra: lo paga el padre (en la sexual, la madre) en cada parto. Si ya había un lazo entre esos dos bots, el nuevo lo reemplaza: vuelve a contar desde cero y pasa a ser un lazo de .tie.

La opción Sin ataduras de la app desactiva .tie para todos; los lazos de nacimiento se siguen formando igual. En los torneos, la opción de descalificación (Descalificación) puede prohibir atarse o pasarle recursos a un rival por un lazo.

Los puertos: cómo se llama cada lazo

Un bot puede tener varios lazos, así que cada uno tiene un número, su puerto. Lo importante es que cada extremo lo llama con un número distinto:

   hijo: escribió 7 .tie                        padre: recibió el lazo
   lo llama 7   ●━━━━━━━━━━━━━━━━━━━━━━━━━━━━━●  lo llama 1
   (el número que puso)                          (su número de orden: es su primer lazo)

Quien crea el lazo lo llama con el número que escribió en .tie. Quien lo recibe lo llama con su número de orden entre sus lazos: 1 si es el primero, 2 si es el segundo. Cuando se forma un lazo, .tiepres de cada uno queda con el nombre que ese bot le da.

Con ese número elegís sobre qué lazo actúa cada orden: .tienum para escribir y transferir, .readtie para leer, .deltie para cortar. Si dejás .tienum en 0, la mayoría de las órdenes usan el lazo de .tiepres.

El lazo de nacimiento

Todo parto ata al padre con el hijo. Es un lazo blando, que nunca se endurece, y se corta solo a los 100 ciclos. Tiene una rareza: lo crea el padre con el puerto 0, y un 0 no sirve para elegir lazos. Por eso:

Mientras dura, por este lazo llega la memoria genética: las celdas 976 a 990 que el padre tenía al momento del parto le llegan al hijo de a una por ciclo, durante sus primeros 15 ciclos (ver Memoria libre y epigenética).

La física del lazo

Un lazo es un resorte con amortiguador. Recuerda un largo de reposo (la distancia entre los dos bots en el momento en que se formó) y, si los bots se alejan o se acercan de más, tira o empuja para volver a ese largo, frenando a la vez las oscilaciones. Tolera unas 20 unidades de diferencia sin hacer fuerza, así que los bots atados suelen quedar balanceándose cerca del largo pedido.

Un lazo nace blando y, si se hizo con .tie, a los 19 ciclos se endurece:

BlandoEndurecido
Fuerza del resortebajaunas cinco veces más
Largo de reposola distancia al formarsela distancia al endurecerse
Ángulolibre: los bots giran uno alrededor del otrofijo, visto desde el bot que creó el lazo
Se puede ajustarnosí: largo, ángulo y rigidez

El ángulo fijo convierte al lazo en algo parecido a un brazo: el compañero tiene que quedar en una dirección dada respecto de hacia dónde apunta el bot (.aim). Si se sale de ahí, el motor hace girar al bot y empuja al compañero de costado hasta recuperarlo, con una holgura de 5 grados que no corrige.

En un lazo endurecido podés cambiar las tres cosas, desde cualquiera de los dos extremos:

Para medir: .tieang y .tielen dicen la dirección y la distancia del compañero del lazo de .tiepres.

Un lazo se rompe solo si los bots quedan a más de 1000 de borde a borde, y se borra si el otro bot desaparece del mundo. Un compañero que muere y queda como cadáver sigue atado hasta que el cadáver se descompone.

Este organismo de dos células se separa a 300 y pone al compañero de costado en cuanto el lazo se endurece:

' Dos celulas: el hijo se ata al padre y, endurecido el lazo, le da forma
cond
 *.robage 5 =
 *.numties 0 =
start
 50 .repro store
stop
cond
 *.robage 1 =
start
 7 .tie store
stop
cond
 *.multi 1 =
start
 300 .fixlen store
 314 .fixang store
stop

Corriéndolo, la distancia oscila al principio entre 250 y 400 y se asienta cerca de 300; el compañero queda a unos 314 de ángulo, un cuarto de vuelta. Los dos lo piden, así que los dos lo sostienen.

Endurecerse: los multicelulares

Cuando un lazo de .tie se endurece, los dos bots pasan a ser multicelulares: .multi vale 1. Siguen así mientras les quede algún lazo, aunque no sea el endurecido; con 0 lazos, .multi vuelve a 0. Como el lazo de nacimiento no se endurece, padre e hijo no son un organismo solo por haber nacido juntos: alguno tiene que atarse con .tie.

Ser multicelular habilita y abarata cosas:

En un mundo que da la vuelta por los bordes, cuando una célula cruza el borde el motor traslada al organismo entero, hasta 50 células conectadas, para que no quede partido en dos (ver Física).

Comunicarse por el lazo

Hay tres formas, de la más mansa a la más invasiva:

ParaEscribísEl otro
Sentirlo, sin hacer nada.readtie elige el lazoNada: vos leés sus tref (energía, edad, posición, firma…)
Publicar un dato.tout1 … .tout10Lo lee en .tin1 … .tin10 si escucha ese lazo
Escribirle en la memoria.tienum, .tieloc (1 a 1000) y .tievalEncuentra el valor escrito en esa celda

La tercera es poderosa: podés escribir en cualquier celda del otro, incluso en sus órdenes (un .up o un .shoot ajeno). Ocurre en la fase de fuerzas y choques, después de que corrió el ADN de todos, así que el otro lo lee en su próximo turno. Para usarla, .tienum tiene que ser distinto de 0; no alcanza con .tiepres.

' El hijo le avisa al padre por el lazo de nacimiento
cond
 *.robage 5 =
 *.numties 0 =
start
 50 .repro store
stop
cond
 *.robage 1 =
 *.numties 0 >
start
 1 .tienum store
 60 .tieloc store
 1234 .tieval store
stop

El hijo, cuando su .robage vale 1, escribe 1234 en la celda 60 del padre por el puerto 1. El padre no podría hacer lo mismo por ese lazo: para él se llama 0.

Pasar y compartir recursos

Hay dos mecanismos, y conviene no mezclarlos.

Transferencias puntuales. Con .tieloc negativo y una cantidad en .tieval le das al otro (positivo) o le sacás (negativo) energía (-1), veneno (-3), desecho (-4) o cuerpo (-6). Funciona con cualquier lazo, blando o endurecido, y con cualquier bot, sea o no de tu especie: es la base de los parásitos que se atan a su presa y la vacían. Los topes por ciclo y lo que se pierde en el camino están en la página de .tieloc.

Compartir. Solo entre multicelulares. Con .sharenrg escribís un porcentaje: por cada lazo, el motor suma tu energía y la del compañero y te deja ese porcentaje del total; el resto queda para él. Hacen lo mismo .sharewaste (desecho), .shareshell (caparazón), .shareslime (baba) y .sharechlr (cloroplastos, solo entre parientes cercanos). Tres cosas a tener en cuenta:

' Organismo de dos celulas que reparten la energia en partes iguales
cond
 *.robage 5 =
 *.numties 0 =
start
 50 .repro store
stop
cond
 *.robage 1 =
start
 7 .tie store
stop
cond
 *.multi 1 =
start
 50 .sharenrg store
stop

Con 50 los dos quedan parejos. Ojo con los extremos: 100 .sharenrg store significa «todo para mí». Probado con este mismo bot, el hijo deja al padre sin energía en pocos ciclos y el padre se vuelve un cadáver, que sigue atado.

Cortar un lazo

Un lazo desaparece de los dos lados cuando:

Cuando se corta el lazo que señalaba .tiepres, esa celda pasa al lazo anterior de la lista. .numties siempre dice cuántos quedan.

En el Bestiario

Unos 190 bots del Bestiario usan .sharenrg. Uno chico y curioso es Snap Tie bot: se ata al azar y pide un largo de 10000 con .fixlen, así el lazo revienta y el tirón lo mueve.

Para armar uno paso a paso, seguí el tutorial Un multibot; para las estrategias, Multibots.