Substitui o sistema anterior por inteiro. O que havia — machado, foice, picareta, vara de pesca, três proficiências de coleta e um portão de nível por tier — foi descartado. Não existe mais ferramenta no jogo.
Substitui a coleta passiva por lugar descrita nas seções abaixo ("A regra", "O ritmo", "Auto coleta"), que ficam como histórico. Continua valendo: onde a pedra nasce, a cor é o tier, o que cada coleta entrega e o que viaja no fio.
Parado perto não rende. O jogador escolhe uma pedra (ou tronco), anda até
ficar ao alcance e coleta ela, ciclo a ciclo. Cada ciclo rende a tabela
daquele nó (economy::linhas_da_pedra / madeira) e conta um da reserva
do nó. Andar, cair ou sair do alcance encerra.
Quando a reserva zera o nó esgota: some pra todo mundo, sai da colisão
(não barra mais a passagem) e volta no respawn, na colisão e na tela.
| número | valor | fonte |
|---|---|---|
| reserva da pedra (coletas) | cinza 14 · verde 24 · azul 64 · roxa 128 | docs/COLETA.md "A pedra é uma pedra" (tabela) · COLETAS_POR_PEDRA |
| respawn da pedra | 300 · 420 · 600 · 900 s | docs/COLETA.md (mesma tabela) · RESPAWN_DA_PEDRA |
| rendimento por coleta | Cobre 40–120 sempre; Aço 55%; Darksteel 35%; Platina 30%; pedra roxa entrega 50% mais unidades por ciclo, arredondando para cima | docs/ECONOMIA_DE_CRAFT.md "Onde tudo isso sai" · linhas_da_pedra |
| cor do material por pedra | 100/0/0 · 80/20/0 · 65/25/10 · 55/27/18 | docs/COLETA.md (tabela) · RENDIMENTO_DA_PEDRA |
| reserva e respawn da árvore | 8 coletas · 90 s | já era provisório no código (COLETAS_POR_ARVORE); o planejamento não define |
| tempo de um ciclo | pedra 2,5 · 2,8 · 3,1 · 3,4 s; tronco 2,0 s | decisão provisória (não estava no planejamento) — o doc só tinha o ritmo por densidade |
| alcance | 1,4 u de borda a borda | decisão provisória (não estava no planejamento) |
| raio do AUTO COLETA | 20–100 u, padrão 60 | decisão provisória (não estava no planejamento) |
| Veio de Energia | 50 coletas · 360 s de respawn · ciclo de 2,5 s | COLETAS_POR_ENERGIA, RESPAWN_DA_ENERGIA e COLETA_CICLO_ENERGIA_S |
O cristal de Energia é um novo recurso coletável (tipo 5), distinto de pedra e árvore. Cada ciclo credita Energia diretamente ao personagem, sem ocupar bolsa: 30/70/150/300 por ciclo, conforme a ilha. Ela serve à evolução das habilidades (SKILLS.md). O filtro do mapa mostra regiões agregadas, não cada cristal; o AUTO COLETA tem uma opção própria para ele. Missões que pedem especificamente pedra não contam Energia. Os cristais usam uma grade de geração própria: não substituem nem reduzem os minérios.
A Energia não é mais um cristal solto a cada tantas centenas de metros: ela
nasce em campos (terreno::no_campo_de_energia), como a pedra tem os seus
lugares. Uma célula de 300 blocos em cada 4 tem campo; o campo é um disco
de 80 blocos em volta de um centro sorteado dentro da célula — disco, e não a
célula inteira, porque quadrado se enxerga no mapa. Dentro dele toda coluna
candidata vira veio, com espaçamento de 7 blocos (o do minério é 3: o veio é
largo, e encostados os halos do chão viravam uma poça de luz só).
Dois números que a Energia não herda do minério:
- Altura (
ENERGIA_LIMIAR0,16 contraMINERIO_LIMIAR0,42). A pedra é de mina e mora no cume; o veio é fenda de relevo e pode estar no meio da encosta. - Cume. O minério exige nada mais alto num raio de 8 u. Exigir isso do veio seria pedir um campo inteiro de picos — campo de Energia é clareira, não cordilheira.
Medido na ilha inicial: 175 veios em 42 células de 40 u (4,2 por célula),
contra 55 espalhados antes. O teste
toda_pedra_e_energia_do_servidor_e_desenhada_no_cliente cobra essa razão — se
ela cair abaixo de 2,5, os veios voltaram a se espalhar.
Ele não é modelo de voxel assado no pedaço do terreno, como o minério:
energia_vfx desenha os veios à vista quadro a quadro, em cor de vértice, no
material do mundo. Assado, ele era uma pedra parada — foi o que o dono viu em
20/09/2026: "sai de uma pedra, tá muito ruim; tem que ser um negócio com
animação de energia fluindo, tipo um veio".
De baixo pra cima: o halo aceso rente à terra com a greta escura no meio (é ele que diz que a luz vem de baixo — só o losango escuro lia como sombra); seis lascas afuniladas em cacho, abrindo pra fora, com uma faixa clara que sobe sem parar e dá a volta (parar no topo leria como "acabou"); um facho curto por dentro do cacho; e fagulhas subindo, cada uma na sua fase.
Três coisas que custaram uma versão cada, e valem a pena lembrar:
- Em cacho, não em fila. Enfileiradas ao longo da greta, de certos ângulos as lascas ficavam uma atrás da outra e o veio virava duas agulhas.
- O facho fica DENTRO do cacho. Subindo acima de tudo, sozinho contra o céu escuro, o azul translúcido virava uma lasca cinza espetada — lia como antena, não como luz.
- Afunilar sem virar agulha. Com a ponta fechando em 0,88 do raio elas liam como pingente de gelo.
Custa ~uma centena de triângulos por veio, só os à vista, e sem shader novo
nem segunda passada. MMO_PREVIA_ENERGIA=1 captura três instantes do mesmo
veio — uma captura só não diz se ele se mexe.
Missões e diárias de coleta (GATHER) contam por coleta rendida (cada
ciclo), não por nó esgotado.
Manual: clicar numa pedra/tronco no mundo anda até o ponto de alcance e,
ao chegar, manda ColetarNo { coluna }; o servidor valida existência,
esgotamento e alcance e começa os ciclos. Sem tecla.
AUTO COLETA (X ou o botão; botão direito abre a configuração):
tipos marcados (Madeira, Pedra cinza/verde/azul/roxa) e raio, salvos nas
preferências do personagem. O servidor aponta o nó vivo mais perto e
alcançável andando (PedirNoDeColeta → NoDeColeta); o personagem vai,
coleta até esgotar e pede o próximo. Sem nó no raio: "Aguardando recursos…",
sem sair da área. Auto missão de coleta usa os tipos da missão, não os da
configuração. O "Ir" do mapa numa região pede o nó daquele tipo.
Na tela: o personagem golpeia enquanto coleta (gesto acao::COLETA, que
todo mundo vê; pedra de cima, tronco de lado) e vira pro nó; a barrinha
"Coletando · Pedra azul · 2,4 s" enche até o próximo ciclo (ColetaEstado).
Não há ferramenta desenhada na mão — decisão provisória.
Mapas de arquivo (tutorial) mantêm o nó posto à mão com a coleta passiva antiga.
Pendências: bolsa cheia não para a coleta (o material que não cabe se perde); outros jogadores não viram pro nó (o rumo não viaja no fio).
Qualquer um coleta qualquer coisa. O que muda o ganho é onde você está.
Sem ferramenta, sem nível, sem proficiência, sem clique e sem alvo. Quem está parado num veio recebe minério sozinho, e a frequência sai da densidade: quantas pedras vivas há no raio do spot. Andar até um lugar melhor é a única alavanca — e é por isso que a disputa é pelo spot.
Não é densidade abstrata de terreno: é um objeto plantado no relevo, gerado da mesma semente no cliente e no servidor, como a árvore já era. Nenhum byte de pedra viaja no fio.
A cor é o tier. Cinza, verde, azul, roxo — não existe laranja. O cristal é
emissivo: não toma luz de face nem oclusão (Material::emissivo). Isso não
é enfeite. É o que permite ler o valor de uma pedra do outro lado do vale e
decidir para qual pico subir; um cristal sombreado só se leria de perto, e não
há UI nenhuma para compensar isso. Pedra melhor também tem mais cristal no
modelo — ela parece melhor de longe.
| pedra | coletas até acabar | volta em | o que entrega |
|---|---|---|---|
| cinza | 14 | 300s | só cinza |
| verde | 24 | 420s | 80% cinza · 20% verde |
| azul | 64 | 600s | 65% cinza · 25% verde · 10% azul |
| roxa | 128 | 900s | 55% cinza · 27% verde · 18% azul · 0% roxo; 50% mais unidades por ciclo |
O que a pedra roxa compra é tempo de coleta, não um material novo: nove
vezes mais coletas que a cinza, e a maior taxa de azul do jogo. Material roxo
não cai de lugar nenhum — ele só existe subindo a cor do azul, e é isso que
fecha a economia (ver docs/ECONOMIA_DE_CRAFT.md).
No topo das montanhas, num chão limpo, e nunca encostada em outra. Quatro condições, todas funções puras das colunas — o cliente e o servidor chegam na mesma resposta sem trocar um byte:
- altura de montanha — acima de 42% do pico do bioma;
- espaçamento — só nasce onde o sorteio da coluna é o menor num quadrado de 7×7 blocos, então duas pedras ficam a pelo menos 2 unidades;
- chão limpo — o quadrado de 5×5 blocos em volta (2,5 u) inteiro na mesma altura. É o que tira a pedra da quina e do degrau, onde metade dela ficava no ar ou enfiada no barranco;
- cume — nada mais de um bloco acima dela num raio de 8 u. Com o terraço de 4 blocos do relevo, isso quer dizer o patamar mais alto das redondezas, e não uma prateleira no meio da encosta.
Não há sorteio de densidade nem "veio" de ruído: o cume é o lugar. O patamar do topo junta as pedras sozinho, e é ele que vira spot.
O tier vem da altitude, com as faixas caindo entre os patamares do relevo — nunca no meio de um, senão o mesmo cume teria pedra de duas cores. Medido na ilha inicial inteira (raio 1600):
| cor | onde | pedras |
|---|---|---|
| cinza | cumes até 21 u | 226 |
| verde | cumes de 22 a 27 u | 105 |
| azul | cumes de 28 a 29 u | 50 |
| roxa | picos de 30 u pra cima | 25 |
Cada cor com metade da anterior, e a roxa só nos pontos mais altos da ilha. Só 1 das 406 pedras encosta num tronco, então o cume não precisa de regra própria pra árvore.
A pedra vai do joelho à cintura: no máximo 1,05 u de altura e 1,05 u de
meia-largura, dentro do chão limpo de 1,25 u que a regra reserva pra ela. O
teste a_pedra_cabe_no_chao_limpo amarra o tamanho do modelo à regra do
lugar — se alguém aumentar a pedra, ela volta a pendurar na quina, e o teste
acusa.
intervalo = COLETA_INTERVALO_BASE_S / pedras vivas, com piso de 1s. Um veio
cheio de 8 pedras rende uma coleta a cada 1,5s; sobrando duas, cai para 6s.
Como cada coleta gasta uma das 14–128 da pedra e a pedra some do mundo quando acaba, o veio esvazia enquanto é explorado e volta quando descansa. Um cume de 11 pedras cinza — o tamanho dos maiores da ilha — se acomoda em ~4 vivas sob um jogador, a uma coleta a cada ~3s: somem dois terços do que estava lá quando ele chegou, e ele vê isso acontecer.
Dois jogadores no mesmo veio esvaziam as mesmas pedras, então cada um leva metade — sem nenhuma regra escrita à mão para dividir. É essa linha que faz a disputa existir.
- Ferramenta — não existe. Nenhuma, em nenhum tier.
- Nível de coleta — não existe. Nem proficiência, nem XP.
- Clique — não existe. Não há nó clicável nem alvo.
- Drop no chão — o material vai direto para a bolsa. Obrigar a pisar no drop devolveria justamente o clique que saiu.
GameWorld::velocidade_de_coleta(sid) devolve 1.0 e é o único ponto de
entrada de bônus de coleta. Já está decidido que o que acelerar a coleta não
será item de coleta nem nível; seja o que for (buff, montaria, construção no
spot, guilda), multiplica ali e em lugar nenhum mais.
Só a exceção. A pedra os dois lados geram da semente; o servidor manda
PedrasEsgotadas no login (quais estão esgotadas agora) e
PedraEsgotada/PedraVoltou na AOI. O cliente refaz o pedaço (~0,9 ms) para
ela sumir de verdade da tela — sem isso o veio já limpo continuaria brilhando
e o jogador não teria como saber onde já passou.
A coleta é automática e silenciosa: sem instrumentação só se enxerga o inventário crescendo, não por que ele cresce nesse ritmo. O panóptico mostra, na ficha de cada jogador: pedras vivas por tier, troncos, densidade, segundos por coleta e quantas coletas ainda cabem no spot.
Todas em shared/constants.rs, seção Coleta:
| constante | valor | o que decide |
|---|---|---|
COLETA_RAIO_SPOT |
6,0 | o que conta como "estar na mina" |
COLETA_INTERVALO_BASE_S |
12,0 | numerador de BASE / pedras vivas |
COLETA_INTERVALO_MIN_S |
1,0 | piso, para veio grande não virar torneira |
COLETAS_POR_PEDRA |
14/24/64/128 | quanto sai de cada pedra |
RESPAWN_DA_PEDRA |
300/420/600/900s | quanto o veio demora a voltar |
RENDIMENTO_DA_PEDRA |
tabela acima | o que cada pedra entrega |
MINERIO_LIMIAR |
0,42 | altura mínima, em fração do pico |
MINERIO_ESPACO |
3 blocos | distância mínima entre pedras |
MINERIO_PLANO |
2 blocos | meio-lado do chão limpo exigido |
MINERIO_CUME |
16 blocos | raio em que ela tem que ser a mais alta |
Uma coleta numa pedra sorteia a cor do material pela escada da pedra
(tier_do_rendimento) e rola a linha daquela cor em farm_node_drops, cada
entrada independente. A tabela mora em um lugar só,
economy::linhas_da_pedra, que o seed (M25) grava e o teste
cada_pedra_rende_os_materiais_do_planejamento simula (60 mil coletas por cor
de pedra):
| material | quantidade | chance | cor |
|---|---|---|---|
| Cobre | 40–120 | sempre | — |
| Aço | 3–6 | 55% | a sorteada |
| Darksteel | 10–25 | 35% | — |
| Platina | 3–6 | 30% | a sorteada |
| Coração Negro, Sombra-da-Lua, Quintessência, Berloque, Fragmento, Ânima | 2–4 | 12% cada | a sorteada |
| Pó Cintilante | 1 | 3% | — |
A cor sorteada segue a tabela da pedra acima (a verde dá 80% cinza / 20% verde, a roxa 55/27/18 e nunca roxo). O banco já tem essas linhas; a migração só roda num banco sem Aço cinza na pedra e não sobrescreve ajuste de admin.
O jogador vê o que ganhou: o cliente compara a bolsa antes e depois de cada
InventoryUpdate e faz "+57 Cobre" subir do personagem (client/ganhos.rs).
Não vai pro chat — a coleta entrega a cada um ou dois segundos e empurraria
pra fora as mensagens de missão.
Roda na mesma máquina, com números de marcador — 8 coletas, volta em 90s, sem tier e sem brilho — só para a madeira não sumir do jogo. Entrega Madeira T1 (3–5, sempre) e às vezes ouro. Esgotada, some da tela como a pedra (o cliente pula a coluna esgotada). Ela ainda não ganhou o desenho que a pedra ganhou: tier por região da mata, contagem própria, e a decisão de se a floresta comum inteira é coletável ou se há bosques marcados.
X (ou o botão COLETA, acima do COMBATE) liga e desliga. Como a coleta é o lugar, o auto não "clica" em nada: ele escolhe o spot e fica lá.
- O cliente pede
PedirSpotDeColeta; o servidor respondeSpotDeColetacom o ponto onde há mais pedra/tronco vivo no raio do spot, num raio de 60 u do jogador, ignorando o que está esgotado, já deslocado pra fora dos corpos (ponto_livre_perto) — e alcançável: percorre os seis melhores veios (quests::spots_ordenados, sem dois no mesmo veio) e fica com o primeiro a que o A* chega. Cume cercado de paredão não é mais escolhido. - O personagem vai até lá pela viagem do mapa e fica parado; a coleta sai sozinha, como sempre.
- Parado no spot sem a bolsa crescer por 18 s (o veio acabou), pede outro.
- Nada vivo por perto: avisa e tenta de novo a cada 6 s.
- Desliga com andar no teclado, Esc, Z (auto combate) ou X. Auto coleta e auto combate são exclusivos: ligar um desliga o outro.
- A auto missão de coleta liga a auto coleta no spot que o servidor indicou.
- A árvore com desenho próprio (acima).
- Mina como lugar construído. Hoje o lugar é o cume que o relevo já tem. Uma caverna ou pedreira desenhada seria trabalho de geração de terreno; a coleta a leria de graça, porque ela só pergunta o que há em volta.
- Caminho até o cume. A pedra está sempre em chão plano, mas nada garante que exista rampa até aquele patamar — um cume cercado de paredão acima do pulo tem pedra que ninguém alcança. A auto coleta já desvia disso (spot alcançável); o mundo em si ainda tem essas pedras.
- Corpo esgotado ainda barra. A pedra/árvore esgotada some da tela, mas a
colisão do servidor (estorvos do
shared) não sabe de esgotamento: fica um obstáculo invisível até ela voltar. - Síntese de cor e receitas — ver
docs/ECONOMIA_DE_CRAFT.md; não são coleta.
Bolsa cheia pausa, nunca perde item. Antes de concluir um ciclo, o
servidor sorteia o que sai e simula a entrega numa cópia da bolsa
(coleta::cabe_tudo: empilha no que já tem, depois ocupa espaço vazio). Se um
item sequer não couber, o ciclo não conclui: nada é entregue, a reserva do
nó não anda, a missão não conta. A coleta fica pausada no mesmo nó
(ColetaEstado { pausado: true }), a animação apaga, o chat avisa "Bolsa cheia
— coleta pausada" e a barra mostra o aviso parada. Ela tenta de novo sozinha
quando a bolsa muda (impressão da bolsa guardada na pausa) — tentar a cada
ciclo com a bolsa igual só piscaria a barra. O AUTO COLETA fica no nó com a
faixa "AUTO COLETA · BOLSA CHEIA"; a auto missão de coleta, que usa o mesmo
auto, também. Andar encerra como sempre.
Ferramenta por tipo. Durante a coleta a arma some e a mão direita segura a
ferramenta do tipo — tools/voxrender/armas.py, pega marcada como as armas:
| Tipo | Ferramenta | Arquivo |
|---|---|---|
| Madeira | machado | personagem/machado.vox |
| Pedra cinza/verde/azul/roxa | picareta com a cabeça na cor do veio | personagem/picareta_1..4.vox |
Quatro arquivos pequenos (70 voxels cada) em vez de troca de paleta no carregamento: a regra "tier é cor" do saque vale pro item, e aqui a cor é do veio, que só existe na coleta.
O tipo vai no fio. O byte acao leva o gesto COLETA (pedra, variante =
cor − 1) ou COLETA_MADEIRA; quem está de fora vê a ferramenta e a cor certas.
Gesto (rig por código, rig::aplica_coleta, um golpe a cada 1,3 s — cabe
um e meio a dois por ciclo):
- picareta: sobe as duas mãos acima da cabeça, desce de uma vez com o tronco inclinando e o peso caindo, quica no impacto e volta;
- machado: arma pra direita, varre em arco horizontal torcendo o tronco, recua no impacto e volta ao meio.
Sem partícula de lasca/faísca ainda (pendência).
Campos de Energia não recebem minério, árvores, tocos nem pedras de cenário. Os patamares de mineração também ficam livres de árvores e obstáculos de cenário; a Energia fica apenas nos campos próprios. Flores e plantas sem colisão podem continuar como decoração. Na Ilha Mágica, cada ilhota de coleta contém somente seu recurso, inclusive nas bordas.
A regra está no gerador compartilhado: cliente desenha os mesmos recursos que o servidor usa na colisão. O cache guarda apenas altura e refaz o plantio ao carregar. A escolha automática tenta pontos em volta do nó e verifica o alcance no fim do caminho, reservando a tolerância de chegada do cliente. Se o personagem já está ao alcance, começa a coleta onde está.