Upload a Godot HTML5 Game to Itch.io with GitHub Actions
simondalvai.com
simondalvai.com
godot --export-release HTML5 web/index.html
butler push web <itch_account>/<project_name>:<channel>
Used those with GitLab CI for ages:)Parent action: https://github.com/North-Street-Games/nutshells/blob/main/.g... (attach this as a main.yml file in your GitHub actions workflow folder, and change the in-file variables and your secret itch.io butler key as needed!)
Child Godot export action: (for ref) https://github.com/Kwpa/godot-html-export/tree/main
Child itch upload action: (for ref - no different to original) https://github.com/Kwpa/itchio-butler-upload
Note that 4.x Web builds currently do not run well on MacOS browser apps :/ See this: https://github.com/godotengine/godot/issues/70691
- name: Godot HTML5 export
uses: dulvui/godot-html-export@v0.0.2
with:
godot-version: 4.1
Probably I also need to improve the documentation.But then again it was my first ever GitHub action :D
I'd be interested to know what works for you, especially making sure the caching works optionally as that is out of my perview
Unity is great. Unity is also horrible, especially on devx. It takes anywhere from 10-30 seconds to recompile code or changes on each save. Making a unity html game takes 5-30 minutes. There are things that can be done to reduce these times but requires knowing a bunch of info (usage of asset database, dividing code into assemblies, etc). Writing a container image to run Unity CLI commands requires you deal with license. Ugghh I wish Unity was just better to use.
I may scope out godot again. I’m working on a multiplayer game and it’d be interesting to evaluate how I’d plug a godot game into AWS gamelift.
In what format the artist sends the assets that get into the game?
Is there any trick you had to do to make the graphics look this sharp? Does adapting to different viewport size required a lot of work?
I am impressed on how sharp the PNG looks though! I thought filtering in WebGL was like nearest neighbor and bilinear and that's it, perhaps there is additional things that can be accomplished with shaders that you are using.
I wouldn't lay this issue at Godots feet.
The difference between 2D and 3D in terms of performance demand is not significant.
We are running some serious shaders to render the terrain. They are pure SDFs that are absolutely massive mathematical functions that run on both the cpu and GPU. These shaders run better on android phones than on iOS phones, largely because apple does not iterate on webgl, because it undermines their app store to do so.
The menu is poorly optimized in terms of draw calls. The poor performance is largely our fault and apples fault. Godot could offer some tooling to make optimizing draw calls easier, but the way we built the menu is just not optimal for the GPU.
The biggest endorsement of Godot is the smallness of the download for our game. ~20mb iirc. It's not the smallest download in the world, but it's way smaller than a unity web game.
The hardest part in the beginning is to not get dropped in the water :P
Heres a blog post about it from a while back: https://blog.winterpixel.com/the-tech-stack-behind-a-wasm-an...
We also deploy the client to steam for windows, mac and linux, the mac app store, google play, the ios app store, and we have custom web clients for some international portals.
It's definetly a lot.
Another problem is that SharedArrayBuffer was disabled by default after Spectre and in order to enable it you need to send certain headers from the server (Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy). I don't know if itch.io has support for that, but maybe.
I haven't used Godot but I'm thinking that the multithreaded models game engines are using don't convert very well to SharedArrayBuffers. It's a very crippled form if you're used to say C#.
https://itch.io/t/2025776/experimental-sharedarraybuffer-sup...
If your game accesses resources on other domains then those requests will fail by default.Note that we are running a multithreaded Godot 3 game on the web. It only uses threads when sharedarraybuffer is available, otherwise uses single threaded mode. Mostly just affects the latency of audio.