Implementação do clássico efeito de fogo do PlayStation
Este projeto apresenta uma implementação do algoritmo de fogo do DOOM (1993) desenvolvida em Python com Pygame. O algoritmo simula o comportamento do fogo através da propagação de intensidades de calor em uma grade bidimensional.
O efeito de fogo foi originalmente implementado pela equipe de desenvolvimento do port do DOOM para PlayStation 1, aproveitando ciclos extras de CPU para criar labaredas animadas tanto na introdução quanto durante o gameplay.
A técnica baseia-se em um princípio simples: propagação ascendente de intensidades de calor com decaimento estocástico, criando um efeito visual dinâmico e orgânico.
O algoritmo utiliza um array linear que representa a grade de fogo, onde cada célula armazena um valor de intensidade entre 0 (sem fogo) e 36 (intensidade máxima). A linha inferior é inicializada com intensidade máxima, funcionando como fonte constante de calor.
A cada frame, o algoritmo executa os seguintes passos:
A paleta utiliza 37 cores cuidadosamente selecionadas que mapeiam os valores de intensidade para cores que transitam de preto → vermelho escuro → laranja → amarelo → branco, reproduzindo fielmente a estética visual do fogo do DOOM original.
A implementação oferece duas formas de visualização: uma representação numérica que expõe os valores de intensidade (0-36), e uma representação visual com as cores da paleta do DOOM.
Implementação interativa com visualização em tempo real usando Pygame. Pressione ESPAÇO para alternar entre modos numérico e visual.
Utilitário para gerar GIF animado mostrando ambas as visualizações lado a lado.
Instalar dependências: pip install pygame pillow
Visualização interativa: python fire.py
Gerar GIF: python fire_gif_generator.py
Algoritmo original: Desenvolvido pela id Software para o port do DOOM (1993) no PlayStation.
Implementação JavaScript nesta página: Baseada no código de Samuel Villarreal (svkaiser), que fez reverse-engineering da versão Nintendo 64.
Inspirações para a implementação Python:
Código-fonte deste projeto: github.com/samuel-c-santos/doom-fire