DarwinBotsManual
Abrir la app EnglishEN

Disparos

Cómo nace un disparo, cuánto viaja, a quién le pega y qué hace cada tipo al llegar: robar energía o cuerpo, regalar, envenenar, ensuciar, fecundar o escribir en la memoria del otro.

Un disparo es una partícula que un bot lanza hacia adelante y que viaja sola por el mundo hasta que le pega a otro bot o se le acaba el alcance. Es la forma de comer de casi todos los bots que no son vegetales, y también la de atacar, regalar energía, paralizar o escribir en la memoria ajena. Esta página cuenta el mecanismo de punta a punta; las sysvars que lo manejan están en Disparos.

Del .shoot al disparo

El ADN pide un disparo escribiendo un número distinto de 0 en .shoot. El motor lo lanza más tarde, en la fase de acciones de ese mismo ciclo, y deja .shoot y .shootval en 0. El disparo nace en el borde del bot, del lado hacia el que mira (.aim), y sale:

Un disparo recién creado no se mueve en el ciclo en que nace: arranca en la fase de los disparos del ciclo siguiente. Si tu energía está en 0 o menos, no sale nada.

Cada tipo cuesta distinto. Todos usan el costo de disparar del escenario, multiplicado como todos los costos por el Multiplicador de costos:

DisparoLo que paga el tirador
−1 y −6 (robar)el costo de disparar, dividido por la cantidad de lazos más uno
−1 y −6 con .shootval mayor que 4 o menor que −4ese valor multiplicado por el costo de disparar
−2 (regalo)lo que regala, más el costo de disparar dividido por lazos más uno
−3 y −4 (veneno y desechos)el costo de disparar dividido por lazos más uno; el veneno o los desechos salen de su reserva
positivo (memoria) y −8 (esperma)el costo de disparar entero

Cuánto viaja

El alcance se mide en ciclos de vuelo y depende del cuerpo del tirador (en un organismo atado, del cuerpo de todo el organismo; ver Lazos y multicelulares). Crece despacio, como un logaritmo:

Cuerpo del tiradorCiclos de vueloDistancia aproximada desde su borde
10 o menos140
1007280
100011440
500013520
3200016640

Un .shootval negativo en un disparo −1 o −6 estira el alcance: −8 lo duplica y −16 lo triplica, y se cobra como se ve en la tabla de arriba.

El disparo no pega igual en todo el recorrido. Mientras vuela pierde fuerza, muy poco al principio y de golpe al final:

Parte del recorrido ya hechaFuerza que le queda
la mitad98 %
80 %94 %
90 %86 %
el último ciclonada

Así que a la distancia justa del alcance el tiro llega sin fuerza: conviene disparar a lo que está cerca. El regalo de energía (−2) puede quedar exento con Los disparos de energía no se gastan y el de desechos (−4) con Los disparos de residuos no se gastan.

En los bordes, un disparo pasa al otro lado si el mundo es toroidal y rebota si hay pared. Contra una forma rebota también, salvo que el escenario tenga Absorben disparos. Los disparos no chocan entre sí.

Cómo pega

En la fase de los disparos de cada ciclo, el motor mira el tramo que cada disparo va a recorrer en ese ciclo y busca el primer bot que se cruza en ese tramo. Si lo hay, el disparo le pega ahí mismo, hace su efecto y desaparece. Si no, avanza y envejece un ciclo; cuando supera su alcance, se esfuma.

Algunas reglas de a quién le pega:

Qué hace cada tipo

Cada disparo sale con un valor (la fuerza con la que fue lanzado) y llega con ese valor recortado por lo que perdió en el viaje. A eso lo llamamos la fuerza del golpe.

−1: robar energía

El valor es 20 más la quinta parte del cuerpo del tirador: con 1000 de cuerpo, 220. Un .shootval de 8 lo duplica, de 16 lo triplica (entre −4 y 4 no cambia nada). Al pegar en un bot vivo:

Ese regalo de vuelta es la comida. Si otro bot se cruza en el camino, se lo come él. Al llegar se reparte como cualquier −2 (ver abajo). En la prueba, con 1000 de cuerpo, el blanco perdió 198 de energía y 2,2 de cuerpo, y el tirador ganó 209 de energía y 0,88 de cuerpo.

Si a la víctima no le alcanza la energía, pierde toda la que tiene y el regalo sale con eso. Si queda con 0,5 de energía o de cuerpo, muere, y el tirador suma una muerte en .kills. A un cadáver, que ya no tiene energía, un −1 no le saca nada.

Si la víctima tiene mucha toxina, en vez de regalo sale toxina hacia el tirador: ver Defensas.

−6: robar cuerpo

