The minimal demos are still surprisingly big though (same ballpark as Unity web builds for similar simple demos).
For a language without runtime I would expect a couple hundred kilobytes at most for those simple demos (but the download is 6.4 MB compressed and decompresses to 43 MByte, and takes significant time after the download is finished to start). Would be interesting to figure out why dead code doesn't seem to be removed by the compiler (e.g. is it because of the engine design, or because the Pascal-to-WASM compiler doesn't support dead code elimination). Also why is the compressed to uncompressed ratio so big, there seems to be a lot of duplicate code or data in those WASM files.
Using RTL doesn’t necessarily result in large binaries. In my (non-WASM) experience, they’re more in line with the “hundreds of kilobytes” flohofwoe suggests.
Pascal can definitely produce small binaries (and it looks like it does dead code elimination, under the name “smartlinking” [0]), so it may be a limitation of the WASM backend like you said or not enabled for some reason.
The wasm file here could be optimized more. It looks like a 43 MB wasm is downloaded, and wasm-opt -O3 shrinks that to just 14 MB. It might also be faster that way (due to inlining and other optimizations). Startup will definitely be faster.
WASD are the normal commands for movement in games.
Pressing forwards to shoot feels wrong though.
This feels like it would be better with double keybinds. Arrows + Space for non-gamers, WASD + space for gamers.
Don't just change it to arrows though, that's going to be painful for laptop users who don't have those crappy half sized arrow keys (see macbook, framework, etc...).
> WASD are the normal commands for movement in games
Maybe for first-person shooters, but not for shmups, and definitely not for classic arcade style games.
To your second point the reason it feels unnatural is because mapping movement + actions to a single hand is usually not a good idea if you have the opportunity to distribute them.
I wonder, hand't any left-handed nerd tried to make a left-handed keyboard? I'd definitely try that, if for some magical reason my handedness was changed.
I searched and found some left-handed keyboards, but they are missing important things. Like they use qwerty-layout instead of ][poiu. The worse, they keep Enter on the right side and CAPS on the left. So you cannot remap Control key onto CAPS and use it with your pinky without twisting your right hand uncomfortably, when your left hand is on the mouse.
If you press Ctrl+Alt+Delete, it thinks you're still holding Ctrl+Alt afterwards, even if you're not. The same for Alt+Tab. The web exposes whether modifiers are pressed in the keydown event, but the game engine is trying to keep track of this information separately for some reason. (I'm not sure whether this is a Castle Game Engine, pas2js, or fpc library bug.)
It's kind of crazy to see this project posted here on hackernews just now. I've been trying to compile an open source Delphi 7 project and have been having issues sourcing a dependency called OpenGLLib. Through my searches I actually bumped into the Castle Game Engine a bunch! Unfortunately it looks like the usage of opengl doesn't exactly line up.
Protip: in the "2d invaders game" - press a movement key ("w" or "d"), hold it and then press fire ("w"), holding it too. After the initial shot the key repetition will start and you'll spam a series of bullets across the screen.
This is how I won on hard mode and it still took me a couple of attempts.
We evaluated Cocos about 2 years ago and frankly when comparing it to Unity on one side and small and specialized web engines like PixiJS, Three.js, PlayCanvas or Babylon.js on the other side, it's just not all that great, starting from tooling and ending with the engine architecture.
How new is this engine? It was renamed to "Castle Game Engine" (from "Kambi VRML Game Engine") in 2011. Version 1.0.0 was released in 2007. Not sure if there were even older releases?
https://github.com/castle-engine/castle-engine
The minimal demos are still surprisingly big though (same ballpark as Unity web builds for similar simple demos).
For a language without runtime I would expect a couple hundred kilobytes at most for those simple demos (but the download is 6.4 MB compressed and decompresses to 43 MByte, and takes significant time after the download is finished to start). Would be interesting to figure out why dead code doesn't seem to be removed by the compiler (e.g. is it because of the engine design, or because the Pascal-to-WASM compiler doesn't support dead code elimination). Also why is the compressed to uncompressed ratio so big, there seems to be a lot of duplicate code or data in those WASM files.