El colocador es anterior a la churrera
Precisamente lo escribí para no tener que meter NADA a mano. Sin embargo, los valores de enems.h se calculan en base a los del colocador: el colocador fue una herramienta que hicimos en 2009 en plan genérico, para que nos sirviese para todo. De hecho, lo he usado para cosas que no son de la Churrera. Por eso los datos son diferentes.
Lo que sale en enems.h está preparado no solo para almacenar los valores iniciales de los enemigos, sino para contener su posición y estado dentro del juego. En el .ene sólo hay datos sobre la posición digamos "inicial", pero esto luego se convierte a una estructura de datos mayor. Además, se precalculan las cosas, porque así nos ahorramos el tiempo y espacio que necesita una rutina de inicialización.
Pongamos que enems.ene almacena cada enemigo así:
$this->bbcode_second_pass_code('', 'unsigned char t; // tipo de enemigo
unsigned char x; // posición x inicial (en tiles, 0 - 14)
unsigned char y; // posición y inicial (en tiles, 0 - 9)
unsigned char xx; // posición x final (en tiles, 0 - 14)
unsigned char yy; // posición y final (en tiles, 0 - 14)
unsigned char n; // velocidad (en píxels por frame, 0, 1, 2, 4, 8)
unsigned char s1; // sin usar
unsigned char s2; // sin usar')
En enems.h se escriben 12 bytes en 10 campos, que son los siguientes:
$this->bbcode_second_pass_code('', 'signed int x, y;
unsigned char x1, y1, x2, y2;
signed char mx, my;
unsigned char t;
unsigned char life;')
Para entendernos, voy a llamar p.* a los valores de enems.h y e.* a los de enems.ene
- p.x y p.y almacenan la posición ACTUAL del enemigo. Son int y no unsigned char porque hay algunos tipos de enemigos con movimientos suave en los que se emplea aritmética de punto fijo y hace falta más espacio. Se inicializan con el valor de e.x *16 y e.y * 16.
- p.x1 = e.x * 16, p.y1 = e.y * 16, p.x2 = e.xx * 16, p.y2 = e.yy * 16. Los "pivotes" de las trayectorias se precalculan y se pasan de tiles a pixels.
- p.mx y p.my indican el movimiento en cada eje y se precalculan también. La ecuación es muy sencilla: p.mx = sgn (e.xx - e.x) * e.n. Así, un enemigo que empiece en el tile 10 y termine en el 2 y tenga velocidad 4 tendrá mx = -4 al principio.
- p.t = e.t.
- p.life se deja a 0 en enems.h y luego se inicializa al principio de cada partida con el valor que se establezca en config.h para la vida de los enemigos.
En resumen, enems.ene tiene un formato pensado para que sea fácil de leer, interpretar y modificar a la hora de editar las posiciones de los enemigos, y enems.h tiene un formato pensado para funcionar directamente como estructura de datos de control de los enemigos en el juego. Los datos de los enemigos se modifican directamente sobre la estructura que se define en enems.h. ¡Hay que ahorrar!