Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
9245aad
[BUG] The keyboard key mappings for the menu controls are not display…
ikostan Feb 15, 2026
6f90be9
Enable Keyboard & D-Pad Navigation for Key Mapping Settings
ikostan Feb 16, 2026
d8cd133
suggestion: Simplify the device assignment to avoid complex casting e…
ikostan Feb 16, 2026
21bd93d
Update settings.gd
ikostan Feb 16, 2026
34d4754
Add Godot v4.5 web deployment guide
ikostan Feb 16, 2026
d1d10ad
focus_neighbor_left on LeftInputRemap points to the right column — sp…
ikostan Feb 16, 2026
5a6777f
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
7ebb81b
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
c4066d3
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
d265896
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
eb79411
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
16315d7
Update Platforms_for_Web_Deployment_Guide.md
ikostan Feb 16, 2026
b3613fb
Potential null access on nev if type is unrecognized, plus pipeline f…
ikostan Feb 16, 2026
895bf31
Update settings.gd
ikostan Feb 16, 2026
f328dfc
Update key_mapping.gd
ikostan Feb 16, 2026
81b5182
Focus Key Mapping button on return
ikostan Feb 16, 2026
2d5b084
Fixing layout shift issue
ikostan Feb 16, 2026
b6730e6
Update test_key_mapping_menu.gd
ikostan Feb 16, 2026
32f9215
Update test_input_remap_ec.gd
ikostan Feb 16, 2026
e1acf66
[BUG] Duplicate key bindings allowed without conflict warning #410
ikostan Feb 16, 2026
a15e79e
Update key_mapping.gd
ikostan Feb 16, 2026
c9afe45
Update input_remap_button.gd
ikostan Feb 16, 2026
b61d567
Unbind conflicts and honor explicit unbinds
ikostan Feb 16, 2026
9be2066
[FEATURE] Warn player on Start Game if critical controls are unbound …
ikostan Feb 16, 2026
a0581d3
[FEATURE] Graceful handling of unbound critical controls during gamep…
ikostan Feb 16, 2026
246d80d
Persist input device & improve unbound warnings
ikostan Feb 16, 2026
444de60
Update globals.gd
ikostan Feb 16, 2026
9e80773
Device-specific unbinds; robust input loading
ikostan Feb 16, 2026
014e188
Update main_menu.gd
ikostan Feb 16, 2026
7af79cd
Update settings.gd
ikostan Feb 16, 2026
27e832b
Update pause_menu.tscn
ikostan Feb 16, 2026
3ee55f7
Update main_scene.gd
ikostan Feb 16, 2026
ad24bbf
Update globals.gd
ikostan Feb 16, 2026
da3f71f
[BUG] Loading screen stuck at exactly 50% progress on Web export #415
ikostan Feb 16, 2026
ea32217
GDLinting issue fixes
ikostan Feb 16, 2026
9c2b8e0
Update key_mapping_menu.tscn
ikostan Feb 16, 2026
4332a51
Update test_combined_multi_manager_loads.gd
ikostan Feb 16, 2026
00b8eff
When no matching event exists for the current device (common in tests…
ikostan Feb 16, 2026
c0568e0
Update test_key_mapping_menu.gd
ikostan Feb 16, 2026
97997b4
Update test_key_mapping_menu_device_aware.gd
ikostan Feb 16, 2026
85a7152
Update settings.gd
ikostan Feb 17, 2026
e1deac8
Update settings.gd
ikostan Feb 17, 2026
0f9e5e5
Update settings.gd
ikostan Feb 17, 2026
1806d95
Update test_key_mapping_menu.gd
ikostan Feb 17, 2026
073c0d9
Update input_remap_button.gd
ikostan Feb 17, 2026
ec54afc
Update settings.gd
ikostan Feb 17, 2026
bb2db1e
Update settings.gd
ikostan Feb 17, 2026
82b8652
_ensure_defaults_saved() will never detect missing defaults — load_in…
ikostan Feb 17, 2026
d1cfd5a
Update test_settings.gd
ikostan Feb 17, 2026
fbc3f46
Update scripts/input_remap_button.gd
ikostan Feb 17, 2026
82070a0
Update settings.gd
ikostan Feb 17, 2026
ac93296
Update settings.gd
ikostan Feb 17, 2026
f3a6eb3
Fully unbound critical actions are currently missed.
ikostan Feb 17, 2026
e4a5b19
Respect explicit unbind in input defaults
ikostan Feb 17, 2026
3ef5e6c
Update settings.gd
ikostan Feb 17, 2026
e7f73c5
Settings._events_match() is a public helper
ikostan Feb 17, 2026
5128144
Update main_scene.gd
ikostan Feb 17, 2026
9d82b0d
Validate last_input_device before applying.
ikostan Feb 17, 2026
dbf688b
Add one-time legacy migration for unbound input states
ikostan Feb 17, 2026
fc38dc0
Update settings.gd
ikostan Feb 17, 2026
77f0b41
Update main_scene.gd
ikostan Feb 17, 2026
5924498
Update main_scene.gd
ikostan Feb 17, 2026
42edbed
Gamepad label assertion doesn't actually reject "Unbound".
ikostan Feb 17, 2026
00f23dd
Comment says "once per session" but warning repeats every ~4 seconds.
ikostan Feb 17, 2026
38562d1
Real config path deletion without guaranteed cleanup is fragile.
ikostan Feb 17, 2026
d05c717
Encapsulation violation: directly writing main._showing_unbound_warni…
ikostan Feb 17, 2026
aed6acd
Update key_mapping.gd
ikostan Feb 17, 2026
2bb377b
Test state leaks: remapped bindings persist across tests.
ikostan Feb 17, 2026
4ec3726
Update scripts/key_mapping.gd
ikostan Feb 18, 2026
6a1c32a
Use current config for defaults; remove remap update
ikostan Feb 18, 2026
e987379
suggestion (bug_risk): Re-use a single confirmation dialog instead of…
ikostan Feb 18, 2026
ba30dc7
Improve unbound dialog behavior and focus
ikostan Feb 18, 2026
e37f006
Update settings.gd
ikostan Feb 18, 2026
47fd8b8
Fixing duplicated call Settings.load_last_input_device()
ikostan Feb 18, 2026
9fccb91
Add this et_event_label static method to settings.gd
ikostan Feb 18, 2026
5276399
Update settings.gd
ikostan Feb 18, 2026
9ac278d
Update test_settings_ec.gd
ikostan Feb 18, 2026
d0e3e2a
Update test_get_pause_binding_label_for_device.gd
ikostan Feb 18, 2026
0eb8324
Update settings.gd
ikostan Feb 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,9 @@ You can play this game on [Itch.io](https://ikostan.itch.io/sky-lock-assault)
- [Release Drafter](https://github.com/release-drafter/release-drafter?tab=readme-ov-file#readme)
- [Close Stale Issues and PRs](https://github.com/actions/stale)
- [AllContributors GitHub App](https://allcontributors.org/docs/en/bot/installation)

9. [Free Web Browser Game Deployment Platforms](files/docs/Platforms_for_Web_Deployment_Guide.md)
<!-- markdownlint-enable line-length -->

## Roadmap

Here's a high-level plan for upcoming features. Contributions welcome!
Expand Down
140 changes: 140 additions & 0 deletions files/docs/Platforms_for_Web_Deployment_Guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Free Web Browser Game Deployment Platforms

## Summary of zero-cost publishing platforms for Godot v4.5 HTML5/WebGL games

## Project Context

We're building **SkyLockAssault** — a totally free-to-play browser
game in **Godot v4.5** on **Windows 10 64-bit**. This is our learning
journey into game dev, so we're keeping everything practical,
low-friction, and focused on **automatic deploys** via GitHub Actions
+ CI/CD where possible.

This `.md` file is your living playbook. Update it as you go (e.g. mark
new platforms as "Deployed: ✅ Yes").

**Target**: Automatic GitHub Actions deploys where possible.

---

## Why Web Platforms for a Free F2P Godot Game?

- **Zero cost to publish** (no Steam $100 fee)
- **Instant browser play** (Godot WebGL export = one ZIP)
- **High traffic** for casual games like SkyLockAssault
- **Ad revenue or donations** without forcing monetization
- **GitHub Actions** = push → auto-deploy (your dream workflow)

---

## Platform Comparison (Feb 2026)

<!-- markdownlint-disable line-length MD060 -->
| Platform | Free Publish | Official Automation | Playwright Feasible? | Traffic / Reach | Godot v4.5 Win10 Tip | Deployed | Priority for You |
|----------------------|--------------|--------------------------|----------------------|---------------------|------------------------------------------|----------|------------------------|
| **itch.io** | Yes | ✅ butler CLI | Not needed | Indie + discovery | Native Godot + godot-ci Actions | ✅ Yes | ★★★★★ (Start here) |
| **Poki** | Yes | ✅ poki-cli | Not needed | Massive casual | Official Godot plugin + CLI in Actions | ❌ No | ★★★★★ (High traffic) |
| **Viverse** | Yes | ✅ VIVERSE CLI | Not needed | 3D/WebXR focus | Godot WebGL + npm CLI (2026 update) | ❌ No | ★★★★ (Future-proof) |
| **Game Jolt** | Yes | ✅ CLI | Not needed | Indie community | Simple ZIP upload script | ❌ No | ★★★★ |
| **iDev.games** | Yes | ❌ No | ✅ Very easy | Instant publish | Simplest form → Playwright target | ❌ No | ★★★★ (Bonus) |
| **GameMonetize** | Yes | ❌ No | ✅ Easy | Ad network | ZIP drop in dashboard | ❌ No | ★★★★ (Revenue) |
| **CrazyGames** | Yes | ❌ No | ✅ Possible | Huge casual | CAPTCHA risk → manual safer | ❌ No | ★★★ (Risky) |
| **Y8.com** | Yes | ❌ No | ✅ Possible | Classic portal | Basic form | ❌ No | ★★★ |
| **GameDistribution** | Yes | ❌ No | ✅ Possible | B2B distribution | SDK mandatory first | ❌ No | ★★★ |
| **GamePix** | Yes | ❌ No | ✅ Possible | Global partners | Dashboard ZIP | ❌ No | ★★★ |
| **Newgrounds** | Yes | ❌ No | ✅ Partial | Community | Manual + API for scores only | ❌ No | ★★ |
| **SoftGames** | Yes | ❌ No | ✅ Possible | Messenger games | Submit form | ❌ No | ★★ (Low priority) |
<!-- markdownlint-enable line-length MD060 -->

---

## Why Most Platforms Refuse Official Automation (Deep Dive)

All "❌ No" platforms require **manual moderation** to fight spam/low-quality
uploads. Here's the exact reason from their docs/portals (Feb 2026):

<!-- markdownlint-disable line-length -->
| Platform | Reason for No Publish API/CLI |
|----------------------|--------------------------------------------------------------------------------------------------------------|
| **iDev.games** | API only for in-game data (Game DB / shop). Upload is manual for "instant publish + later verification". |
| **CrazyGames** | Portal is ZIP + form + manual review. SDK only for ads. UI changes often → bots break. |
| **Y8.com** | Simple upload form → human approval step for quality. |
| **GameMonetize** | You integrate SDK, then manual ZIP in admin dashboard. They handle distribution. |
| **GameDistribution** | SDK mandatory for stats/ads → portal upload only. |
| **Newgrounds** | Project system is manual. In-game API (medals/scores) exists, but upload API is a long-open feature request. |
| **GamePix** | Dashboard submit after SDK. No automation. |
| **SoftGames** | Pure submit form + manual review. |
<!-- markdownlint-enable line-length -->

**Core reason across all**: Manual moderation prevents spam and low-quality content.

**Bottom line:** Moderation = quality control. Playwright can fake the clicks,
but it's maintenance work.

---

## Automation Strategy

- 100% Auto: itch.io, Poki, Viverse, Game Jolt
- Playwright Auto: iDev.games, GameMonetize (easiest)
- Manual + Occasional: CrazyGames, Y8, GameDistribution, GamePix, Newgrounds,
SoftGames

---

## Recommended Workflow for SkyLockAssault (Your Learning Path)

### Phase 1: 100% Automatic (Do This First)

1. **itch.io** — Set up butler + GitHub Actions (you already did this ✅)
2. **Poki** — Add poki-cli (high traffic + official Godot support)
3. **Viverse** — Add VIVERSE CLI (modern 3D/WebXR bonus)

### Phase 2: Semi-Auto Bonus (Playwright)

- **iDev.games** + **GameMonetize** (easiest forms)
- Update every 2–4 weeks via one shared script

### Phase 3: Manual Once + Occasional Updates

- CrazyGames, Y8, GameDistribution, GamePix, Newgrounds, SoftGames, Game Jolt

**Goal:** Push to `main` → 10+ platforms updated automatically.

---

## Godot v4.5 Export Tips (Win10)

```bash
# In your project root (run from PowerShell or Git Bash)
godot --export "Web" "build/sky-lock-assault"
cd build/sky-lock-assault
Compress-Archive -Path * -DestinationPath ../skylockassault.zip
```

Always include `index.html` at ZIP root.

---

## Automation Setup Quick Starts

### itch.io (Already Done)

Use `butler` + godot-ci GitHub Action.

### Poki (Next)

<!-- markdownlint-disable line-length -->
```yaml
# .github/workflows/poki.yml
- uses: actions/setup-node@v4
- run: npx @poki/cli upload --game-id YOUR_ID --token ${{ secrets.POKI_TOKEN }} build.zip
```
<!-- markdownlint-enable line-length -->

### Viverse (2026 CLI)

```bash
npm install -g @viverse/cli
viverse-cli publish --app-id YOUR_APP --file skylockassault.zip
```
Loading
Loading