Combat airplane web game with fuel management, multiple weapons, multi-level, and adjustable difficulty.
This is a dedicated Godot v4.5 game dev project on Windows 10 64-bit OS. We'll be learning game dev here, starting with a simple main menu and expanding to core mechanics like player controls, enemy AI, and assaults in the sky. The repo is open-source at SkyLockAssault.
You can play this game on Itch.io
- Godot Version: 4.5 stable (or compatible).
- OS:
Windows 10 64-bit. - Tools:
Docker Desktop v4.45for local testingGitHub Desktop v3.5for repo managementPyCharm 2024.1.7 (Community Edition)for file editingWindows PowerShellfor running Docker commands
- Supported Browsers: Chrome 90+, Firefox 88+, Edge 90+ (WebGL 2.0 required)
- Known Limitations: Mobile touch controls are experimental; fullscreen may not persist on iOS Safari
- Goal: Build a playable top-down shooter with web deployment in mind—export to HTML5/Web, test locally, deploy to itch.io.
- Empire State Font
- Pixel Planes Assets Pack
- Assets Free Laser Bullets Pack 2020
- Csaba Felvegi aka "chabull" free assets collection, see here
- Pixabay: royalty free stock
- Music:
- Guide to Implementing Versioning
- Godot v4.5 Docs
- Development Guide
- Local CI Pipeline for Godot Project using Docker
- Docker Local Test Server
- Setup Instructions
- Signing Setup for GitHub Desktop
- BOTS:
- Free Web Browser Game Deployment Platforms
Here's a high-level plan for upcoming features. Contributions welcome!
- v0.2: Completed Foundations - Project import, Docker local testing, basic input actions, top-down movement, main menu, quit handling for browser, HTML5 export and testing, GitHub Actions CI/CD to Itch.io (complete).
- v0.3: Expansion - Add levels, weapons, player feedback integration.
- v0.4: Post-MVP Refinements - Performance optimization, audio polish, bug fixes.
- v0.5: Ongoing Development - Feedback gathering, minor updates, release tagging.
- Future: Multiplayer elements, AI enemies, mobile export (post-launch based on community input).
Pull requests welcome for mechanics like enemy AI, levels, or web optimizations! Fork the repo and submit your ideas. See CONTRIBUTING for guidelines (create if needed).
We value your input to improve Sky Lock Assault! Share your thoughts via:
- Itch.io Comments – Discuss gameplay, bugs, or suggestions directly on the game's page.
For details on reporting vulnerabilities and our disclosure process, see SECURITY.md.
This project is licensed under the GNU General Public License v3.0 or later (GPL-3.0-or-later) - see the LICENSE file for details.
Commercial use is allowed under GPLv3 terms, which require that any distributed derivatives or combined works remain open source and provide source code to users. For closed-source commercial alternatives without these GPL requirements, a separate license is available upon request.
- Open Source: You can view, modify, and distribute the code freely, as long as derivatives remain under GPLv3.
- Commercial Use: Allowed under GPLv3 (with source code obligations for distributions). Closed-source commercial use requires a separate license.
- Contact: For custom licenses, trademark use (e.g., "Sky Lock Assault"), or inquiries, reach out via GitHub issues or X @EgorKostan.
- Separation of gameplay logic and UI state
- Centralized stat tracking (fuel/speed dictionaries)
- Speed-based gameplay scaling
- Modular audio system with buses
- CI/CD-driven deployment workflow
- Test-driven improvements with GUT
Milestone: Milestone 11 – UI & Input Improvements (Completed)
Status: Stable gameplay loop with synced UI systems and GUT-based unit testing.
Active Focus: Gameplay expansion (AI enemies, multiplayer, levels).
- Main menu scene with buttons (Start, Resume, Options, Quit).
- Placeholder game level for future mechanics and game testing.
- Options menu with log level settings, accessible from main and pause menus.
- Pause menu with buttons (Main Menu, Options, Resume).
- Player scene with CharacterBody2D, ShaderBody, CollisionShape, and FuelTimer.
- Fade-in animations for main menu UI panels.
- Fuel system including fuel level progress bar with dynamic color gradients (green to yellow to red/dark red) and low-fuel blinking warnings.
- Basic weapon system.
- Difficulty settings.
- Game controls input remapping.
- Fuel management (timer-based depletion scaled by speed, base drain, and difficulty; refuel not yet implemented).
- Basic adjustable difficulty (affects fire rate, fuel depletion, and more).
- Basic sound effects & background music.
- Airplane Rotor Sound (Stereo SFX) + Rotor Animation, with reusable helpers and rotors stopping on zero fuel.
- Audio Buses & Panning (L/R Split).
- Options Menu: Rotors Volume Slider.
- Multi-Thread support enabled.
- Player movement refactor: Lateral-only motion with acceleration-based forward/back speed control, clamped between min/max speeds.
- Speed system with progress bar, dynamic color changes (green normal, yellow caution, red/dark red danger based on thresholds), and low/over-speed blinking warnings.
- Centralized fuel/speed tracking via dictionaries for gameplay and UI integration.
- Fully synchronized Input Remapping system:
- UI reflects saved bindings
- Conflict-safe remapping logic
- Persistent across sessions
- Improved Options Menu behavior:
- Shared between Main Menu and Pause Menu
- Live updates to audio and gameplay settings
- UI state consistency across scene transitions
- Completed (Merged via Recent PRs):
- Fuel management with timer-based depletion scaled by speed/difficulty (PR #288).
- Player movement refactor: Lateral-only controls with acceleration/deceleration, min/max speed clamping (PR #288).
- Speed system with progress bar, dynamic color gradients (green normal, yellow caution, red/dark red danger), and low/over-speed blinking warnings (PR #275 and #288).
- Rotor SFX/animation with volume sliders and zero-fuel stopping (prior PRs).
- Refactor player movement integrations (e.g., speed-based fuel drain, UI sync) – Issue #169.
- Add procedural random parallax background for speed-based scrolling – Issue #273.
- Switch testing from GDUnit4 to GUT for better coverage – Issues #282, #283.
- GitHub Wiki for documentation/learning resources – Issue #284.
- Version tagging in CI/CD – Issue #285.
- Dynamic speed bar color changes (partially merged in PR #275/#288, but full threshold logic ongoing) – Issue #286.
- Improve input mappings with conflict handling and unbound warnings:
- Conflict detection + confirmation dialog when assigning already-used inputs.
- Per-device tracking, last-used device persistence, and device-aware remap prompts.
- HUD warnings for unbound critical controls during gameplay.
- Support opening key-mapping menu directly from other menus.
- Expanded tests for input remap and settings behaviors.
- Ensure menu navigation bindings & legacy input migration:
- Guaranteed binding of core navigation actions (ui_accept, ui_up, etc.).
- Initial focus management for gameplay/options menus and restored focus flows.
- Improved keyboard/gamepad input label generation and legacy config migration.
- Updated default gamepad throttle mappings to match expectations.
- Expanded test coverage around menu navigation and input handling.
- Enable keyboard & d-pad navigation for audio settings and key mappings:
- Full keyboard + gamepad navigation support for audio settings.
- Focus highlighting on volume rows and unified accept action for slider/toggle.
- Better modifier key handling (Ctrl/Shift/Alt/Meta) in remapping UI.
- Refined conflict handling in key remapping logic and focus restoration from audio → main menu.
- CI/tooling version bumps and asset import config additions.
Milestone 12 focused on making the game more navigable and responsive to user input devices:
- Conflict detection dialog when assigning existing bindings
- Per-device last input selection persists between sessions
- Critical control warnings if actions are unbound
- Remap menu accessible from all relevant UI paths
- Keyboard + gamepad (D-Pad) support for all menu flows
- Guaranteed core navigation actions remain bound
- Focus restoration when leaving submenus (Audio → Options → Main)
- Modifier key respect (Ctrl/Shift/Alt/Meta) in remapping UI
- Use keyboard/gamepad accept action for sliders and toggles
- Focus highlighting for better visual feedback
- Unified UI interactions without relying on the mouse
- Replaced hard-coded globals with a
GameSettingsResource - Easier inspector-based editing and persistence
- Safer loading with fallback on corrupted configs
- Some complex menu flows may still rely on the mouse until additional focus neighbors are defined.
- Modifier-aware remapping requires explicit key+modifier press for unique bindings.
Track progress via Milestones.
- Harmless console warning on desktop fullscreen (NotSupportedError for orientation lock—ignored as non-fatal; doesn't affect gameplay).
- Placeholder level lacks mechanics—work in progress:
- Core gameplay loop functional (movement, fuel, speed, audio)
- Enemy AI and combat progression are upcoming.
- Report new issues on GitHub.
- GitHub Actions CI/CD pipeline
- Automated HTML5 build & Itch.io deployment
- Codecov integration
- Snyk security scanning
- Docker-based local web testing
- Release Drafter for automated changelogs
Sky Lock Assault uses GUT (Godot Unit Test) framework for automated testing.
- Unit tests cover:
- Input remapping logic
- Fuel system behavior
- Speed system thresholds & UI sync
- Player movement constraints
- Tests run locally and in CI via GitHub Actions.
- Coverage is tracked with Codecov.
Run tests locally:
- Open Godot
- Use GUT Test Runner
- Or run via CI pipeline
Testing is a core part of development and required for gameplay logic changes.
- In Godot Editor: Open the project > Press F5 to run the main scene
(
main_menu.tscn). Use keyboard/mouse for navigation. - Local Web Testing: After exporting to HTML5 (see Setup),
cd to
infra/inPowerShell>docker compose up -d> Open http://localhost:9090 in browser. Click "Run game" iframe; use fullscreen for immersion (ignore desktop console warnings). - Online on itch.io:
- Visit ikostan.itch.io/sky-lock-assault
- Click "Run game".
- The game supports browser play; mobile-friendly with landscape orientation.
For learning: Test quit handling (platform-specific) and log levels in options menu during play.
- Fork the repo and create a branch for your changes.
- Follow GDScript best practices; test in editor and web export.
- Open a Pull Request with details.
- See CONTRIBUTING.md for full guidelines.
- Join the Discussions: Chat about ideas, ask questions on web exports, or suggest features at GitHub Discussions.
We use the following labels to organize contributions:
good first issue— beginner friendlydocumentation— improvements to docsfeature— gameplay or UI work
Please create a branch per issue and reference the issue number in your PR title.
