mirror of
https://github.com/hanzo-templates/godot-arcade.git
synced 2026-10-30 20:52:56 +00:00
Orb Runner: a complete 3D arcade game in ~150 lines of GDScript, world built in
code so there are no binary scenes to merge-conflict on. Ships the non-threaded
export (runs everywhere incl. iOS Safari); flip thread_support in
export_presets.cfg for the threaded build, which hanzo.app already serves the
COOP/COEP for when the project declares framework=godot.
The export basename is fingerprinted (orb-<sha8>.html) because every sibling
asset inherits it — that is what makes index.js/.wasm/.pck cacheable forever
instead of stale-forever.
Why this exists: static-SPA builders cannot ship a game. Proving hanzo.app can
meant finding what actually stopped it, and three things did:
1. POST /v1/projects/:slug/deploy carries the entire build in ONE request body and
the public edge caps a body at 4 MiB (measured: 4194304 accepted, 4198400 gets
the opaque fasthttp "Error when parsing request"). Godot emits a 43 MB engine
wasm; Unity 22 MB + 5.7 MB of data. The artifact lane cannot express a game at
all, so these ship through the release lane instead: stage to the object store,
then POST /v1/sites/:slug/publish promotes it server-side with no body.
2. Engine loaders emit NON-fingerprinted filenames (index.js, <name>.loader.js), and
clients/sites.CacheControlFor only marks a content-hashed name immutable. A
redeploy therefore leaves the CDN and the browser running the OLD loader against
the NEW wasm. That is not a visible error: emscripten just prints "still waiting
on run dependencies" forever and the canvas stays 300x150. Cost hours to find.
Every template here fingerprints its own asset names so the case cannot recur.
3. A cross-origin-isolated document (COEP: require-corp) BLOCKS a plain cross-origin
script, so the shared a.hanzo.ai runtime needs crossorigin="anonymous" on exactly
the pages that opt into isolation — game pages.
Co-authored-by: Hanzo Dev <[email protected]>
22 lines
1.0 KiB
Plaintext
22 lines
1.0 KiB
Plaintext
MIT License
|
|
|
|
Copyright (c) 2026 Hanzo AI
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.
|