Colheita de Ouro: do zero ao jogo publicado
Como nasceu a nossa fazenda em 3D feita em Godot, da câmera ao mercado e da versão para navegador ao Android, com um trecho do código real de cada etapa.

Colheita de Ouro é uma fazenda tranquila em 3D: você planta, rega, colhe e vende na caminhonete para ir aumentando a sua terra. Fizemos o jogo em Godot, com os modelos em Blender, e ele está grátis no navegador, pelo itch.io, desde 2 de novembro de 2026.
Do zero ao lançamento, em código
Estas são as etapas principais da construção, cada uma com um trecho curto do código real do jogo, em GDScript, a linguagem do Godot. As cinco primeiras aconteceram entre 31 de outubro e 1º de novembro, antes do primeiro registro no Git; por isso os trechos delas mostram o código como estava na versão publicada. No jogo, o código está em português; aqui os nomes e os comentários foram traduzidos para o inglês, com a mesma lógica.
-
Câmera e controles da fazenda
Não há um personagem: quem passeia pela fazenda é a câmera, com WASD ou as setas do teclado.
scripts/camera/farm_camera.gd func _process(delta: float) -> void: var direction: Vector2 = Input.get_vector(&"move_left", &"move_right", &"move_up", &"move_down") if direction == Vector2.ZERO: return # The "Camera speed" option multiplies it (dragging with a finger still follows the finger). var speed: float = keyboard_speed * _camera.size / initial_zoom * Options.camera_speed position += (_right() * direction.x - _forward() * direction.y) * speed * delta _clamp_position() -
Plantar, regar e colher
A planta só cresce enquanto tem água, e regar a tempo recupera a saúde dela.
scripts/farm/plant.gd func is_ready() -> bool: return growth >= 1.0 and not wilted func water() -> void: if not wilted: water_level = 1.0 health = 1.0 # watered in time: the wilting countdown restarts -
Mercado e moedas
A colheita vai para as vagas de venda da caminhonete, e cada unidade vendida vira moedas aos poucos.
scripts/autoload/market.gd while slot["progress"] >= time and slot["remaining"] > 0: slot["progress"] -= time slot["remaining"] -= 1 var value: int = price(slot["item"]) slot["earned"] += value GameState.add_coins(value, &"sale", slot["item"]) GameState.count(&"sold") changed = true -
Salvamento automático
O jogo salva sozinho quando a janela fecha ou quando o celular deixa o jogo em segundo plano.
scripts/autoload/save_system.gd func _notification(what: int) -> void: match what: NOTIFICATION_WM_CLOSE_REQUEST, NOTIFICATION_APPLICATION_PAUSED, NOTIFICATION_APPLICATION_FOCUS_OUT: save() upload_to_cloud() -
Toque com dois dedos
No celular, a câmera guarda cada dedo na tela. Com dois dedos, começa o gesto de mover, aproximar e girar.
scripts/camera/farm_camera.gd func _handle_touch(touch: InputEventScreenTouch) -> void: if touch.pressed: _touches[touch.index] = touch.position else: _touches.erase(touch.index) if _touches.size() == 2: _start_gesture() -
Publicado no navegador
Na versão para navegador o Godot clareia demais a cena, então ajustamos a luz e a cor só para ela.
scripts/autoload/options.gd ## In the browser, Godot renders in "Compatibility" mode, which makes the scene too bright (the road ## turns white); there, the sun and the ambient light are multiplied by this value. const COMPATIBILITY_LIGHT_FACTOR: float = 0.55 const COMPATIBILITY_SATURATION: float = 1.25 ## Saturation of the 3D world (1 = the original Palette colors). const WORLD_SATURATION: float = 0.72 -
Pronto para o Android
O botão voltar do celular passou a funcionar como o Esc do teclado, em vez de fechar o jogo.
scripts/autoload/screen.gd func _notification(what: int) -> void: if what != NOTIFICATION_WM_GO_BACK_REQUEST: return for pressed: bool in [true, false]: var event: InputEventAction = InputEventAction.new() event.action = &"cancel" event.pressed = pressed Input.parse_input_event(event)
Em números
O jogo foi publicado com 132 scripts e quase 17 mil linhas de código. Uma semana depois, já são 160 scripts e mais de 20 mil linhas, com novas versões publicadas em 3, 5, 7 e 8 de novembro.
Os próximos passos do Colheita de Ouro também vão aparecer aqui no devlog. Até a próxima cena.