# User-supplied HD art / music packs stay out of the repo (assets/ is docs
# imagery only). The manifest itself IS tracked as a template of discovered
# replacement hooks — see docs/builder-workshop.md and docs/manual.md.
# config.ini is the developer's LIVE config: cheats, window size and debug
# switches accumulate in it during normal work. The tracked copy is the stock
# template at installer/packaging/templates/config.ini, which is what a
# release vends and what `make dev` seeds this file from.
#
# Anchored: an unanchored "config.ini" matches at ANY depth and would swallow
# the template itself.
/config.ini

game-assets/*
# manifest.ini is LIVE and user-edited: the builder writes to it, players
# hand-edit it, and local experiments accumulate in it. The tracked copy is the
# template at installer/internal/builder/assets/manifest.ini, which is what
# a release vends and what seeds a fresh checkout on first builder run.
!game-assets/hd/
game-assets/hd/*
!game-assets/audio/
game-assets/audio/*
# Only the explicitly listed, independently redistributable host fonts are
# tracked. User/pack fonts and all ROM-extracted font data remain local.
!game-assets/fonts/
game-assets/fonts/*
!game-assets/fonts/noto/
game-assets/fonts/noto/*
!game-assets/fonts/noto/NotoSans-SemiCondensedExtraBold.ttf
!game-assets/fonts/noto/OFL.txt
!game-assets/fonts/noto/NotoSansJP-Bold.otf
!game-assets/fonts/noto/NotoSansJP-OFL.txt
!game-assets/fonts/noto/NotoSansArabic-Bold.ttf
!game-assets/fonts/noto/NotoSansHebrew-Bold.ttf
!game-assets/fonts/noto/README.md
game-assets/manifest.ini

# ROM files (user must supply their own)
*.sfc
*.smc
*.srm
*.srm.bak
*.png
*.ppm
*.wav
*.ogg
*.bin
*.rec
# Game-owned extraction commands emit private ZIPs containing ROM-derived
# scripts/graphics. Release archives are generated below release/, too; neither
# kind belongs in source control.
*.zip
# Private author backups and locally exported translations can contain retail
# reference text or user-owned work. Never publish them with the source tree.
*.arproject
*.arlang
# Two independently authored demo messages, validated against the source
# example. All user publications and ROM-derived backups remain ignored.
!examples/example.fr-ca.arlang
!assets/*.png
!installer/internal/builder/assets/title-logo.png

# Build output. Root paths are anchored and module-owned paths are explicit;
# a broad `build*/` glob would also match installer/internal/builder/, which is
# source code and must never be hidden from Git.
/build/
/build-*/
/release/
# Private locally generated games contain a ROM and compiled ROM-derived code.
*.app/
*.AppDir/
*.AppImage
*.portable
.actraiser-package-*/
ActRaiserRecomp-previous-*/
.actraiser-seed.json
.actraiser-initialize.lock
/logs/
/audio-previews/
/snesrecomp-go/build/
/installer/build/
/installer/packaging/build/
/installer/packaging/cache/
*.o
*.exe
*.out

# Menu/user-owned application settings (config.ini remains the tracked base).
/settings.ini
/settings.ini.tmp

# snesrecomp generated output — mechanically derived from the copyrighted ROM
# (one C function per recompiled 65816 routine). We can't distribute this;
# users must supply their own verified ar.sfc and run tools/regen.sh, which
# writes exactly these paths. recomp/*.cfg is fine to keep tracked — it's our
# own hand-written addresses/directives/commentary, not translated ROM code.
src/gen/*.c
src/generated/*.c
src/generated/*.h
recomp/funcs.h

build-trace/
tools/oracle/oracle_trace.jsonl

# IDE
.claude/
.vscode/
.idea/
*.swp
*.swo

# OS
.DS_Store
Thumbs.db

# Python
__pycache__/
*.pyc
.venv/
venv/

# Dependencies (cloned repos) — except explicitly vendored dependencies
third_party/*
!third_party/stb/
!third_party/unicode/
!third_party/sheenbidi/
third_party/unicode/*
!third_party/unicode/NOTICE
!third_party/unicode/utf8proc-LICENSE.md

# Test artifacts
/Testing/
tests/golden/*.png
tests/replays/*.bin

# saves/ is purely runtime output (WRAM/SRAM dumps, snapshots, replays) — the
# runner writes here (src/main.c), nothing reads a committed file from here as
# a build/test fixture. Blanket-ignore rather than chase individual extensions
# (some prior dumps evaded the *.bin/*.srm/*.rec rules above by filename, e.g.
# "save.srm - pre act 1" doesn't literally end in .srm).
saves/*

# Trace logs (too large for git, and derived from running the actual ROM)
*.trace
*.cdl
*.log
*.jsonl

# Ad-hoc debug-session stderr captures and regen console output at repo root
# (dumpN.txt / regenN.txt convention used during bug hunts)
/dump*.txt
/regen*.txt
/slow*.txt
tools/oracle/harte_cache/
build/opcode_diff/
snesref
snesrecomp-go/testdata/baseline/

# Prebuilt libretro cores (e.g. snes9x_libretro.dylib) — platform-specific
# compiled binaries, not something we build or maintain; users fetch their own
# from buildbot.libretro.com.
tools/oracle/*.dylib
tools/oracle/*.so
tools/oracle/*.dll
# Per-run artifact folders (tools/run.sh)
runs/
# Local reference material kept deliberately untracked (retired handovers,
# authored-but-unimplemented specs). See archive/README.md. Anchored so it
# cannot match a nested directory the way the old unanchored `build*/` did.
/archive/
# Internal game, recompiler, and Builder architecture, investigations, plans,
# checklists, and validation evidence. Player/modder guides belong in /docs.
/development/
# Prevent older report generators from reintroducing local evidence as docs.
/docs/artifacts/
/docs/evidence/
/docs/research/
# Local runner engineering journals, benchmark notes, and retired design
# audits. Maintained SDK documentation belongs in runtime/docs instead.
/snesrecomp-go/runtime/development/
# Outgoing patch series staged for transfer to the ROM machine; regenerated by
# git format-patch, so never a source of truth.
/patches/

# Local wave patch-series handovers; preserve them on disk but never version
# them or publish them to the remote repository.
/ar-recomp-wave*/
