Welcome! This guide will get you from zero to running the game in under 30 minutes.
- Godot 4.5.1 - Download here (standard, not .NET)
- Git - For cloning the repository
- Python 3.9+ - For tooling scripts (optional but recommended)
# Clone the repository
git clone https://github.com/PipFoweraker/pdoom1.git
cd pdoom1
# Open the project in Godot
# Option A: Command line
godot godot/project.godot
# Option B: Open Godot Editor, click "Import", navigate to godot/ folderPress F5 to run the game. That's it!
pip install -r requirements.txt
pip install -r requirements-dev.txtIf you have make available:
make run # Launch the game
make test # Run GUT unit tests
make lint # Check GDScript syntax
make validate # Validate data files
make health # Run project health check
make clean # Clean cache filesVS Code Extensions:
- godot-tools - GDScript support
Godot Editor Settings:
- External Editor: VS Code (Editor > Editor Settings > Text Editor > External)
pdoom1/
├── godot/ # Main game code
│ ├── scripts/ # GDScript files
│ │ ├── core/ # Game logic (game_state.gd, turn_manager.gd)
│ │ └── ui/ # UI controllers
│ ├── scenes/ # Godot scenes (.tscn)
│ ├── data/ # JSON data files (actions, events, upgrades)
│ ├── assets/ # Art, audio, fonts
│ └── tests/ # Unit and integration tests
├── scripts/ # Python tooling and CI scripts
├── docs/ # Documentation
└── .github/ # CI/CD workflows
| File | Purpose |
|---|---|
godot/scripts/core/game_state.gd |
Core game state and logic |
godot/scripts/core/turn_manager.gd |
Turn processing |
godot/autoload/event_service.gd |
Event system and historical data |
godot/data/actions.json |
Action definitions |
godot/data/events.json |
Event definitions |
Press ~ (tilde) in-game to toggle the debug overlay. It has tabs for:
- Game State: turn number, resources, doom value, staff, queued actions, events
- Errors: error log
- Performance: FPS, frame time, memory, draw calls
- Debug Controls: add resources, trigger specific events, reset game
This is invaluable for testing and reproducing bugs.
Tests use the GUT (Godot Unit Testing) framework.
godot --headless --path godot --quit# Using the Python test runner
python scripts/run_godot_tests.py --quick
# CI mode (exits with status code)
python scripts/run_godot_tests.py --quick --ci-mode- Open the GUT panel (bottom dock)
- Click "Run All"
We use a two-branch model:
main- Stable releases onlydevelop- Active development, all PRs target here
-
Fork the repository on GitHub
-
Create a feature branch from develop:
git checkout develop git pull origin develop git checkout -b feature/your-feature-name # or git checkout -b fix/issue-123-description -
Make your changes
- Follow existing code patterns
- Add tests for new functionality
- Update documentation if needed
-
Test your changes:
godot --headless --path godot --quit # Syntax check python scripts/run_godot_tests.py --quick # Run tests
-
Commit and push:
git add . git commit -m "feat: Add your feature description" git push origin feature/your-feature-name
-
Open a Pull Request targeting
develop(not main)
Game content is data-driven. Add new items by editing JSON files:
- New Action: Edit
godot/data/actions.json - New Event: Edit
godot/data/events.json - New Upgrade: Edit
godot/data/upgrades.json
See the existing entries for the expected format.
- Check existing issues
- Comment on the issue to claim it
- Create a fix branch:
git checkout -b fix/issue-123-description - Submit a PR referencing the issue
We use a structured QA checklist at QA_CHECKLIST.md. Look for issues labeled good first issue and qa-testing.
To contribute via testing:
- Claim a QA issue by commenting on it
- Work through the checklist items
- File separate bug reports for each bug found (using the QA Bug Report template)
- Comment on the QA issue with your results
- Open an issue first to discuss the feature
- Wait for approval before starting significant work
- Keep PRs focused - one feature per PR
Documentation improvements are always welcome! Look for:
- Typos and unclear wording
- Missing information
- Outdated instructions
Use the GitHub issue templates:
- Bug Report: for general bugs found while playing
- QA Bug Report: for bugs found during structured QA testing sessions
Include as much context as possible: game version, platform, steps to reproduce, debug overlay state, and screenshots.
You can also press \ (backslash) in-game to open the built-in bug reporter, which automatically captures game state.
Follow the Godot style guide:
- Use
snake_casefor variables and functions - Use
PascalCasefor classes - Add type hints where practical
- Keep functions focused and small
# Good
func calculate_doom_change(amount: int) -> int:
return clamp(amount, -10, 10)
# Avoid
func calc(a):
return a if a > -10 and a < 10 else (-10 if a < -10 else 10)Python scripts follow PEP 8 (enforced by ruff and black). Pre-commit hooks enforce formatting.
Follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation onlyrefactor:Code change that neither fixes a bug nor adds a featuretest:Adding or updating testschore:Maintenance tasks
- Questions: Open a Discussion
- Bugs: Open an Issue
- Feature Ideas: Open an Issue with the
enhancementlabel
Look for issues labeled good first issue. These are specifically scoped for newcomers.
Good first contributions:
- QA testing sections (see
qa-testinglabel) - Fix GDScript warnings (issue #506)
- Fix typos in documentation
- Add missing tooltips
- Improve error messages
Contributors are recognized in:
- The in-game credits
- The CONTRIBUTORS.md file
- Our Contributor Rewards Program - submit a photo of your cat!
Thank you for contributing to P(Doom)!