Una colección de utilidades en Python diseñadas para extraer, analizar y convertir varios formatos propietarios utilizados por el motor del juego LoveBeat.
Estos scripts proveen todas las herramientas necesarias para extraer la totalidad de los recursos del juego, permitiendo analizar su estructura y llevar los archivos a formatos estándar (OBJ, DDS, OGG, SLK, XML, etc) para su modificación, preservación o renderizado externo (como el WebViewer).
Warning
Aviso de Compatibilidad: No se garantiza que estos extractores funcionen para todas las versiones anteriores o posteriores del cliente del juego. El desarrollo es continuo y se estará trabajando progresivamente para brindar un soporte integral a la compatibilidad histórica.
- Python 3.8+
- Bibliotecas estándar únicamente (no requiere dependencias externas)
Extrae archivos desde los contenedores .spak (QPACK).
- Uso:
python extract_spak.py <input_directory> [output_directory] [--workers N] [--overwrite] - Descripción: Lee la tabla de archivos codificada, descomprime los flujos de Zlib y extrae los archivos internos al disco. Soporta multithreading para extracción masiva.
Procesa los archivos de texturas .dds y .dds.spak.
- Uso:
python extract_dds.py <input> [output_dir] [--keystream path] [--allow-non-dds-output] - Descripción: Detecta automáticamente la versión del contenedor (v1 o v3), remueve las cabeceras QPACK si están empaquetados, y extrae texturas DDS estándar legibles.
Procesa las hojas de cálculo y configuración del juego (archivos .slk).
- Uso:
python extract_slk.py <love_exe_path> <encrypted_slk>... <output_dir> [--unescape-unicode] [--workers N] - Descripción: Requiere el ejecutable del juego (
LoveBeat.exe) para poder procesar y exportar correctamente el contenido de las tablas originales. - Nota: Puede utilizar la flag
--unescape-unicodepara convertir de forma limpia las secuencias literales\uXXXXen caracteres nativos reales (útil para revisar las localizaciones asiáticas).
Convierte las mallas de los personajes (ropa, pelo, cuerpo) desde los archivos mesh_*.gb o mesh_*.gb.spak a formatos estándar.
- Uso:
python export_skinned_part.py <input_file> [output_dir] - Descripción: Extrae vértices, coordenadas UV, índices y los pesos de los huesos (skinning weights). Exporta los datos en formato JSON/OBJ listos para motores 3D externos (como Three.js).
Convierte archivos .gb estáticos empaquetados directamente a modelos .obj.
- Uso:
python extract_gb.py <input_file> - Descripción: Un extractor rápido y directo para geometrías que no requieren datos de articulación (skinning).
Procesa y parsea archivos de jerarquía de esqueleto (por ejemplo, skel_boy.gb).
- Descripción: Extrae las relaciones de huesos padre-hijo, las transformaciones locales y la matriz de la pose base (bind pose) necesaria para la animación de los personajes.
Extrae huesos adicionales desde los archivos bone_*.gb.spak.
- Uso:
python extract_item_bones.py <paths...> [--out OUT] - Descripción: Utilizado para parsear los huesos de animación secundaria anexados a los accesorios y ropa (ej. faldas, colas, pelo largo).
Parsea los archivos de secuencia de animación (.ab).
- Uso:
python extract_ab_animations.py <input_file> - Descripción: Extrae los fotogramas clave (keyframes) y los datos de interpolación (rotación/traslación) por cada hueso. Exporta el resultado en formato JSON para su reproducción externa.
Reconstruye el audio a partir de los archivos de música de fondo (.snb).
- Uso:
python extract_snb_ogg.py <input> <output> [--donors DIR_1 DIR_2] - Descripción: El juego elimina la cabecera estándar de los archivos OGG por razones de seguridad. Este script une los paquetes de configuración y los codebooks faltantes provenientes de archivos OGG "donantes" con el flujo de bits bruto del SNB, para recrear un archivo
.oggperfectamente reproducible. - Advertencia: La extracción de archivos
.snbes un proceso de prueba y error. No se garantiza obtener un audio legible al primer intento para todos los archivos. Es necesario probar poco a poco proporcionando diferentes carpetas de archivos.oggdonantes hasta encontrar cabeceras compatibles para los audios que falten reconstruir.
Varios de estos extractores están diseñados y son utilizados directamente en conjunto con el servidor del WebViewer incluido en este repositorio para renderizar y visualizar los recursos del juego en el navegador.