RBE-Sim / Utopia — O que é e como funciona
O que é
Utopia (nome técnico: rbe-sim) é um simulador de civilização baseado na web, construído em Laravel. Os jogadores habitam um planeta partilhado, escolhem uma cidade para viver, tomam decisões diárias — o que comer, quantas horas dormir, como contribuir para a comunidade — e essas decisões têm efeitos reais e acumulados sobre o mundo: o clima muda, os recursos escasseiam, as cidades evoluem.

O conceito de base é um modelo de Resource-Based Economy (RBE): não há dinheiro. O que existe são recursos, bem-estar, pressão ambiental e contribuição voluntária.

Arquitectura técnica
Backend: Laravel 12 · PHP 8.2 · MySQL
Frontend: Blade + Tailwind CSS (sem framework JS pesado)
Ambiente: KVM VPS (sem Docker)
Repositório: git@github.com:roltel/rbe-sim.git
Como funciona — o ciclo de jogo
1. O Mapa-mundo (/earth)
O jogador abre um mapa interactivo com:

~50 cidades distribuídas geograficamente
300 biomas gerados com distribuição geo-realista (florestas, desertos, tundra, etc.)
Regiões naturais com características próprias
Eventos atmosféricos activos (tempestades, secas, cheias, vulcões, terramotos, erupções solares) visíveis em tempo real
O ciclo dia/noite é calculado pela hora real do servidor.

2. O Jogador (/me)
Cada conta tem um Player com atributos fisiológicos e sociais:

Atributo Significado
energy Energia física (0–100)
hunger Fome (0–100)
happiness_level Felicidade
knowledge_level Conhecimento acumulado
tech_skill_level Capacidade técnica
social_skill_level Capacidade social
3. Acções do jogador
O jogador pode a qualquer momento:

POST /me/eat — comer (afecta fome, energia, pressão de recursos da cidade)
POST /me/sleep — dormir (recupera energia)
POST /me/contribute — contribuir para uma região/cidade (gasta energia, melhora estabilidade social)
4. O World Tick — o coração do simulador
A cada hora (via cron), o WorldTickService corre em sequência:

WorldTickService::run()  ├── PlayerTickService::run()   → processa cada cidadão  ├── CityTickService::run()     → actualiza o estado de cada cidade  └── avança o tempo (dia/ano do mundo)
O PlayerTickService simula um dia de vida de cada cidadão:

Resolve intenções (sono, lazer, aprendizagem, contribuição, dieta)
Aplica fricção humana (overcommit cansa, tempo livre recupera)
Traduz para fisiologia (sono ≥ 7h recupera energia, fome aumenta sem comer)
Propaga efeitos da dieta para a cidade (dieta vegan reduz pressão de recursos; omnívora aumenta)
Regista contribuição real ponderada pelo bem-estar do cidadão
Guarda histórico de localização
O ClimateEngine gera eventos naturais aleatórios com probabilidades diferenciadas:

Evento Categoria Probabilidade
Tempestade Atmosférico 30%
Seca Atmosférico 20%
Cheias Hidrológico 20%
Erupção solar Solar 15%
Terramoto Geológico 10%
Vulcão Geológico 5%
5. O estado do mundo
O tempo avança como um calendário interno: 365 dias por ano, acumulando história. O estado global está na tabela world_state (ano + dia actuais).

O que torna isto diferente
A mecânica central não é de conquista nem de acumulação de pontos. É de interdependência sistémica: o bem-estar do teu jogador afecta a cidade; a cidade afecta o clima; o clima afecta o teu bem-estar. Uma pessoa com fome contribui menos — não por punição, mas porque o modelo de bem-estar o reflecte matematicamente.

Estado actual (v0.1.0 — Maio 2026)
O simulador tem a base jogável implementada. O próximo foco será expor as intenções diárias ao jogador como escolhas reais (em vez de defaults automáticos) e ligar os eventos climáticos a consequências tangíveis nas cidades.