Skip to content(if available)orjump to list(if available)

Castle Game Engine: Web target – big progress, first 3 demos to try

flohofwoe

Interesting that it is written in Pascal:

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.

wffurr

Object Pascal has a substantial runtime library called RTL: https://en.m.wikipedia.org/wiki/Free_Pascal_Runtime_Library

Also per azakai in another thread, wasm-opt shrinks this binary to 14 MB. Still a lot.

pjmlp

Similar to this unofficial C runtime called POSIX, that most C applications rely on.

actuallyalys

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.

actuallyalys

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.

[0]: https://www.freepascal.org/docs-html/user/userse13.html

azakai

Very cool!

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.

andsoitis

Author articulates why he programs in Pascal: https://castle-engine.io/why_pascal

tomovo

Nice 90s vibe. Web target is cool. The invaders demo though... I have to say AD+W is not a good set of key bindings for that game.

spartanatreyu

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...).

vunderba

> 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.

justmedep

It’s also the default in Factorio

lazycog512

WASD is more of a mouse+keyboard thing since in a standard desk layout you can't extend your arms nicely

ZXCV(ASDF)+arrows I would say is more standard for non-mouse games with keyboard bindings, cave story and touhou both go this route.

technion

It's always been interesting as a left handed person using mouse on the left side then pushing the keyboard over to use wasd.

OccamsMirror

Even the language is a 90s vibe.

wizzwizz4

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.)

nicholasmoser

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.

thih9

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.

jbverschoor

Never understood why cocos doesn't get more love.

flohofwoe

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.

orkasi

What did you end up using for the web?

flohofwoe

PixiJS

999900000999

Love it, I'd prefer a more popular language, but this is really cool.

Docs aren't great yet, but that's probably not a priority yet.

mathgladiator

Cool. I love to see progress for any new engine.

2mlWQbCK

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://castle-engine.io/old_news.php?id=2011-8-22-engine_re...

https://sourceforge.net/projects/vrmlengine/files/kambi_vrml...

mathgladiator

Well, it's new to me.