TITLE=Godot ROUTE=/platforms/godot LOCALE=en MODIFIED=1792476547 URL=https://wiki.teletypegames.org/platforms/godot L=1 https://www.thegamer.com/godot-engine-popular-games-best/#getting-over-it-with-bennett-foddy L=2 https://jatekfejlesztes.online/tutorials/godot-kezdoknek-i-pong/tpages/alapozo L=3 https://chickensoft.games/blog/game-architecture/ L=4 https://www.youtube.com/watch?v=YVjT0OeE4P0 L=5 https://www.youtube.com/watch?v=S8lMTwSRoRg L=6 https://www.youtube.com/watch?app=desktop&v=1LXukLw93uQ L=7 https://new.pythonforengineers.com/blog/how-to-structure-your-godot-project-so-you-dont-get-confused/ L=8 https://git.teletypegames.org/build/godot-tools L=9 https://github.com/abarichello/godot-ci Godot is an open source 2D and 3D game engine with a visual editor. Scripting in GDScript or C#. bWebsite:0 https://godotengine.org 1Tutorials 1═════════ • 1i12 Popular Games Made With The Godot Engine • 2iBasics | Godot Engine Fundamentals - I. Pong • 3iEnjoyable Game Architecture | Chickensoft — Open Source Tools for Godot and 3iC# • 4iI Used Godot For 100 Hours, Here’s What I Learned • 5iGodot Game Development – Crash Course for Beginners • 6iGame Development Basics in Godot Engine • 7iHow To Structure Your Godot Project (so You Don't Get Confused) r────────────────────────────────────────────────────────────────────────────── 1Makefile 1════════ The Godot editor runs headless and exports the web build (HTML5/WASM) plus the desktop binaries. Templates are in 8godot-tools: • cexample-makefile.make0 → cMakefile0, then set cPROJECT • cexample-export_presets.cfg0 → cexport_presets.cfg0 (presets: cWeb0, cWindows x860, cWindows x640, cLinux x640, cMac universal0) • in cMac universal0 set capplication/bundle_identifier Two settings that are easy to miss: p # project.godot — the arm64 macOS slice fails to export without this p [rendering] p textures/vram_compression/import_etc2_astc=true p # export_presets.cfg, Web preset — no threads, so the game runs without COOP» p /COEP headers p variant/thread_support=false 2Variables 2───────── t┌───────────────┬───────────────────────────────┬───────────┐ t│h Variable t│h Description t│h Default t│ t├───────────────┼───────────────────────────────┼───────────┤ t│0 cPROJECT0 t│0 Name used in output filenames t│0 cgodotdemo0 t│ t│0 cGODOT0 t│0 Godot editor binary t│0 cgodot0 t│ t│0 cEXPORT_PRESET0 t│0 Preset in cexport_presets.cfg0 t│0 cWeb0 t│ t│0 cDIST_DIR0 t│0 Artifact directory t│0 cdist0 t│ t│0 cWEB_DIR0 t│0 Raw web export t│0 cdist/web0 t│ t│0 cVERSION_FILE0 t│0 Version file for CI t│0 c.version0 t│ t└───────────────┴───────────────────────────────┴───────────┘ 2Targets 2─────── p make build # godot --headless --import, creates .godot/ » p cache p make run # godot --path . p make web # export the Web preset into dist/web/ p make export VERSION=1.0.0 # web export packed as godotdemo-1.0.0.html.» p zip p make binaries VERSION=1.0.0 # all desktop targets p make binary-win-x64 VERSION=1.0.0 # one target only p make watch # re-import on .gd / .tscn change (needs fswa» p tch) p make clean # remove dist/ and .godot/ cbuild0 is also a quick "does the project load" check. Run it on a fresh checkout before any export. Desktop notes: • Godot cross-exports every desktop platform from any host, including the linux CI image. • macOS is one universal (intel + arm) build. Per-arch export would need custom templates. • The c.app0 is ad-hoc signed by Godot (ccodesign/codesign=10); arm64 macOS refuses unsigned binaries. • Windows and Linux embed the c.pck0 in the executable, so each zip holds a single file. • Every zip follows the ReleaseAsset convention: one root folder, plus LICENSE and README.md when present. 2VS Code 2─────── Copy cexample-tasks.json0 to c.vscode/tasks.json0. Tasks: bRun0 (default, cCmd+Shift+B0), bEdit0, bExport Web0, bMake build0. 2Generated artifacts 2─────────────────── t┌─────────────────────────────────────┬──────────────────────────────────────┐ t│h File t│h Description t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cdist/web/0 t│0 Raw web export (index.html, .js, t│ t│0 t│0 .wasm, .pck) t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cgodotdemo-.html.zip0 t│0 Web build t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cgodotdemo--win-x86.zip0 t│0 Windows 32-bit t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cgodotdemo--win-x64.zip0 t│0 Windows 64-bit t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cgodotdemo--linux-x64.zip0 t│0 Linux 64-bit t│ t├─────────────────────────────────────┼──────────────────────────────────────┤ t│0 cgodotdemo--mac-universal.0 t│0 macOS universal c.app0, ad-hoc signed t│ t│0 czip0 t│0 t│ t└─────────────────────────────────────┴──────────────────────────────────────┘ 2Requirements 2──────────── Local only: cmake0, a Godot 4.x binary with bexport templates0 (web + desktop), cexport_presets.cfg0, czip0, cunzip0, and cfswatch0 for watch mode. CI needs nothing in the repo. r────────────────────────────────────────────────────────────────────────────── 1Pipeline 1════════ Game repos contain bno pipeline YAML and no CI make targets0. Woodpecker asks the update server, and WarpEngine serves the whole config from c/build/config (template clib/warp_engine/ci/woodpecker/platforms/godot/pipeline.yaml.erb0). The repo needs three things: p # .woodpecker.yaml p platform: godot • cmetadata.json • the capplication_token0 Woodpecker secret: a WarpEngine ApplicationToken with cupdate0 + cupload0 scopes • cname: 0 in the marker only when the software name differs from the repo name Builder images (e.g. cgodot-builder:4.7.10) come from the update server's cci_platforms0 config. Preview the served pipeline: p curl "https://teletypegames.org/build/config?platform=godot" 2Steps 2───── t┌────────────┬───────────────────────────────────────────────────────────────┐ t│h Step t│h What it does t│ t├────────────┼───────────────────────────────────────────────────────────────┤ t│0 1. version t│0 read the version from cmetadata.json0, else the git short hash; t│ t│0 t│0 outside cmain0/cmaster0 prefix it as cdev--0; t│ t│0 t│0 write c.version0 t│ t├────────────┼───────────────────────────────────────────────────────────────┤ t│0 2. build t│0 in the cgodot-builder0 image: import, export the cWeb0 preset, t│ t│0 t│0 then the four desktop targets; pack each into its own zip t│ t├────────────┼───────────────────────────────────────────────────────────────┤ t│0 3. upload t│0 copy cmetadata.json0 to cgodotdemo-.metadata.json0, then t│ t│0 t│0 cPOST /build/upload0 per file with the cX-Update-Secret0 header t│ t├────────────┼───────────────────────────────────────────────────────────────┤ t│0 4. publish t│0 cPOST /build/publish0 with cname0, cplatform0, cversion0 t│ t└────────────┴───────────────────────────────────────────────────────────────┘ The builder image is 9godot-ci (headless editor band the matching export btemplates0) with cmake0, czip0, cunzip0 and cjq0 added, so no step runs capt-get0. It is built from cbuilder.Dockerfile0 in godot-tools. p curl -X POST -H "X-Update-Secret: " \ p "https://teletypegames.org/build/publish?name=godotdemo&platform=godot&ver» p sion=1.0.0" 2Result 2────── Web build and four desktop targets, each in its own zip, attached to the release as ReleaseAssets and downloadable from the catalog page. The public game index updates itself.