---
title: TIC-80
url: 'https://wiki.teletypegames.org/hu/platforms/tic80'
markdown: 'https://wiki.teletypegames.org/hu/platforms/tic80.md'
lang: hu
date: '2026-03-03'
description: 'A TIC-80 pindurka fantasy számítógép kis játékokhoz. A kód, a sprite-ok, a térképek, a hangok és a zene mind benne szerkeszthetők. Weboldal: https://tic80.com Eszközrepó: https://git.teletypegames.org/build/tic80-tools Makefile Egy kazetta egyetlen .lua fájl. Hogy a kód modularizált maradjon, sok …'
taxonomy:
  tag:
    - howto
---

# TIC-80

A TIC-80 pindurka fantasy számítógép kis játékokhoz. A kód, a sprite-ok, a térképek, a hangok és a zene mind benne szerkeszthetők.

**Weboldal:** https://tic80.com **Eszközrepó**: https://git.teletypegames.org/build/tic80-tools

---

# Makefile

Egy kazetta egyetlen `.lua` fájl. Hogy a kód modularizált maradjon, sok fájlra bontjuk, és buildidőben fűzzük össze.

```text
project-root/
├── inc/
│   ├── core.lua
│   ├── player.lua
│   └── world.lua
├── impostor.inc      # build-sorrend, soronként egy fájlnév
├── Makefile
└── README.md
```

Az `impostor.lua` generált fájl. A sorrend számít: egy fájlnak az általa használt globális elemek után kell jönnie.

## Célok

```sh
make build                  # az inc/ fájlok összefűzése a <project>.lua fájlba
make minify                 # a kód zsugorítása, mentés <project>.original.lua néven
make export VERSION=1.0.0    # build + minify, majd a .tic és a .html.zip mentése
make export_assets          # PALETTE/TILES/SPRITES/MAP/SFX/WAVES -> inc/meta/meta.assets.lua
make import_assets          # az assets/<típus>/*.png importálása a kazettába
make watch                  # újraépítés az inc/, a .inc fájl és az assets/ változására
make lint                   # luacheck, a sorszámokat visszavezetve a forrásfájlokra
make docs                   # ldoc HTML a docs/ könyvtárba
make install_precommit_hook # a .git/hooks/pre-commit lefuttatja a make lint parancsot
make clean                  # a generált fájlok törlése
```

Az `export` a verziózott fájlokat verzió nélküli néven is átmásolja (`impostor.tic`, `impostor.html.zip`). Az `export_assets` a grafikát forráskódként tartja verziókövetés alatt.

## VS Code

Másold az eszközrepó `example-tasks.json` fájlját `.vscode/tasks.json` néven, és cseréld az `impostor.lua` nevet a saját kazettád nevére. Feladatok: **Run TIC80** (alapértelmezett, `Cmd+Shift+B`), **Build & Run TIC80**, **Export assets**, **Make build**.

## Előálló artifactok

| Fájl | Leírás |
|---|---|
| `<project>.lua` | Összefűzött (és minifikált) forrás |
| `<project>.original.lua` | Minifikálás előtti mentés |
| `<project>.tic` | Kazetta |
| `<project>.html.zip` | HTML-build |
| `<project>-*-docs.zip` | Dokumentáció |
| `<project>-*-win-x64.zip` | Windows-lejátszó, beleégetett kazettával |
| `<project>-*-linux-x64.zip` | Linux-lejátszó, beleégetett kazettával |
| `<project>-*-mac-x64.zip` | macOS (Intel) lejátszó, beleégetett kazettával |

## Követelmények

Csak helyben: `make`, `tic80` a `PATH`-ban, `lua`, `luacheck`, `ldoc`, `curl`, watch módhoz pedig `fswatch`. A CI a saját eszközeit telepíti.

---

# Pipeline

A pipeline nincs benne a játékrepóban. A Woodpecker az update szervertől kéri el, a WarpEngine pedig a teljes konfigurációt a `/build/config` végponton szolgálja ki (sablon: `lib/warp_engine/ci/woodpecker/platforms/tic80/pipeline.yaml.erb`).

A repóhoz három dolog kell:

```yaml
# .woodpecker.yaml
platform: tic80
```

- `name: <szoftver>` — csak akkor, ha a szoftvernév eltér a repó nevétől
- az `application_token` Woodpecker-secret: egy WarpEngine ApplicationToken az `update` + `upload` jogosultságokkal, az adminban létrehozva

A TIC-80-projekteknek **nincs `metadata.json` fájljuk**. A verzió és a katalógus-metaadatok az `inc/meta/meta.header.lua` kommentfejlécéből jönnek.