El valor es 10 más la mitad del cuerpo del tirador (510 con 1000 de cuerpo), con el mismo .shootval que el −1. El caparazón de la víctima frena primero (ver Defensas). Lo que pasa:

Es el disparo más rendidor y el que sirve para comer cadáveres. En la prueba, contra un blanco de 1000 de cuerpo sin caparazón, el blanco perdió 102 de energía y 40,8 de cuerpo y el tirador ganó 484,5 de energía.

−2: regalar energía

El tirador manda lo que diga .shootval (sin signo y nunca más de lo que tiene; con 0, el 1 % de su energía). Quien lo recibe se queda con el 95 % en energía, un poco más en cuerpo (el equivalente al 4 %) y un 1 % se le vuelve desecho. Si pasa de 32000 de energía, el 10 % del exceso va al cuerpo. Los cadáveres no lo aprovechan.

−3: veneno

Manda veneno de la reserva del tirador (.venom): lo que diga .shootval, o la vigésima parte si vale 0. Paraliza a la víctima y le hace escribir en su memoria lo que elegiste. Todo el mecanismo está en Defensas.

−4: desechos

Manda desechos: lo que diga .shootval (sin signo, hasta lo que tengas) o la vigésima parte de tu .waste si vale 0. El tirador se libra del 99 % de lo que manda: el 1 % se le queda en .waste y, además, otro 1 % pasa a su .pwaste, que no se puede tirar. La víctima suma la fuerza del golpe a sus desechos, hasta 32000. Más desechos de la cuenta le escriben basura en la memoria (ver Energía, cuerpo y desechos). El motor también expulsa desechos así por su cuenta cuando un bot tiene demasiados.

−8: esperma

Lleva una copia del ADN del tirador. Al pegar, deja a la víctima fecundada por unos 10 ciclos (.fertilized) con ese ADN, lista para una reproducción sexual; si ya estaba fecundada, el ADN nuevo reemplaza al anterior. Ver Reproducción.

Positivo: escribir en la memoria

Un número positivo en .shoot es una dirección: el disparo escribe tu .shootval en esa dirección de la memoria de la víctima. Se toma módulo 1000 (1050 escribe en la 50), la 340 (.delgene) está protegida y un múltiplo exacto de 1000 da un disparo de esperma. Lo escrito queda en la memoria del otro, y su ADN lo lee en el ciclo siguiente.

La toxina lo frena: si la víctima tiene al menos la mitad de la energía del disparo en .poison (220 para un tirador de 1000 de cuerpo), no se escribe nada y sale toxina hacia el tirador.

Virus y toxina

Los virus (−7) no salen de .shoot: se arman con .mkvirus y se lanzan con .vshoot (ver Virus). La toxina (−5) tampoco: solo nace como respuesta de un bot tóxico (ver Defensas). Los demás negativos no disparan nada.

Con intercambio fijo

Todo lo de arriba vale con el Intercambio de energía proporcional, el de fábrica. Con el fijo, cada −1 o −6 pega siempre con la Cantidad fija (200 por defecto), sin importar el cuerpo del tirador, su .shootval ni la distancia. Con el proporcional, la Proporción multiplica la fuerza de esos dos tipos.

Lo que siente quien recibe

Cada golpe deja en la víctima un sabor, haya hecho daño o no (un disparo que frena el caparazón también se siente):

El motor los escribe en la fase de los disparos, así que tu ADN los lee en el ciclo siguiente, y los borra después de que corrió. Si te pegaron varios, queda el último. Ojo: el que caza con −1 también siente su comida, porque el regalo de vuelta le marca −2.

Este bot, si le roban energía, gira hacia el tirador y le devuelve el fuego:

' Si me roban energia, giro hacia el tirador y le devuelvo el fuego
cond
 *.shflav -1 =
start
 *.shang .aimdx store
stop

cond
 *.eye5 0 >
start
 -1 .shoot store
stop

En la prueba, contra un cazador que le pegó en el ciclo 8, el bot giró en el 9, ya lo tenía en el .eye5 y desde el 11 los dos se robaban energía mutuamente.

Un cazador mínimo

Animal Minimalis, del Bestiario, resume todo lo anterior en un gen: dispara −1 solo cuando lo que ve está cerca (*.eye5 50 >) y no es de su especie (*.refeye *.myeye !=, ver Lo que se ve (ref*)), y mientras tanto acompaña al blanco copiando su velocidad (.refveldx, .refvelup).

' Del gen de ataque de Animal Minimalis
cond
 *.eye5 50 >
 *.refeye *.myeye !=
start
 -1 .shoot store
 *.refveldx .dx store
 *.refvelup .up store
stop

El paso a paso para escribir un cazador propio está en Un bot que dispara.