-
Notifications
You must be signed in to change notification settings - Fork 313
Building the Game
This Core Thread is the technical reference hub for everyone working on the Threadbare codebase — whether you're a contributor fixing a bug, a learner building a StoryQuest level, or a developer extending the game's systems.
Threadbare is built with Godot Engine and hosted on GitHub. The source code is open under the Mozilla Public License 2.0.
Threadbare uses Git Large File Storage (LFS) to store large assets such as music and artwork. You must install and configure Git LFS before cloning the repository.
- Install Git LFS
- Run
git lfs install - Clone the Threadbare repository
Download and install Godot Engine, then open the project from your local clone.
- To play development builds, see the Releases page
- To record a gameplay session for testing, see Record a playthrough
Before contributing, read these essential documents:
- Contributing — Code style, language conventions, GDScript guidelines, Godot conventions, and pull request format
- Licensing — All assets and code must be under compatible open licenses. Read this first.
- Content Guidelines — What content is appropriate for Threadbare (age 13+)
- GDScript source code follows the GDScript style guide
- Style is enforced via
gdlintandgdformatfrom godot-gdscript-toolkit on every PR - Use pre-commit to run these checks locally before submitting
Key conventions used in the Threadbare project (full details in Contributing):
-
Use Unique Names to reference nodes in scripts (e.g.
%HitBox) -
Scene file +
components/subfolder structure — keep the.tscnfile alone in its folder with all related scripts in acomponents/subfolder
Consider the Input Handling when developing a mechanic, or even when designing a level. For instance, all aiming should be possible at 45 degrees to work with keyboard-only input, so the targets should be placed accordingly. When playtesting, the player should be able to complete a level using keyboard input only.
Threadbare levels are built from stacked TileMapLayer nodes. Each layer holds a different type of terrain or decoration.
➡️ TileMapLayers and TileSets — Available TileSets, water/bridge construction, foam, cliff shadows, and the Void tileset
Available TileSets:
| File | Purpose |
|---|---|
bridges.tres |
Bridges and bridge shadows |
decoration.tres |
Decorations on top of cliffs |
elevation_2.tres |
Cliffs (current standard) |
exterior_floors.tres |
Grass, dirt, sand |
foam_2.tres |
Foam where land meets water |
shadows.tres |
Cliff shadows |
void_chromakey.tres |
The Void starfield backdrop |
water.tres |
Water tiles |
➡️ Time and Weather — How to apply time-of-day and weather effects to scenes; why quest levels use fixed conditions
➡️ Visual Style Guide — Full reference for art direction, pixel art conventions, character anatomy, colour palette, cel shading, perspective, and animation
Key specs:
- PNG format for all images
- 64×64 pixel tiles
- Characters drawn in 192×192 canvas with 2px outline
- 3-colour cel shading (fill, light, dark) — no dithering, no soft shading
- Animations at 10fps; draw right-facing only and flip for left
➡️ Audio Style Guide — File formats for sound effects (WAV) and music (OGG/MP3)
➡️ Narrative Style Guide — Dialogue conventions, ellipsis formatting, and character voice
Quick reference guides for working with Threadbare in the Godot editor:
- Record a playthrough — Capture a gameplay session for testing or feedback
- Disable 3D in the editor — Performance tip for working in the 2D Godot editor
- Change game speed in the editor — Speed up/slow down game time for testing
- How to make a StoryQuest where you only collect 1 or 2 threads — Focused guide for simpler quest structures
See Contributing for the full guide to PR titles, descriptions, commit format, and co-authorship.
In brief:
- Title: short, imperative mood, sentence case (e.g. "Ink combat: Add ink follow player feature")
- Description: explain the change, link to resolved issues with
Resolves https://github.com/endlessm/threadbare/issues/XYZ - PRs are squash-merged — the PR title and description become the commit message
➡️ Reviewing Contributions — The review process, playtesting checklist, style/legal/attribution checks, and merge strategy
➡️ Reviewing a StoryQuest submission — Detailed technical guide for reviewing learner StoryQuest PRs, including git commands for checking file scope, orphan resources, and large files
This section will expand as the codebase documentation grows.
-
scenes/game_elements/— Characters, props, NPCs, and shared game components -
scenes/game_logic/— Reusable scripts -
scenes/quests/story_quests/— StoryQuest directories (one per quest) -
assets/first_party/— First-party reusable assets -
assets/third_party/— Third-party assets -
tiles/— TileSet resources
➡️ Input Handling — Current input mapping for keyboard, mouse, joypad, and mobile (in development)
← Making a StoryQuest | Next: Community and Governance →