Este artículo explora la ingeniería inversa del videojuego clásico de 1986, Starflight, un título pionero en el género de sandbox. El autor, S-Macke, describe su experiencia al intentar comprender el código del juego, una tarea que resulta inusual debido a la elección de lenguaje de programación: Forth.
Starflight fue innovador por su libertad de exploración, su narrativa emergente y su influencia en el diseño de juegos posteriores. Lo que hace que la ingeniería inversa de este juego sea particularmente desafiante es que Binary Systems, el desarrollador, utilizó Forth, un lenguaje de programación minimalista y poco convencional. Forth se caracteriza por su sintaxis extremadamente simple, basada en una notación polaca inversa (reverse Polish notation) donde las operaciones se realizan directamente sobre una pila de datos. Esto contrasta con lenguajes modernos como Python, donde una operación simple como la suma (2+3) se escribe como print(2+3), mientras que en Forth se expresa como 2 3 + ..
La ingeniería inversa revela detalles fascinantes sobre la estructura interna del juego. El código Forth mantiene la estructura del código fuente original, con una mínima optimización por parte del compilador. Más del 90% del ejecutable está compuesto por punteros de 16 bits, y se han encontrado más de 2000 símbolos de depuración (debugging symbols) encriptados, lo que facilita la reconstrucción del código fuente original. El juego también utiliza extensivamente 'code overlays' (superposiciones de código), complicando el proceso de análisis. El juego utiliza una técnica llamada 'indirect threading', una forma eficiente de almacenar código que implica saltos indirectos a diferentes bloques de código, lo que contribuye a la lentitud del juego.
El autor proporciona un ejemplo de cómo se implementa indirect threading, comparándolo con una posible implementación en C. Finalmente, se detalla la estructura del código, incluyendo el número de 'words' (funciones), variables, estructuras de datos y otros elementos, revelando la complejidad y singularidad de la implementación de Starflight.
