Estructura BCSV

Contenido

  1. Introducción
  2. Funcionamiento
  3. Definiciones
  4. Estructura
  5. Ejemplo
  6. Referencias

Introducción

Los archivos BCSV de SMG son la base de datos que tiene el juego para guardar información de distinto tipo: posición/configuración de los modelos/planetas en las galaxias, nombres de las zonas en una galaxia, caracteristicas de la colisión de un modelo KCL, etc. Las letras de la extensión BCSV significan, según otros, Binary Comma Separated Values. Los archivos BCSV son como los archivos CSV, son tablas para almacenar datos.


Image could not be loaded.

Tabla planetmapdatatable.bcsv (ObjectData) en Blender 2.79.7 (Blenxy)

Funcionamiento

Como se mencionó arriba, los archivos BCSV son simplemente tablas para almacenar datos. Lo diferente de estas tablas es que la información está codificada y no puede verse directamente a través de un editor de texto, de allí el Binary en su nombre.


A diferencia de los CSV este tipo de tablas tienen las siguientes restricciones/características:

Definiciones

Estructura

La estructura del archivo descrita aquí es la estructura que se ha conseguido en los archivos originales de SMG. Esta información no significa que la estructura tenga que ser exactamente como se describe en la página.


Encabezado

Nombre Tamaño Descripción
Número de filas 4 bytes Puede ser 0.
Número de columnas 4 bytes No he encontrado un caso, pero asumo que el mínimo es 1.
Posición de la piscina de datos 4 bytes Respecto al inicio del archivo, en bytes.
Longitud en bytes de las filas 4 bytes La información de cada fila se encuentra en "una misma línea", este valor especifica el tamaño en bytes de esta línea. Se usa para encontrar los valores de cada celda de una columna y para calcular la posición de la piscina de cadenas de caracteres.

Información de las columnas -- Se repite Número de columnas veces

Nombre Tamaño Descripción
Hash del nombre de la columna 4 bytes Hash de la cadena de caracteres que identifica a la columna, truncado a 32 bits -- rutina de calculo.
Máscara de bits 4 bytes Parece aplicar sólo a los tipos de dato entero: CHAR, SHORT, LONG y LONG_2. Con este valor se extrae el valor que se guardó en el campo de bits.
Posición del dato de la primera celda en la columna 2 bytes Posición respecto al inicio de la piscina de datos. Para conseguir el valor de la segunda celda (si existe) se le suma a la posición del dato el valor de Longitud en bytes de las filas. Con la nueva dirección, se repite lo mismo para conseguir el tercer, cuarto, ... valor en la tabla.
Número de desplazamientos de bits derecho 1 byte Parece aplicar sólo a los tipos de dato entero: CHAR, SHORT, LONG y LONG_2. Con este número se modifican los bits extraídos del campo de bits con la máscara de bits.
Tipo de dato 1 byte Un número entre 0x00 y 0x06 especificando el tipo de dato a leer.
Image could not be loaded.

Datos de la primera columna de la tabla groupinfo de ObjectData/PlanetDisk.arc.

En la imagen mostrada, se puede ver el uso de la posición del primer dato de la primera columna y la separación entre los datos de una misma columna. La tabla es un poco larga por lo que no se puede ver la piscina de cadenas de caracteres.


Piscina de datos


Piscina de cadenas de caracteres


Ejemplo

Estructura coloreada de scenariodata.bcsv de StageData/AstroGalaxy/AstroGalaxyScenario.arc:


En la imagen de arriba se muestran los inicios de las informaciones de cada columna y la posición de todos los elementos de la primera columna.

Referencias