# build artifacts
src/*.s
compile_commands.json
build/*
!build/USA/
build/USA/*
!build/USA/assets/
build/USA/assets/*
!build/USA/assets/map_offsets.h
!build/USA/assets/gfx_offsets.h
# Same two headers for the EU baseline (issue #3). They are symbol -> blob-offset
# tables generated by `asset_processor extract EU` — no ROM bytes — and without
# them in the tree `--game_version=EU` cannot compile on a fresh checkout, which
# is why no EU build existed. Tracked so EU is buildable with nothing but the
# documented xmake commands, exactly like USA.
!build/EU/
build/EU/*
!build/EU/assets/
build/EU/assets/*
!build/EU/assets/map_offsets.h
!build/EU/assets/gfx_offsets.h
cmake-build-*
*.elf
*.exe
*.gba
*.i
*.o
*.map
*.pcm
*.log
sound/**/*.bin
sound/songs/midi/*.s
translations/*.bin

# doxygen
docs/doxygen/html/
docs/doxygen/xml/

# tools
tools/agbcc
tools/binutils

# scripts
*.py
!tools/extract_include_enum.py
!tools/generate_sounds_embed.py
*.pl

# graphics
*.1bpp
*.4bpp
*.8bpp
*.fwjpnfont
*.sgm
*.sa1
*.sg1
*.gbapal
*.hwjpnfont
*.latfont
*.lz

# system files
*.DS_Store

# IDE
.vscode/settings.json
.vscode/c_cpp_properties.json
.vscode/tasks.json
*.code-workspace
.idea/

# misc
.fuse_hidden*
*.bak
*.bat
*.diff
*.dump
*.id0
*.id1
*.id2
*.idb
*.dmp
*.nam
*.rl
*.s.old
*.s.old2
*.sa*
*.swo
*.swp
*.til
*.ss1
*.ss2
*.ss3
*.ss4
*.ss5
*.ss6
*.ss7
*.ss8
*.ss9
Thumbs.db
tags
types_*.taghl
*.zip
*.bundle
!scripts/dev/calcrom.pl
!sound/programmable_wave_samples/*.pcm
_Deparsed_XSubs.pm
*.sna
__pycache__
Info.plist
ctx.c
!docs/doxygen/doxygen_config.py
!scripts/dev/progress.py

!build.py
.xmake
.vscode/
rom_data/
dist/

# Copyrighted ROM, extracted assets, and per-user runtime state.
# These must NOT be committed to the public repository.
baserom.gba
*.sav
run/
config.json
release/

# Regenerable diagnostic capture (TMC_ROOMCAP harness default output). Contains a
# rendered copyrighted ROM frame; never commit. The harness recreates it on demand.
roomcap.png

# Discord Rich Presence application ID — per-developer/release secret-by-policy
# (technically public-by-design, but we don't want forks to inherit our app).
# xmake reads this if present and bakes the ID into the local build.
discord_app_id.txt

# Per-user runtime state (including legacy profile metadata) and F9 bug
# captures (screenshots + save.bin). Same runtime-local policy as *.sav / run/
# above — these must NOT be committed to the public repository.
tmc*.randomizer
tmc.softslots
bugreport_*/
state_auto_*.bin
state_quick.bin

# tools/ build-dependency install prefix: fmt / nlohmann_json / CLI11 are fetched
# and compiled by tools/CMakeLists.txt (FetchContent) into these dirs.
tools/include/
tools/lib/

# Matching retail maps from upstream zeldaret/tmc (for per-region address derivation)
tools/retail_maps/

# Temporary build/run artifacts
.tmp/

# PPU parity: local (save-dependent) gameplay corpus + its golden — not portable
tools/ppu_corpus.local.txt
tools/ppu_golden_hashes.local*

# Vulkan ray-tracing experiment (standalone spike, not part of the tmc_pc
# build). Its compiled binary + .spv shader blobs are regenerable via the
# dir's README; never commit them. Scoped here so the stock SDL_GPU shaders
# in port/shaders/build/*.spv (bin2c-embedded into tmc_pc) stay tracked.
port/vk_rt_experiment/vkrt_demo
port/vk_rt_experiment/shaders/*.spv
.omp/
.worktrees/

# Android shell (gradle) — local SDK paths + build outputs
android/local.properties
android/.gradle/
android/app/build/

# Nintendo 3DS port build and emulator diagnostics
build-3ds/
*.ppu1
tmc3ds.log

# Local release-signing material (CI gets its keystore from secrets)
*.jks
*.keystore
keystore.properties

# Reproducible 3DS updater and procedural idle-art generators.
!platform/3ds/tools/build_update_deps.py
!platform/3ds/tools/gen_triforce.py
!platform/3ds/tests/run-update-tests.py
