Este artículo del blog de vogons.org narra la experiencia de un desarrollador (Wilczek h) en el proceso de ingeniería inversa y portabilidad de Railroad Tycoon, un clásico juego de estrategia de simulación de trenes. El objetivo principal era superar la limitación del juego original, que se bloqueaba al alcanzar un límite en la cantidad de dinero manejable (debido al uso de un entero de 4 bytes para representar el dinero, una decisión de diseño cuestionable). Además, el desarrollador buscaba mejorar la resolución de pantalla, que era subóptima en monitores modernos.
El proceso de ingeniería inversa ha sido extenso, involucrando la depuración de DOSBox (tanto el juego como el propio emulador) y la comprensión de formatos de archivo propietarios. Entre los logros clave se encuentran la extracción de imágenes (PIC), la decodificación y reproducción de animaciones (PAN), la comprensión del formato de fuente, la carga y renderizado de mapas y estaciones (incluyendo las de los oponentes), y la implementación de luces de señalización. El desarrollador ha logrado renderizar el mapa a cualquier resolución y ha corregido el error de límite de dinero.
Una parte importante del trabajo ha sido la adaptación del código de renderizado a OpenGL. El juego original utilizaba técnicas ineficientes (como la transformación de imágenes y el uso extensivo de overlays) que no son adecuadas para hardware moderno. El desarrollador ha optimizado el proceso de renderizado, precalculando ciertos elementos (como los 'activos azules' que representan vías sobre agua) en memoria y utilizando shaders para lograr efectos visuales específicos. La gestión de overlays, un mecanismo de programación común en DOS, resultó ser un obstáculo significativo, requiriendo una cuidadosa verificación del código para evitar fallos.
El juego utiliza un sistema de generación de ciudades, industrias y productores basado en una combinación de un valor 'semilla' (seed value), el color de la celda del mapa y las coordenadas de la celda. Este sistema, aunque funcional, es considerado por el desarrollador como 'ingenioso' o 'insano' debido a su complejidad y la falta de información almacenada directamente en el mapa.
El objetivo actual (MVP - Minimum Viable Product) es replicar todas las funcionalidades del juego original (excepto el sonido), con renderizado de mapa independiente de la resolución, corrección del error de dinero, soporte para partidas guardadas ilimitadas y la opción de jugar solo. El desarrollador planea continuar con el proyecto, aunque su tiempo estará limitado hasta octubre, y se enfrenta al desafío de portar fragmentos de código no deterministas pero esenciales, como la lógica que controla a los oponentes.
