O icónico jogo de 1993 continua a ser adaptado para os sistemas mais invulgares da tecnologia moderna. Desta vez, Lukas Vogel apresenta o projecto SQLDoom, que coloca o título a funcionar integralmente numa base de dados CedarDB. Segundo o site Tom’s Hardware, esta versão inclui gráficos a 60 fps, som e até uma componente multijogador. O motor de base de dados utilizado foca-se na performance e mantém total compatibilidade com a arquitectura Postgres.
A arquitectura por trás da base de dados
Para conseguir este feito, a estrutura divide as tarefas de forma muito clara. A interface responsável por apresentar os gráficos, reproduzir o som e receber os comandos do jogador foi escrita em Python. Esta parte serve apenas de intermediária, a simular os periféricos de um computador vulgar, porque toda a matemática e a lógica do jogo decorrem exclusivamente no interior da base de dados. O sistema utiliza duas vias distintas de processamento para garantir a fluidez da experiência. Uma delas corre a 35 Hz para gerir a lógica original, enquanto uma linha de execução separada exibe os visuais e interpola a posição da câmara entre as actualizações contínuas do motor.
Optimização de código e tabelas relacionais
O processo começou pela conversão das entidades presentes no ficheiro WAD original para bases de dados, uma tarefa concluída com 1.000 linhas de código Python. As relações estruturais dos mapas originais facilitaram a integração em tabelas simples. A lógica principal exigiu apenas 5.900 linhas em SQL, um número bastante inferior às 9.000 linhas de código C do material de base. Esta redução drástica ocorreu porque a linguagem SQL permite actualizar múltiplos valores em simultâneo através de comandos directos, a dispensar os habituais ciclos de repetição e a processar os dados em paralelo. O motor gráfico ocupa 1.300 linhas e distribui-se por 89 tabelas diferentes. Como toda a informação se resume a linhas numa tabela, os programadores conseguem alterar características das armas ou o comportamento dos inimigos de forma instantânea.
