Inspiration

Friction in trying to be able to play online board games with friends. Sometimes its hard to find online implementations of board games, or they don't support real multiplayer, or its not free, or you have to make an account. I felt compelled to code them up myself at times, but perhaps something can be done to make things better for everyone.

What it does

The language and the site work together to allow users to program arbitrary games and create and join lobbies to play said games. The point in making a language rather than just letting users write normal javascript, is that you can't trust just any code. Arbitrary javascript code execution would allow malicious users to do most things they want with no resistance. Hence, we have created a language where the side effects are tightly controlled, only being able to draw to a canvas, register user clicks on the game window, note the player's nickname and lobby id, and communicate game actions to the server and other clients.

How we built it

Vanilla HTML,CSS,JS frontend, with a NodeJS backend.

Challenges we ran into

Designing a language is tough. As well, parallelizing the work to be done requires quite a bit of forethought and agreement of how things interoperate.

Accomplishments that I'm proud of

Coming up with a somewhat clever name for the project. Managing to get work done with some parallelism rather than micromanaging. Getting parts of the interpreter to work.

What I learned

Creating business requirements to communicate my vision of the project. Lessons in language design, and how nontrivial it is.

What's next for SiGaL

More flexibility in the language syntax-wise, more language features, additional quality of life improvements for those coding the games(that is, more functionality available in interaction between interpreter and game code), compilation to Web Assembly rather than having an interpreter running in JS. More scalable solution for the backend(NodeJS is single threaded). Well, if we were to hypothetically keep working on the project that is.

Share this project:

Updates