# Generated from a user-provided Pokemon Red ROM.
# Regenerate with: python3 tools/build_data.py --rom /path/to/pokemon-red.gb --clean
data/generated/
assets/generated/

# User-supplied cartridge dumps. Never commit these.
*.gb
*.gbc
*.gba
*.sav
*.z64
# .nds was missing until Gen 4 arrived: this block was written for the
# Game Boy and GBA carts and never extended when Platinum support began,
# so a Platinum dump sat in the working tree UNIGNORED -- untracked, but one
# `git add -A` away from putting a copyrighted cartridge in a public repo.
*.nds

# Inverted Mew sprites the example mod ships: tools/generate_example_mod_sprite.py
# derives them from an imported cache, so they are ROM content. mod.card already
# documents assets/ as empty until that script runs locally.
mods/example_mew_starter/assets/

# In-game screenshots render ROM-derived tiles and sprites. Extensionless, so
# none of the image rules above catch them.
/ruins_kabuto

# Third-party checkouts scripts/setup_gen2_symbols.ps1 fetches on demand: a
# pret/pokegold clone (including compiled .o objects) and the RGBDS toolchain.
# Only their .sym output matters, and make_gen2_manifest.py has already baked
# that into the committed tools/rom_manifest_*.json.
tools/vendor/

# NOTE: data/generated_gen2_{gold,silver}/ are deliberately COMMITTED. They
# are cart-free scaffolds -- ids, ordering and pret labels only, with text as
# {GEN2_TEXT:bank:addr:label} refs -- and RomExtractorGen2 decodes the actual
# names, stats, map blocks, warps and dialogue off the ROM at import. 7 of
# their 8 files are byte-identical between gold and silver; that equality is
# the check that no ROM content has leaked back in.

# LÖVE packages
*.love

# Hand-made release archives. Zipping the project folder sweeps in .venv (which
# hard-codes the packager's Python path and breaks setup for everyone else),
# saves and generated ROM data. Build releases with scripts/build.sh instead.
/*.zip
/*.7z
/*.tar.gz

# Local saves (LÖVE writes to its save dir, but keep the repo clean anyway)
save/

__pycache__/
*.pyc
.venv
.*/
.*
!.github/
!.gitignore
!.gitattributes
!.luacheckrc

# Android build outputs / local SDK path / packaged payload (keep love-android sources)
mobile/android/app/build/
mobile/android/love/build/
mobile/android/.gradle/
mobile/android/local.properties
mobile/android/app/src/embed/assets/game.love
mobile/android/**/build/

# iOS love-src (downloaded love-*-ios-source; see mobile/ios/README.md)
mobile/ios/love-src/
mobile/ios/cache/
mobile/ios/build/

# Final packaged build artifacts (mac/win/web/android/ios) — see scripts/build.sh
/dist/
/tmp/

# Legacy manual convenience-copy location (superseded by /dist/android/)
mobile/dist/

# Tiled map-editing workspace (tools/tiled_export.py). Derived from the imported
# ROM cache exactly like data/generated/, so it is never committable.
/build/tiled/

# per-machine iOS bundle-id pin (see scripts/build_ios.sh)
mobile/ios/bundle_id.local

# Written by scripts/setup.{sh,ps1} so the launcher can tell a finished
# install from a fresh one -- a Gen2 import writes its data into the LOVE
# save folder, not into data/generated, so there is nothing else to test for.
.setup-complete

# Code-signing material.  The MSIX release certificate's private key lives in
# a repository secret (docs/msix-signing.md), never in the tree: committing a
# .pfx hands anyone who clones the repo the ability to sign packages as us.
*.pfx
*.p12
*.snk

# Android signing material.  A *release* keystore must never be committed.
# mobile/android/debug.keystore is the deliberate exception and is negated
# below: it carries no secret (the passwords are the standard "android"), and
# committing it is the whole point -- CI must sign every release with the SAME
# key or no release can upgrade another.  See docs/android-signing.md.
*.jks
*.keystore
!mobile/android/debug.keystore


#exclude mods folder 

