TITLE=Löve ROUTE=/platforms/love LOCALE=en MODIFIED=1792476547 URL=https://wiki.teletypegames.org/platforms/love LÖVE (Love2D) is a lightweight framework for 2D games in Lua. Good for prototypes and small to medium games. bWebsite:0 https://love2d.org r────────────────────────────────────────────────────────────────────────────── 1Makefile 1════════ A LÖVE game ships as a c.love0 archive. The web build is that same archive bundled with clove.js0. 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 clove2ddemo0 t│ t│0 cBIN_DIR0 t│0 Build-time checks t│0 cbin0 t│ t│0 cDIST_DIR0 t│0 Packaged artifacts t│0 cdist0 t│ t│0 cWEB_DIR0 t│0 Web files t│0 cdist/web0 t│ t│0 cLOVE_NAME0 t│0 Generated .love file t│0 clove2ddemo.love0 t│ t│0 cVERSION_FILE0 t│0 Version file for CI t│0 c.version0 t│ t└──────────────┴───────────────────────────────┴─────────────────┘ 2Targets 2─────── p make build # luac syntax check on every .lua file p make love # pack into dist/love2ddemo.love (skips .git, M» p akefile, dist/) p make web # download love.js, assemble dist/web/, patch i» p ndex.html + player.js p make export VERSION=1.0.0 # both, zipped as love2ddemo-1.0.0.love.zip an» p d -1.0.0.html.zip p make watch # rebuild on .lua change (needs fswatch) p make clean # remove bin/ and dist/ 2VS Code 2─────── Copy cexample-tasks.json0 to c.vscode/tasks.json0 as is. Tasks: bRun Löve0 (default, cCmd+Shift+B0), bBuild & Run Löve0, bBuild .love package0, bMake build0. 2Generated artifacts 2─────────────────── t┌────────────────────────────────────────┬──────────────────────────────────┐ t│h File t│h Description t│ t├────────────────────────────────────────┼──────────────────────────────────┤ t│0 cdist/love2ddemo.love0 t│0 LÖVE package t│ t│0 clove2ddemo-.love.zip0 t│0 Zipped .love t│ t│0 clove2ddemo-.html.zip0 t│0 Web build t│ t│0 clove2ddemo-.metadata.json0 t│0 Metadata for distribution t│ t│0 clove2ddemo--win-x64.zip0 t│0 Fused Windows build (exe + dlls) t│ t│0 clove2ddemo--mac-universal.zip0 t│0 Fused universal c.app0 t│ t│0 clove2ddemo--linux-x64.zip0 t│0 Fused AppImage t│ t└────────────────────────────────────────┴──────────────────────────────────┘ 2Requirements 2──────────── Local only: cmake0, cluac0, czip0, cunzip0, ccurl0, csed0, and cfswatch0 for watch mode. CI images bring their own tools. r────────────────────────────────────────────────────────────────────────────── 1Pipeline 1════════ The pipeline is not in the game repo. Woodpecker asks the update server, and WarpEngine serves the whole config from c/build/config0 (template clib/warp_engine/ci/woodpecker/platforms/love/pipeline.yaml.erb0). The repo needs three things: p # .woodpecker.yaml p platform: love p name: love2ddemo # only when the software name differs from the repo name • cmetadata.json • the capplication_token0 Woodpecker secret: a WarpEngine ApplicationToken with cupdate0 + cupload0 scopes Builder images come from the update server's cci_platforms0 config. Preview the served pipeline: p curl "https://teletypegames.org/build/config?platform=love" 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 t│ t│0 t│0 hash; outside cmain0/cmaster0 prefix it as t│ t│0 t│0 cdev--0; write c.version0 t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 2. build t│0 in the clove-builder0 image: pack the c.love0, build the clove.js0 t│ t│0 t│0 web bundle, patch the player and HTML with name + version, t│ t│0 t│0 zip both t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 3. binaries t│0 fuse the c.love0 into the official LÖVE release artifacts t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 4. upload t│0 copy cmetadata.json0 to clove2ddemo-.metadata.json0, t│ t│0 t│0 then cPOST /build/upload0 per file with the cX-Update-Secret0 t│ t│0 t│0 header t│ t├─────────────┼──────────────────────────────────────────────────────────────┤ t│0 5. publish t│0 cPOST /build/publish0 with cname0, cplatform0, cversion0 t│ t└─────────────┴──────────────────────────────────────────────────────────────┘ Fusing, per platform: • bwin-x640 — clove.exe0 + c.love0 concatenated, dlls included • bmac-universal0 — the c.love0 inside the official universal clove.app0, cInfo.plist patched to the project name • blinux-x640 — fused AppImage, rebuilt with cmksquashfs0. The AppImage runtime is glibc-linked, so it is never executed on the alpine builder; the squashfs offset comes from creadelf0. The LÖVE dist files come from the image cache at c/opt/love-dist/0, with a curl fallback to GitHub. p curl -X POST -H "X-Update-Secret: " \ p "https://teletypegames.org/build/publish?name=love2ddemo&platform=love&ver» p sion=1.0.0" 2Result 2────── A c.love0 package, a web bundle and three fused desktop builds, all versioned, uploaded and published. The public game index updates itself.