Iterum é um jogo de exploração 2D escrito em C99 usando SDL2. O jogador navega por 5 mapas interconectados via portais, abre baús e coleta joias. A ordem dos mapas é gerada aleatoriamente a cada partida (grafo cíclico embaralhado).
| Feature | Detalhes |
|---|---|
| 5 Mapas temáticos | Floresta, Ruínas, Cavernas, Planície, Templo |
| Grafo aleatório | Ordem dos mapas embaralhada (Fisher-Yates) a cada sessão |
| Portais | Dois por mapa (NEXT / PREV), detecção por colisão circular |
| 3 Baús por mapa | Sorteados entre 10 POIs fixos — spawn determinístico por map_id |
| Proximidade automática | Distância² < 2500px (raio 50px) abre o baú sem tecla |
| 6 tipos de joias | Rubi, Safira, Esmeralda, Diamante, Ametista, Topázio |
| Congrats modal | Primeira descoberta pausa o jogo e exibe modal centralizado |
| Floating text | Coletas repetidas geram +N Gema que sobe e desvanece em 1s |
| HUD lateral | Painel fixo com ícones, quantidades em tempo real e mapa atual |
| State Machine | MENU → PLAYING → CONGRATS / MAP_TRANSITION |
| Sem malloc | Toda memória pré-alocada na struct Game estática |
| Font bitmap | Fonte 5×7 pixels embutida — sem arquivos externos |
| Tecla | Ação |
|---|---|
W A S D ou ↑ ↓ ← → |
Mover personagem |
Espaço / Enter |
Fechar modal (Congrats / Menu) |
| Fechar janela | Sair do jogo |
iterum/
├── CMakeLists.txt # Build system
├── build.sh # Script auxiliar Linux/macOS
├── README.md
├── include/
│ ├── types.h # Todas as structs, enums e constantes
│ ├── game.h # Lógica principal (state machine, update)
│ ├── world.h # Geração de mapas e portais
│ ├── render.h # Pipeline de renderização SDL2
│ └── font.h # Fonte bitmap 5×7 embutida
└── src/
├── main.c # Entry point: SDL init, game loop
├── game.c # Player, colisão, portais, baús, loot
├── world.c # Geração procedural dos 5 mapas
├── render.c # Renderização completa (tiles, HUD, modais)
└── font.c # Bitmap font 128 glifos, sem dependências
- GCC (C99 ou superior)
- SDL2 (runtime + headers de desenvolvimento)
- CMake 3.16+
sudo apt-get install libsdl2-dev cmake build-essential
chmod +x build.sh && ./build.sh
./build/iterumsudo dnf install SDL2-devel cmake gcc
chmod +x build.sh && ./build.sh
./build/iterumsudo pacman -S sdl2 cmake gcc
chmod +x build.sh && ./build.sh
./build/iterumbrew install sdl2 cmake
chmod +x build.sh && ./build.sh
./build/iterumpacman -S mingw-w64-x86_64-SDL2 mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
mkdir build && cd build
cmake .. -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
mingw32-make
iterum.exegcc -std=c99 -O2 -Iinclude \
src/main.c src/game.c src/world.c src/render.c src/font.c \
$(sdl2-config --cflags --libs) -lm \
-o iterumToda memória é alocada estaticamente na struct Game (stack ou BSS segment):
static Game g; // ~100KB — alocado uma vez no bootDurante o gameplay, zero chamadas a malloc/free.
Os 5 mapas, 15 baús, 10 portais e 8 floating texts são todos pré-alocados.
SDL_ttfpara fonte TrueTypeSDL_mixerpara efeitos sonoros e música- Sistema de saves com
fwrite/fread - Mini-mapa no HUD
- Inimigos com pathfinding A*
- Receitas de crafting com joias
Desenvolvido conforme especificação técnica Iterum v1.0