DarwinBotsManual
Abrir la app EnglishEN

Diferencias con el 2.48.32 original

Qué se corrigió del programa original, qué se dejó igual a propósito y con qué certeza se resolvieron las dudas que el original dejó abiertas.

Esta es la página a la que remite el manual cada vez que dice «así era en el original». El motor de esta versión es el del DarwinBots 2.48.32, traducido: los mismos números, el mismo orden de ciclo y las mismas reglas. Lo que cambia son los errores del programa original, corregidos a propósito, y nada más.

Acá está el criterio con el que se decidió cada corrección, las correcciones agrupadas por tema (con un enlace a la página que las explica en detalle), lo que se dejó igual a propósito y las dudas que el original dejó abiertas.

El criterio

La regla fue corregir sin cambiar el lenguaje: el cargador, la ejecución del ADN, los operadores y el significado de cada sysvar quedaron como estaban, así que un bot escrito para el original carga y corre lo mismo que siempre. Se corrigieron 35 errores, que a grandes rasgos caen en tres familias:

Lo que no se tocó: el balance (los costos, la economía de la energía, la fotosíntesis, los topes de población), las reglas del mundo (los sorteos y su orden: el ciclo sigue siendo el ADN → se borran los sentidos → los disparos → fuerzas y choques → movimiento → acciones → nacimientos y muertes → el sol) y las funciones del motor, que se portaron enteras aunque la app no exponga alguna. Corregir un bug no es rediseñar: si una rareza formaba parte del juego que conoció la comunidad, se quedó (ver Diferencias con el 2.48.32 original).

Por eso una simulación acá no da exactamente los mismos números que en el original con la misma semilla: cualquier corrección en el azar consumido separa las dos corridas para siempre. Lo que sí se mantiene es la repetibilidad dentro de esta versión: la misma semilla da la misma corrida, siempre (ver Semillas y reproducibilidad).

Hubo además una revisión uno a uno contra el fuente original que corrigió desvíos propios de la traducción — redondeos y promociones numéricas — para que los números salgan como salían.

Lo que no es corrección del original

No todo lo que notás distinto viene del original: la app y el sitio tienen su propia capa, y sus arreglos no cuentan como correcciones.

Nada de esa capa escribe en la simulación: una corrida guarda y carga igual con cualquier vista encendida o apagada.

El ADN y su ejecución

' En el original, el else nunca corria: la direccion 60 quedaba en 0
cond
 *50 0 >
start
 1 60 store
else
 2 60 store
stop

Con la 50 en 0, este bot escribe 2 en la 60: el else corre cuando las condiciones del gen son falsas, como prometía la ayuda del original. Ahí estaba el error más incómodo del 2.48.32: el cuerpo de un else tras un start no se ejecutaba nunca, cierta o falsa la condición, aunque la documentación decía lo contrario. Acá corre, y la numeración de los genes no cambia. Los bots del Bestiario que lo usan — Lionfish, Zer0Bot, TRON_F1 y varios de Moonfisher — se comportan como sus autores esperaban, no como el programa los dejó comportarse. El detalle, en Genes: cond, start, else y stop y else.

Una más de la misma familia:

Disparos y virus

Los virus tenían tres: dispararlos se cobraba dos veces (acá una); la potencia dependía del número del gen copiado (copiar el gen 7 contagiaba siete veces más fuerte que el gen 1); y atravesar la baba fortalecía al virus en vez de gastarlo. Las tres están corregidas, y por eso la baba protege mucho más que en el original (Virus). El mecanismo de disparos completo está en Disparos.

Energía, cuerpo y cloroplastos

Sentidos y visión

Cinco de los sentidos de siempre:

Y la visión de las formas tenía cuatro errores de una: la sombra de una forma no coincidía con la forma (estaba girada y tapaba de más), el ancho de los ojos se calculaba distinto para formas que para bots, .eyef no subía a 32000 para un bot metido dentro de una forma, y la posición de la forma solo era correcta si el ojo con foco era el frontal. Todo corregido (Visión).

Lazos

Reproducción y mutaciones

El mundo

Lo que quedó igual a propósito

Corregir bugs no es rediseñar. Muchas rarezas del 2.48.32 se conservaron porque el ADN las ve: cambiarlas cambiaría lo que significa un bot escrito para esa versión, con los bots que la comunidad evolucionó encima. Otras se conservaron porque son mecánica, no error: decisiones de diseño del original que no rompen nada. Y las que no tienen efecto observable nadie las va a notar. El reparto:

Rareza conservadaDónde se cuenta
Con def en el ADN, el primer token se pierde si no abre un genLa estructura de un bot
Las asimetrías de los operadores de pilaLa pila entera y la booleana
Las comparaciones aproximadas son siempre falsas con referencia negativa%=
Fijar ángulo o largo de un lazo solo funciona con los stores de dos operandosEscribir en la memoria
mkvirus no se borra solo: hay que limpiarlo a manoVirus
Un ancho de ojo negativo lo hace panorámicoVisión
Un .shoot múltiplo exacto de 1000 sale como espermaDisparos
El lazo de nacimiento usa el puerto 0Lazos y multicelulares
.fixang con 32000 suelta el ángulo en vez de fijarloEscribir en la memoria
.hitang tiene nombre pero nadie la escribe: es memoria libreMemoria libre y epigenética

De mecánica, no de error: un organismo entero respeta los bordes del mundo toroidal como si fuera un solo bot; los cadáveres colisionan; un bot puede reproducirse en el ciclo en que muere (Muerte y cadáveres); la mezcla de la reproducción sexual pierde tramos de ADN, así salía en el original (Reproducción); y las reglas de cambio de veneno y toxina y el piso del costo de moverse son las que eran (Defensas). La regla anti-gigantes del original tampoco se tocó: su umbral está por encima del tope del cuerpo, así que no actúa nunca — en ninguna de las dos versiones (Muerte y cadáveres).

Y el formato de archivo: las simulaciones y los bots del original se leen y se escriben con el mismo formato de siempre, rarezas incluidas, para que un .dbsim o un .txt de esa época siga funcionando (Formatos de archivo).

Las dudas que dejó el original

Reconstruir el motor trajo preguntas que el fuente solo no responde: cómo se comportaba el ejecutable en detalle. Y el ejecutable no corre en el Windows de hoy, así que no se puede contrastar contra el binario. Esas dudas se cerraron donde se pudo, y conviene saber con qué certeza:

Si encontrás una diferencia nueva

Si una simulación se comporta distinto de lo que cuenta este manual, es un error del manual o del port, y suma reportarlo. El repositorio del proyecto es público (github.com/japentaca/darwinbots2-wasm, enlazado en la portada del sitio): abrí un issue con lo que pasó, y si podés, el escenario exportado y la semilla, que con eso la corrida se repite exacta (Semillas y reproducibilidad). Si es una rareza del original que no aparece en esta página, probablemente quedó igual a propósito: decilo igual, y se decide si es bug o carácter.

Cómo se hizo el port, capa por capa, está en Cómo está hecho el port; de dónde sale cada cosa, en Créditos y licencia.