← Volver al blog

StrawTraduction: port a Rust en pruebas

devlogstrawberry-panicrustherramientas

Durante bastante tiempo, StrawTraduction funcionó como una herramienta escrita principalmente en Python. Fue suficiente para investigar formatos, probar ideas, extraer textos, reconstruir scripts y generar ISOs funcionales.

Pero a medida que el proyecto creció, también crecieron los puntos delicados: más pasos de build, más archivos binarios, más validaciones y más riesgo de romper algo sin darse cuenta. Por eso empecé un port completo a Rust.

Interfaz de StrawTraduction

Por qué moverlo a Rust

La idea no fue cambiar por cambiar. El port se hizo por motivos prácticos:

  • Mejor rendimiento al leer, parchear y escribir archivos grandes como Data.bin e ISOs.
  • Más seguridad al manejar offsets, tamaños, rangos y buffers binarios.
  • Menos dependencias externas para ejecutar la herramienta.
  • Un build más controlado y fácil de verificar con tests.
  • Mejor separación entre lógica core, base de datos y web local.

En una traducción de PS2, un offset mal calculado o una escritura fuera de rango puede acabar en una ISO rota. Rust ayuda bastante a hacer este tipo de código más explícito y menos frágil.

Qué está portado

La versión Rust ya cubre el flujo principal:

  • Web local para editar y buscar textos.
  • SQLite con búsqueda FTS.
  • Importación de scripts y textos del ELF.
  • Rebuild de scripts traducidos.
  • Parcheo del ELF.
  • Inventario y parcheo de texturas TIM2.
  • Generación de Data_patched.bin.
  • Generación de ISO traducida.
  • Inyección del ELF traducido en la ISO.
  • Logs de build en vivo.

Además, ahora hay más tests alrededor de puntos sensibles como límites de texto, normalización de saltos de línea, búsqueda, exportación CSV y detección de textos en scripts.

Más rápido, pero todavía en análisis

El port ya se siente más rápido y más sólido en el flujo diario. Especialmente en pasos pesados como leer archivos grandes, reconstruir scripts y generar la ISO.

Aun así, todavía está en pruebas. La rama existe para analizar su comportamiento, comparar resultados contra builds anteriores y revisar que no se pierdan textos o marcadores especiales del juego.

Por ahora no está mergeada como versión principal estable. La prioridad es seguir validando:

  • Que el build Rust genere ISOs funcionales de forma consistente.
  • Que los textos importados coincidan con los scripts reales.
  • Que los marcadores especiales, como los corazones , se conserven.
  • Que el parcheo de imágenes no rompa paletas ni streams.
  • Que las traducciones largas se detecten antes de romper el juego.

Qué significa para el proyecto

Si las pruebas siguen bien, Rust debería convertirse en la base definitiva de StrawTraduction. No solo por velocidad, sino porque permite mantener una herramienta más segura para un proyecto que toca muchos binarios delicados.

De momento sigue siendo una rama de trabajo y análisis. Cuando esté suficientemente probada, se integrará al flujo principal del proyecto.