Muerte y cadáveres
Cuándo muere un bot (sin energía, sin cuerpo, por un disparo, por un shock o por presión de memoria), qué es un cadáver, cómo se descompone y qué pasa con sus lazos.
En DarwinBots no hay vejez ni enfermedad: un bot muere porque se le acaba algo. Casi siempre es la energía; a veces el cuerpo, un disparo que lo vacía de golpe o una regla del mundo que poda la población. Lo que queda depende de cómo murió y de la configuración: un cadáver que sigue ahí como comida, o nada.
Esta página cuenta las causas de muerte, en qué momento del ciclo ocurren, qué es un cadáver y cómo desaparece.
Las causas
| Causa | Cuándo | ¿Deja cadáver? |
|---|---|---|
| Sin energía | .nrg por debajo de 15, con Cadáveres activado; por debajo de 0,5 si está apagado | Sí, si los cadáveres están activados |
| Sin cuerpo | .body por debajo de 0,5 | No |
| Un disparo que lo vacía | un disparo de energía (−1) o de cuerpo (−6) lo deja con 0,5 o menos de energía o de cuerpo | No |
| Shock | pierde más de la mitad de su energía en un ciclo y aun así le quedan más de 3000 | Sí: la energía que le quedaba pasa al cuerpo |
| Presión de memoria | el ADN de todo el mundo junto pasa de 4 millones de palabras | No |
Sin energía
Es la muerte de todos los días. Todo cuesta energía (ver Energía, cuerpo y desechos), y la cuenta se lleva sin piso: dentro de un ciclo la energía puede quedar negativa, aunque tu ADN nunca lea un número menor que 0. Al final del ciclo, si quedó por debajo de 15, el bot se convierte en cadáver.
Este bot pasa su energía al cuerpo de a 100 por ciclo con .strbody, sin fijarse en cuánto le queda:
' Pasa toda su energia al cuerpo, de a 100 por ciclo
cond
start
100 .strbody store
stop
endSembrado con 350 de energía, termina el ciclo 3 con 50 y el 4 con −50: en ese ciclo se convierte en cadáver, con 1040 de cuerpo. Si Cadáveres está apagado, en el mismo ciclo 4 desaparece sin dejar nada.
Sin cuerpo
Un bot vivo cuyo cuerpo baja de 0,5 muere aunque tenga energía de sobra, y no deja cadáver: no hay nada que dejar.
Muerto por un disparo
Cuando un disparo de energía o de cuerpo deja a la víctima con 0,5 o menos de energía o de cuerpo, el motor la marca como muerta, le suma una muerte a .kills del tirador y al final del ciclo la saca del mundo sin cadáver. En una prueba, un cazador que se acercaba disparando −1 a un bot quieto de 300 de energía le hizo llegar dos disparos en el mismo ciclo: el primero le sacó 198 y el segundo, el resto. El bot desapareció en ese ciclo y el cazador quedó con .kills en 1.
Un bot que queda flaco pero por encima de esa raya (entre 0,5 y 15 de energía) sí termina como cadáver al final del ciclo.
Shock
Si un bot que no es vegetal pierde en un solo ciclo más de la mitad de la energía que tenía, y aun así le quedan más de 3000, sufre un shock: toda la energía que le quedaba se le pasa al cuerpo, a razón de 10 por 1, y queda en 0. Como eso lo deja por debajo de 15, en el mismo ciclo se convierte en cadáver. Un bot con 20000 de energía que gasta 12000 de una vez en un disparo termina como cadáver con 1800 de cuerpo (tenía 1000, más 8000 / 10). Cómo era en el original y otro ejemplo, en Energía, cuerpo y desechos.
Ni vejez ni gigantismo
No hay una edad máxima. Lo que sí puede haber es un costo por edad, que crece con .robage y termina matando de hambre: Costo por edad, a partir de Edad de inicio del costo ciclos de vida, constante, logarítmico (Costo por edad logarítmico) o lineal (Costo por edad lineal, con pendiente Fracción lineal del costo por edad).
El código tiene también una regla para matar a los gigantes (cuerpo enorme con pocos cloroplastos, o más de cinco víctimas), pero su umbral es un cuerpo mayor que 32100, y el cuerpo nunca pasa de 32000: en la práctica no actúa nunca, ni en el original ni en el port.
La presión de memoria
El último paso de cada ciclo suma el largo del ADN de todos los bots del mundo, cadáveres incluidos. Si pasa de 4.000.000 de palabras, el motor mata de una vez a los más pobres: busca el bot con menos energía más diez veces su cuerpo, lo saca, y repite. Cuántos depende de la población y del largo medio del ADN: con un ADN medio de 425 palabras son unos 1500, y menos si el ADN medio es más largo.
Es una regla para que la simulación no se quede sin memoria, pero también es presión selectiva: en un mundo enorme castiga a los pobres justo cuando el genoma de la población crece. Pasa en simulaciones muy pobladas y largas, con miles de bots.
En qué momento del ciclo
Las fases del ciclo (ver El ciclo y el orden de las acciones) son: el ADN → se borran los sentidos → los disparos → fuerzas y choques → movimiento → acciones → nacimientos y muertes → el sol. La muerte toca varias:
- Los disparos marcan como muerta a la víctima que vacían, pero no la sacan todavía.
- Al final de las acciones cada bot vivo cumple un ciclo de edad y se revisa: si tiene menos de 15 de energía se convierte en cadáver, y si está marcado como muerto (o sin cuerpo) queda en la lista para salir.
- En nacimientos y muertes primero nacen todos los hijos del ciclo y después salen todos los muertos.
De ahí sale algo poco intuitivo: un bot que muere en este ciclo todavía puede tener un hijo, porque su pedido de reproducción se atiende antes que su muerte. El bot marcado por un disparo incluso corre sus acciones de ese ciclo (dispara, se reproduce) antes de salir. Es así también en el original, y los bots evolucionados pudieron aprovecharlo.
Un cadáver sale del mundo cuando su cuerpo llega a 0, en el recuento que se hace entre fuerzas y choques y el movimiento: en el mismo ciclo si se lo terminaron de comer con un disparo, o en el siguiente si se le acabó por la descomposición o por un lazo.
Los cadáveres
Un cadáver es un bot que dejó de vivir pero sigue en el mundo. Conserva su cuerpo, su posición, su velocidad y sus lazos, y pierde todo lo demás:
- No corre su ADN, no se mueve por su cuenta, no ve (sus ojos quedan en 0) y no cumple años.
- Queda con 0 de energía y sin cloroplastos. Si era un vegetal, deja de serlo: el sol ya no lo alimenta.
- Se llama
Corpse: no cuenta para la población de su especie (ver.totalmyspecies) y los virus no lo infectan. - Sigue siendo un cuerpo físico: choca, lo empujan y lo arrastra la gravedad.
Los demás lo ven como a cualquier bot. .refbody trae su cuerpo real, pero .refnrg vale 0 y toda su firma (.refeye y compañía) también: frente a un cadáver, *.refeye *.myeye != da verdadero, como si fuera de otra especie (ver La firma propia (my*)).
Comerse un cadáver
Lo que vale de un cadáver es el cuerpo, y la única manera de sacárselo es por el cuerpo: con disparos −6 (ver .shoot), que contra un cadáver rinden cuatro veces más que contra un bot vivo, o chupándole cuerpo por un lazo (ver Lazos y multicelulares). Un disparo de energía (−1) no le saca nada, porque no le queda energía.
Ursus Detrivoris, del Bestiario, tiene un gen para eso, comentado «eat corpses (or harmless bots)»: si lo que ve no dispara (su .refshoot vale 0, como la firma de todo cadáver), le dispara al cuerpo.
' Come cadaveres (o bots inofensivos)
cond
*.eye5 30 >
*.refshoot 1 <
start
-6 .shoot store
stopLa descomposición
Si nadie se lo come, un cadáver puede pudrirse. Lo regulan tres parámetros:
| Parámetro | Qué hace |
|---|---|
| Descomposición por ciclo | Cuánto se descompone en cada paso. El cadáver pierde la décima parte de este valor de cuerpo. |
| Pausa de descomposición (ciclos) | Cada cuántos ciclos da un paso. |
| Tipo de descomposición | Si en cada paso suelta un disparo, en una dirección al azar: de residuos (−4) o de energía (−2), con el valor del parámetro de descomposición (o el cuerpo que le quede, si es menos). |
Con descomposición 1000 y una pausa de 2 ciclos, el cadáver del primer ejemplo pierde 100 de cuerpo cada dos ciclos: pasa de 1040 a 40 en unos veinte ciclos y desaparece poco después. Con el tipo «disparo de energía», cada paso es además una pequeña ración que puede comer cualquiera que pase cerca; con «disparo de residuos», ensucia a los vecinos.
El valor por defecto de la descomposición es 0: los cadáveres no se pudren y quedan en el mundo hasta que alguien se los come.
Los lazos
Convertirse en cadáver no corta los lazos: el bot que estaba atado sigue atado, y puede seguir sacándole cuerpo por ahí. Los lazos se cortan cuando el bot sale del mundo, sea un vivo que muere sin cadáver o un cadáver que se quedó sin cuerpo; en ese momento el compañero los pierde y su .numties baja.
En este bot la madre tiene una hija a los 3 ciclos (que nace atada a ella) y después se deja morir; la hija, como ya tiene un lazo, no hace nada:
' La madre tiene una hija a los 3 ciclos y despues se deja morir;
' la hija nace atada a ella y no hace nada
cond
*.robage 3 =
*.numties 0 =
start
50 .repro store
1 50 store
stop
cond
*50 1 =
start
100 .strbody store
stop
endCon 1000 de energía al empezar, la madre es cadáver en el ciclo 9 y la hija sigue leyendo .numties en 1. Con una descomposición rápida (2000, sin pausa), el cadáver se termina en el ciclo 13 y desde entonces la hija lee 0.
Cuando un bot sale del mundo también se pierde el virus que tenía guardado para disparar (ver Virus). Sus disparos que ya están en vuelo, en cambio, siguen su camino.
Los parámetros
| Parámetro | Para qué |
|---|---|
| Cadáveres | Si los muertos de hambre quedan como cadáveres. |
| Descomposición por ciclo, Pausa de descomposición (ciclos), Tipo de descomposición | La descomposición. |
| Costo por edad y los otros costos por edad | La muerte por vejez, si la querés. |
| Registrar los muertos, Sin vegetales en el registro | Guardar una ficha de cada bot que muere. |
En la vista del mundo los cadáveres se cuentan aparte; en Analizar (ver Analizar) hay un gráfico de cadáveres y otro de bots con y sin ellos.