A pontos parancsok megtekintése:

```sh
curl "https://teletypegames.org/build/config?platform=tic80"
```

## Lépések

| Lépés | Mit csinál |
|---|---|
| 1. version | az engine közös lépése (a WarpEngine 1.7 óta): a verzió az `inc/meta/meta.header.lua` `-- version:` sorából; tagnél a verziótagnek egyeznie kell vele; a repó alapágán kívül és egy `dev-<ág>` tagen `dev-<verzió>-<ág>`, verzió nélkül `dev-<commit>`; megírja a `.version` fájlt |
| 2. lint | `luacheck` a `tools` image-ben (a teletypegames.org-on `ci-tools`, előre telepített luacheck-kel és ldoc-kal; nélküle `alpine` + minden futáskor `luarocks install`); a `.inc` sorrendje szerint fűzi össze az `inc/` fájlokat sortérképpel; bármilyen hibánál elbukik |
| 3. minify | összefűzés és minifikálás a `lua-minify-tic80` eszközzel; az eredetit megtartja a dokumentációhoz |
| 4. docs | `ldoc` a minifikálás előtti forráson, `<név>-<verzió>-docs.zip` néven becsomagolva |
| 5. export | a `tic80pro` image-ben: elmenti a `.tic` kazettát, és exportál `.html.zip` fájlt |
| 6. binaries | `export win / linux / mac` a beleégetett kazettával, slugonként egy zip; a sablonok a tic80.com-ról töltődnek le, tehát ehhez a lépéshez hálózat kell |
| 7. upload | **csak tagre:** fájlonként `POST /build/upload`, `X-Update-Secret` fejléccel az `application_token` alapján |
| 8. publish | **csak tagre:** `POST /build/publish?platform=tic80` |
| 9. tag | az engine közös lépése (a WarpEngine 1.9 óta), **csak push után**: a forrás új verziója megkapja a `v<verzió>` tagjét, és annak pipeline-ja futtatja a *csak tagre* jelölt lépéseket; egy már tagelt verzió nem ad ki semmit; egy dev build az ág `dev-<ág>` tagjét a commitra helyezi, így mindig a legfrissebb dev build van kiadva. Lásd: *Verziók és kiadások* a [WarpEngine](https://wiki.teletypegames.org/hu/engines/warp-engine) oldalon |

A verzió emelése maga a kiadás: a push buildel és tagel, a tag pipeline-ja tölt fel és publikál (WarpEngine 1.9). Egy push, amely nem emeli a verziót, csak buildel.

A builder image (`tic80pro`) és a tools image az update szerver `ci_platforms` konfigurációjából jön, nem a repóból. A `ci-tools`-szal a lint lépés 10–15 s-ról 3 s-ra, a docs lépés 12–14 s-ról 1 s-ra rövidült.

## Eredmény

Lintelt, minifikált, verziózott build; a dokumentáció és a natív lejátszók ReleaseAssetként csatolva; a nyilvános játékindex magától frissül. Minden buildlogika a szerveroldalon él — a repó csak a jelölőt és a tokenjét hordozza.

---

# Builder image

A TIC-80 Pro kereskedelmi termék, az **itch.io**-n árulják. A forrás nyílt, tehát licenccel saját Pro binárist építhetsz egy tiszta image-ben.

```dockerfile
FROM ubuntu:24.04

RUN apt-get update && apt-get install -y \
      build-essential cmake git \
      libsdl2-dev libpipewire-0.3-dev libwayland-dev \
      ruby-dev lua5.4 libcurl4-openssl-dev \
    && rm -rf /var/lib/apt/lists/*

RUN git clone --recursive https://github.com/nesbox/TIC-80 /opt/TIC-80
RUN cd /opt/TIC-80/build \
    && cmake -DBUILD_PRO=On -DBUILD_SDLGPU=On -DBUILD_WITH_ALL=On -DBUILD_STATIC=On .. \
    && cmake --build . --parallel

ENV PATH="/opt/TIC-80/build/bin:${PATH}"
WORKDIR /workspace
CMD ["/bin/bash"]
```

| Kapcsoló | Miért |
|---|---|
| `BUILD_PRO=On` | bekapcsolja a Pro funkciókat |
| `BUILD_SDLGPU=On`, `BUILD_WITH_ALL=On` | GPU-támogatás és minden opcionális funkció |
| `BUILD_STATIC=On` | egyetlen hordozható bináris, megosztott könyvtárak okozta meglepetések nélkül |

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Platformok](https://wiki.teletypegames.org/hu/platforms.md)
- Previous: [Commodore Plus/4](https://wiki.teletypegames.org/hu/platforms/plus4.md)