/tests/*
!/tests/parity_frlg_ship.lua
!/tests/parity_frlg_warp_allowlist.lua
!/tests/parity_gen3_type_categories.lua
!/tests/parity_frlg_save_layout.lua
!/tests/frlg_ship_driver.lua
!/tests/frlg_gyms_driver.lua
!/tests/frlg_gym_puzzles_driver.lua
!/tests/frlg_rocket_driver.lua
!/tests/frlg_rocket_traversal_driver.lua
!/tests/frlg_mtmoon_battle_placement_driver.lua
!/tests/frlg_champion_driver.lua
!/tests/frlg_hall_of_fame_driver.lua
!/tests/frlg_sevii_progression_driver.lua
!/tests/console_textinput_driver.lua
# run modes (Nuzlocke / Soul Link / randomizer): docs/run-modes.md
!/tests/runmodes_test.lua
!/tests/firered_launcher_driver.lua
/mods/*
/Claude outputs/*
# Screenshots rendered from a ROM are never committed.
/docs/images/
/tools/gen2_contest_ui_harness/*.png
# ...EXCEPT THE ONES THAT SHIP WITH THE LAUNCHER.
#
# `/mods/*` above keeps a developer's working folder out of the repo -- the
# Stadium 2 art extracted from a dump, the online mod, the editor fixtures --
# and it was keeping DRAMATIC SHAPES out too.  That is why the mod is not in
# any release: scripts/pack_love.sh stages `mods` into every payload, but CI
# builds from a clean checkout, and a clean checkout of this repo has no
# `mods/` at all.  The shipped game.love contains zero mod entries.
#
# A mod that is meant to be PREPACKAGED has to be committed, so this one is
# re-included -- and then narrowed again, because most of what sits in its
# folder is not the mod:
#
#   * oxr/ and oxr.zip are an unpacked NuGet drop of the OpenXR loader --
#     Windows .dll and .lib files for the VR work.  Thirteen megabytes, and
#     not loadable from inside a .love in any case (it is a zip; LOVE cannot
#     dlopen out of one).
#   * tests/ and tools/ are the mod's own development material, the same way
#     this repo's are.
#   * CHANGELOG.md and VOXEL_HOENN_PLAN.md are a third of a megabyte of
#     writing about the work rather than the work.
#
# What is left -- main.lua, the manifest, lib/, assets/, data/ and the card --
# is the mod, and it is what the launcher needs to offer it.
!/mods/DRAMATIC_SHAPE/
/mods/DRAMATIC_SHAPE/oxr/
/mods/DRAMATIC_SHAPE/oxr.zip
/mods/DRAMATIC_SHAPE/tests/
/mods/DRAMATIC_SHAPE/tools/
/mods/DRAMATIC_SHAPE/CHANGELOG.md
/mods/DRAMATIC_SHAPE/VOXEL_HOENN_PLAN.md
# Zallax's Emerald 3DS Voxels (ported by Ceedrack) ships the same way.
# generated/ is what bake/bake.py makes from the player's own ROM -- the
# cartridge's art, never committed or shipped (pack_love.sh prunes it too);
# tools/ is its screenshot and audit drivers, development material.
!/mods/EMERALD_3DS_VOXEL/
/mods/EMERALD_3DS_VOXEL/generated/
/mods/EMERALD_3DS_VOXEL/tools/

# The NUZLOCKE mod (Nuzlocke / Soul Link rules) ships with every release
# (scripts/bundled_mods.txt); its tests stay in the repo but out of packages.
!/mods/NUZLOCKE/
!/mods/NUZLOCKE/.modkitignore

# The offline translator helper (rom-translate / rom-translate.exe, ~65 MB),
# built by tools/translation/build_desktop.py. The release workflow builds it
# fresh; scripts/build.sh only copies it into packages when present.
/translation/

# Cloud-save app credentials (src/cloud/CloudClients.lua reads this). The
# Google client secret is not a password -- Google treats installed-app
# secrets as public -- but GitHub's secret scanning flags it, so it is kept out
# of the repository and injected into release builds instead.
/cloud_clients.lua
