Objetivo do jogador
Explorar zonas reativas, coletar energia, desbloquear habilidades e influenciar o estado do mundo. O progresso individual importa, mas o resultado coletivo altera a atmosfera para todos.
Um documento de game design premium para Roblox, criado como estudo de mundo vivo, reativo e modular. O projeto transforma ações coletivas dos jogadores em clima, iluminação, eventos, progressão, tensão narrativa e identidade visual do servidor.
Core concept
EchoForge parte de uma pergunta simples: e se o mapa não fosse apenas cenário, mas uma camada de feedback coletivo? Cada sessão deixa rastros. Cada grupo empurra o mundo para uma direção. O servidor vira uma peça viva, disputada entre energia, caos e silêncio.
Explorar zonas reativas, coletar energia, desbloquear habilidades e influenciar o estado do mundo. O progresso individual importa, mas o resultado coletivo altera a atmosfera para todos.
Ações como cooperar, vencer eventos, ignorar áreas, gastar energia ou provocar conflito alimentam métricas do servidor. Essas métricas definem eventos, cor, clima, efeitos e oportunidades.
Em vez de depender apenas de obbies, tycoons ou combate repetitivo, EchoForge usa sistemas persistentes e feedback visual para criar curiosidade: voltar ao jogo significa descobrir como o mundo mudou.
Estados do mundo
Os estados não são apenas nomes. Eles são presets de experiência: mudam o ritmo, a leitura visual, o som imaginado, a pressão de jogo e o tipo de decisão que parece natural para a comunidade naquele momento.
Surge quando conflito, competição e falhas coletivas dominam. O mapa fica mais agressivo, com luz dura, neblina quente, eventos de risco e recompensas de alto impacto para quem estabilizar zonas críticas.
Ativado por energia compartilhada, objetivos concluídos em grupo e cuidado com áreas do mapa. A experiência ganha brilho, rotas mais seguras, buffs temporários e uma leitura visual mais limpa.
Acontece quando zonas ficam sem interação ou quando o servidor perde fluxo. O cenário escurece, sistemas entram em baixa energia e missões de restauração convidam jogadores a reativar o mapa.
Arquitetura modular
A proposta técnica evita scripts gigantes e acoplados. O servidor calcula estado, módulos traduzem métricas em efeitos, o cliente renderiza feedback e arquivos compartilhados mantêm enums e configurações consistentes.
Orquestrador central. Lê métricas, resolve estado global, publica sinais e aciona os subsistemas de ambiente, UI e progressão.
Cada módulo resolve um problema do domínio. Isso facilita trocar regras, balancear thresholds e adicionar novos estados sem quebrar UI ou ambiente.
Ver exemplosZonas podem registrar eventos no BehaviorTracker e receber presets do EnvironmentEngine usando o mesmo contrato de estado.
Ver setupO documento mostra intenção de arquitetura, experiência de usuário e visão de produto, não apenas trechos isolados de código.
Ver conclusãoGame loop
O loop foi desenhado para ser simples no primeiro contato e mais profundo quando o jogador percebe que suas ações afetam o servidor. O objetivo não é só ganhar energia, mas participar de uma ecologia coletiva.
O jogador chega em um servidor com estado visível e entende rapidamente se o mundo está estável, tenso ou esquecido.
Zonas, sinais visuais e eventos sugerem onde há energia, conflito, restauração ou oportunidades raras.
Energia alimenta progressão, habilidades e participação em ações de maior impacto no mapa.
Jogadores cooperam, competem ou abandonam zonas, empurrando métricas globais para novos estados.
A principal recompensa emocional é ver o mundo diferente e sentir que a comunidade deixou marcas reais.
Documentação técnica
Cada exemplo abaixo é apresentado como documentação real: primeiro o problema, depois a solução modular, e por fim o papel do módulo dentro da arquitetura maior.
Problema resolvido: centralizar a decisão do estado global sem transformar todos os módulos em dependências circulares. O WorldHeart funciona como maestro do servidor.
-- Orquestra estado global e notifica subsistemas
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local BehaviorTracker = require(script.Parent.BehaviorTracker)
local EnvironmentEngine = require(script.Parent.EnvironmentEngine)
local WorldState = require(ReplicatedStorage.Modules.WorldState)
local stateChanged = ReplicatedStorage.Remotes.WorldStateChanged
local currentState = WorldState.HARMONY
local function resolveWorldState(metrics)
if metrics.conflict > 70 then
return WorldState.WAR
elseif metrics.activity < 25 then
return WorldState.ABANDON
end
return WorldState.HARMONY
end
local function tickWorld()
local metrics = BehaviorTracker:GetServerMetrics()
local nextState = resolveWorldState(metrics)
if nextState ~= currentState then
currentState = nextState
EnvironmentEngine:ApplyState(nextState, metrics)
stateChanged:FireAllClients(nextState, metrics)
end
end
while task.wait(12) do
tickWorld()
end
Problema resolvido: traduzir ações individuais em sinais coletivos, sem deixar cada sistema interpretar eventos do seu próprio jeito.
local BehaviorTracker = {}
BehaviorTracker.metrics = {
activity = 50,
cooperation = 50,
conflict = 10,
restoration = 0
}
local function clamp(value)
return math.clamp(value, 0, 100)
end
function BehaviorTracker:RegisterAction(actionType, weight)
if actionType == "Cooperate" then
self.metrics.cooperation = clamp(self.metrics.cooperation + weight)
elseif actionType == "Conflict" then
self.metrics.conflict = clamp(self.metrics.conflict + weight)
elseif actionType == "RestoreZone" then
self.metrics.restoration = clamp(self.metrics.restoration + weight)
end
self.metrics.activity = clamp(self.metrics.activity + 2)
end
function BehaviorTracker:GetServerMetrics()
return table.clone(self.metrics)
end
return BehaviorTracker
Problema resolvido: transformar estado sistêmico em sensação visual. Em Roblox, Lighting e Atmosphere são ferramentas fortes para fazer o jogador sentir mudança sem precisar ler um painel.
local TweenService = game:GetService("TweenService")
local Lighting = game:GetService("Lighting")
local EnvironmentEngine = {}
local PRESETS = {
War = {
Ambient = Color3.fromRGB(85, 28, 42),
FogColor = Color3.fromRGB(130, 35, 62),
Brightness = 0.82,
ClockTime = 18.5
},
Harmony = {
Ambient = Color3.fromRGB(44, 72, 92),
FogColor = Color3.fromRGB(80, 190, 185),
Brightness = 1.25,
ClockTime = 13.2
},
Abandon = {
Ambient = Color3.fromRGB(34, 25, 61),
FogColor = Color3.fromRGB(44, 35, 78),
Brightness = 0.55,
ClockTime = 4.7
}
}
function EnvironmentEngine:ApplyState(state)
local preset = PRESETS[state]
if not preset then return end
TweenService:Create(
Lighting,
TweenInfo.new(4, Enum.EasingStyle.Sine, Enum.EasingDirection.InOut),
preset
):Play()
end
return EnvironmentEngine
Problema resolvido: separar progressão e apresentação. O servidor calcula energia e desbloqueios, enquanto o cliente mostra estado, barra, feed e feedback visual.
-- EnergySystem.lua
function EnergySystem:AwardEnergy(player, amount, reason)
local profile = self:GetProfile(player)
profile.energy += amount
profile.lastReason = reason
local unlocked = self:CheckUnlocks(profile.energy)
self.Remotes.EnergyChanged:FireClient(player, profile.energy, unlocked)
end
-- UIController.lua
EnergyChanged.OnClientEvent:Connect(function(energy, unlocked)
Hud.EnergyBar:SetAttribute("Value", energy)
Hud.WorldFeed:AddMessage("Energia sincronizada com o eco do mundo.")
if unlocked then
Hud.SkillToast:Show(unlocked.name)
end
end)
Progressão e valor de produto
A progressão usa energia como recurso emocional e sistêmico. Ela recompensa presença, exploração e impacto positivo, mas não substitui habilidade, leitura de mundo ou colaboração.
Energia desbloqueia habilidades de mobilidade, restauração, leitura de sinais e participação em eventos maiores. Isso dá ao jogador metas claras sem transformar o jogo em grind vazio.
Gamepasses e cosméticos devem vender expressão, conveniência visual e identidade, nunca vantagem competitiva decisiva. A confiança da comunidade vale mais que uma conversão agressiva.
| Oferta | Categoria | Valor para o jogador | Regra ética |
|---|---|---|---|
| Auras de Resonância | Cosmético | Visualiza a energia do jogador com efeitos de cor e partículas. | Não aumenta dano, velocidade ou coleta. |
| Trilha do Eco | Cosmético | Deixa rastros visuais ao explorar zonas reativas. | Expressão estética, sem vantagem sistêmica. |
| Slot extra de loadout | Conveniência | Permite alternar configurações já desbloqueadas. | Não desbloqueia habilidades pagas. |
| Pacote Temporada 1 | Colecionável | Inclui aura, animação e título visual da temporada. | Compra opcional, transparente e sem pressão predatória. |
Setup Roblox Studio
Para funcionar com segurança no Roblox, o projeto precisa de organização previsível. A estrutura separa scripts de servidor, módulos compartilhados, remotes e cliente.
Lighting.Technology = Enum.Technology.Future
Lighting.GlobalShadows = true
Lighting.Brightness = 1.0
Atmosphere.Density = 0.32
Atmosphere.Haze = 0.82
BloomEffect.Intensity = 0.42
BloomEffect.Threshold = 0.95
ColorCorrection.Contrast = 0.12
ColorCorrection.Saturation = 0.18
Como peça de portfólio, o projeto mostra mais do que uma ideia de jogo. Ele apresenta pensamento sistêmico, sensibilidade visual, documentação técnica, visão de produto e entendimento de como transformar comportamento coletivo em experiência jogável dentro do Roblox.