Energía, cuerpo y desechos
De dónde sale y a dónde va la energía de un bot en cada ciclo: costos, mantenimiento, el cuerpo como reserva, los desechos y el shock.
Todo lo que hace un bot cuesta energía, y casi nada la crea. Esta página cuenta cómo es esa contabilidad: las tres reservas del bot (energía, cuerpo y desechos), en qué momento del ciclo se cobra cada cosa, cuánto cuesta vivir aunque no hagas nada y qué pasa en los extremos. Los datos de cada sysvar están en la referencia (Cuerpo, energía y estado, Ganancias y pérdidas); acá va el mecanismo de conjunto.
Tres reservas
| Reserva | Sysvar | Para qué sirve |
|---|---|---|
| Energía | .nrg | Es la que se gasta. Si se acaba, el bot muere. |
| Cuerpo | .body | Una reserva lenta: vale 10 de energía por punto, hace al bot más grande y pesado (.mass) y, si baja de 0,5, también lo mata. |
| Desechos | .waste y .pwaste | No sirven para nada: son el resto de ciertas actividades y, si se juntan, intoxican al bot. |
Energía y cuerpo se cambian entre sí a 10 por 1: .strbody guarda energía en el cuerpo y .fdbody la saca, de a 100 de energía por ciclo como máximo. El cambio no tiene comisión.
De dónde sale y a dónde va
En DarwinBots la energía entra al mundo por dos lados: el sol, que alimenta a los bots con cloroplastos, y los vegetales nuevos que siembra la repoblación (ver Cloroplastos y vegetales). Todo lo demás la pasa de un bot a otro, la convierte o la gasta.
entra sale
───── ────
sol (cloroplastos) ──┐ ┌──► ADN, moverse, girar, disparar
comer a otros ───────┤ ├──► mantenimiento (edad, cuerpo, ADN)
cuerpo (.fdbody) ────┼──► ENERGÍA ┼──► defensas ──► desechos
desechos digeridos ──┘ ├──► cuerpo (.strbody), cloroplastos
└──► el hijo, o comida para otro
Cuando un bot come con un disparo, de la energía que recibe un 95 % va a su energía, el equivalente a un 4 % entra como cuerpo (0,4 puntos de cuerpo por cada 100 de energía) y el 1 % se le vuelve desecho (ver Disparos). Al reproducirse, el hijo se lleva su parte y en la mudanza se pierde un 0,2 % de esa parte, la mitad a cada lado (ver Reproducción).
Cuándo se cobra cada cosa
El orden importa, porque una fase ve lo que dejó la anterior. Con los nombres de las fases de El ciclo y el orden de las acciones:
| Fase | Qué se cobra o se abona |
|---|---|
| El ADN | Cada instrucción ejecutada (Ejecución y costos). |
| Los disparos | Lo que se come o se pierde por disparos que llegan. |
| Fuerzas y choques | El mantenimiento (edad, cuerpo y largo del ADN) y el empuje de .up, .dn, .sx y .dx. |
| Movimiento | Girar, lo que pasa por los lazos (Lazos y multicelulares) y fabricar virus. Al final, la energía se recorta a ±32000. |
| Acciones | Fabricar defensas, los desechos, disparar, comprar cloroplastos, convertir energía y cuerpo, el shock, atarse y, al final, publicar los sentidos y decidir quién muere. |
| Nacimientos y muertes | El reparto con el hijo y la copia del ADN. |
| El sol | La fotosíntesis. |
Entre una fase y otra la energía puede quedar negativa: el ADN y los costos se restan sin mirar el saldo. Recién en las acciones se decide si el bot murió (con Cadáveres activado, por debajo de 15 se vuelve cadáver; si no, por debajo de 0,5 muere; ver Muerte y cadáveres). Lo que leés en .nrg es lo que quedó al publicar los sentidos, nunca menos de 0. Como el sol llega después, lo que gana un vegetal en el ciclo N se ve publicado al final del N+1.
Vivir cuesta
Aunque no ejecute nada útil, un bot paga en cada ciclo tres cuotas de mantenimiento. Todas se multiplican por el Multiplicador de costos:
| Cuota | Cuánto | Parámetros |
|---|---|---|
| Edad | Un monto fijo por ciclo desde una edad dada. | Costo por edad, Edad de inicio del costo |
| Cuerpo | Una fracción por cada punto de .body. | Mantenimiento del cuerpo |
| ADN | Un monto por cada instrucción del genoma, sin contar el end. | ADN por ciclo |
Por ejemplo, el bot cond start stop (tres instrucciones y el end) con 1000 de cuerpo pierde 1 por ciclo si el cuerpo cuesta 0,001, y 3 por ciclo si el ADN cuesta 1, aunque sus genes no hagan nada.
La cuota de edad tiene tres formas. La básica cobra siempre lo mismo una vez que la edad pasó de Edad de inicio del costo. Con Costo por edad logarítmico crece con el logaritmo de los ciclos que pasaron desde esa edad; con Costo por edad lineal crece en línea recta, a razón de Fracción lineal del costo por edad por ciclo. Es la forma de que los bots viejos dejen lugar.
Con la configuración con la que arranca la app todos los costos están en 0 y vivir es gratis. Las reglas F1 cobran 0,00001 por punto de cuerpo y 0,01 por edad desde el primer ciclo: un bot con 1000 de cuerpo paga 0,02 por ciclo, poco al lado de lo que gasta moviéndose (0,05 por unidad de empuje) o disparando (2 por disparo). Los precios y cómo se cambian están en Parámetros: Costos; el ajuste automático del multiplicador, en Parámetros: Costos dinámicos.
El cuerpo
El cuerpo es la alcancía del bot, y la forma de guardar energía sin que se la pierda de un golpe. También es lo que lo hace grande: más cuerpo es más radio, más masa y más difícil de mover. Si la simulación cobra mantenimiento por el cuerpo, la alcancía tiene un costo.
Las conversiones no miran el saldo. 100 .strbody store cobra 100 de energía aunque el bot tenga 50: un bot con 250 de energía que guarda 100 por ciclo queda en 50 al segundo ciclo y es cadáver al tercero. Las dos órdenes, con un ejemplo de alcancía, están en Cuerpo, energía y estado.
Los desechos
Los desechos (.waste) aparecen por tres vías:
- Fabricar defensas. El costo extra de
.mkshell,.mkslime,.mkvenomy.mkpoison(ver Defensas) no desaparece: se vuelve desecho, uno por uno. - Comer. El 1 % de lo que entra por un disparo o un lazo.
- Recibir los de otro, con un disparo −4 o por un lazo con
.sharewaste.
En cada ciclo, en las acciones, el motor los procesa en este orden:
- Si el bot tiene cloroplastos, digiere un poco: con 16000 cloroplastos, medio desecho por ciclo, que se convierte en algo de energía y de cuerpo.
- Si los desechos sumados a los permanentes (
.pwaste) pasan del límite de Los residuos son tóxicos desde (400 si no lo cambiaste), el bot se intoxica: el motor escribe números al azar en direcciones al azar de su memoria, una vez por cada 4 unidades de exceso. - Si pasan de 32000, el bot los expulsa solo: bajan a 31000 y sale un disparo −4 de 500.
La intoxicación es grave. En una prueba, un bot que fabricaba 100 de caparazón por ciclo sin descargar llegó a 1000 de desechos en diez ciclos. Para entonces tenía casi todas las direcciones de la 52 a la 60 llenas de basura, y al ciclo siguiente se reprodujo sin quererlo: una de las escrituras al azar había caído en .repro. Qué direcciones se ensucian es cuestión de suerte, pero cualquiera puede tocarle, órdenes incluidas.
La forma normal de librarse es un disparo −4. Este bot se arma 500 de caparazón y tira los desechos cuando pasan de 100:
' Se arma un caparazon y tira los desechos antes de que molesten
cond
*.shell 500 <
start
50 .mkshell store
stop
cond
*.waste 100 >
start
-4 .shoot store
*.waste .shootval store
stopCon el costo de caparazón en 1, cada ciclo de fabricación le cuesta 55 de energía (5 de la conversión más 50 de costo) y le deja 50 de desechos, que descarga cada dos o tres ciclos. Al terminar tiene 500 de caparazón, 0 de desechos y 5 de desechos permanentes: de cada descarga, el 1 % se queda para siempre en .pwaste. Esos permanentes no se pueden tirar; solo se diluyen al reproducirse, porque el hijo se lleva su parte.
El tope de 32000
Energía, cuerpo, desechos y cloroplastos tienen tope en 32000. Lo que pasa del tope depende de por dónde llega:
- Comer: la energía que sobra pasa al cuerpo, a 10 por 1.
.fdbodyy el sol: lo que sobra se pierde. Un bot con 31950 de energía que convierte 100 queda en 32000 y paga igual los 10 de cuerpo..strbodycon el cuerpo lleno: la energía se cobra y el cuerpo no crece.
El shock
Un bot que no es vegetal sufre un shock si en un solo ciclo pierde más de la mitad de la energía con la que terminó el anterior y aun así le quedan más de
- Toda la energía que le queda pasa al cuerpo, a 10 por 1, y queda en 0, así
que muere en ese mismo ciclo (o se vuelve cadáver, con el cuerpo engordado).
' Mal negocio: compra 6000 cloroplastos de golpe
cond
*.robage 5 =
start
6000 .mkchlr store
stopCon 10000 de energía y cada cloroplasto a 1, la compra lo deja en 4000: perdió más de la mitad y le sobran más de 3000. Termina como cadáver con 1400 de cuerpo (los 1000 que tenía más 400 de la energía convertida). Si comprara 9000, quedaría en 1000 y no habría shock: la regla solo mira a los que todavía tienen mucho. Un disparo enemigo muy fuerte o un gasto grande pueden provocarlo; repartir a un hijo no, porque el parto no cuenta como pérdida.
Cómo lo ve el bot
Todo lo de esta página llega al ADN con un ciclo de atraso. .nrg, .body, .waste y .pwaste dicen cómo quedó el bot al final del ciclo anterior, y .pain, .pleas, .bodloss y .bodgain cuánto cambió en ese ciclo, sin decir por qué (ver Ganancias y pérdidas). Un bot recién sembrado lee todo eso en 0 en su primer ciclo, .nrg y .body incluidos.