[HN Gopher] Show HN: Easel - Code multiplayer games like singlep...
___________________________________________________________________
Show HN: Easel - Code multiplayer games like singleplayer
For the past 3 years, I've been creating a new 2D game programming
language where the multiplayer is completely automatic. The idea is
that someone who doesn't even know what a "remote procedure call"
is can make a multiplayer game by just setting `maxHumanPlayers=5`
and it "just works". The trick is the whole game simulation,
including all the concurrent threads, can be executed
deterministically and snapshotted for rollback netcode. Normally
when coding multiplayer you have to worry about following "the
rules of multiplayer" like avoiding non-determinism, or not
modifying entities your client has no authority over, but all that
is just way too hard for someone who just wants to get straight
into making games. So my idea was that if we put multiplayer into
the fabric of the programming language, below all of your code, we
can make the entire language multiplayer-safe. In Easel the entire
world is hermetically sealed - there is nothing you can do to break
multiplayer, which means it suits someone who just wants to make
games and not learn all about networking. I've had people make
multiplayer games on their first day of coding with Easel because
you basically cannot go wrong. There were so many other
interesting things that went into this project. It's written in
Rust and compiled to WebAssembly because I think that the zero-
download nature of the web is a better way of getting many people
together into multiplayer games. The networking is done by relaying
peer-to-peer connections through Cloudflare Calls, which means
Cloudflare collates the messages and reduces the bandwidth
requirements for the clients so games can have more players. I
also took inspiration from my experience React when creating this
language, here's how you would make a ship change color from green
to red as it loses health: `with Health { ImageSprite(@ship.svg,
color=(Health / MaxHealth).BlendHue(#ff6600, #66ff00)) }` There is
a lot of hidden magic that makes the code snippet above work - it
creates a async coroutine that loops each time Health sends a
signal, and the ImageSprite has an implicit ID assigned by the
compiler so it knows which one to update each time around the loop.
All of this lets you work at a higher level of abstraction and, in
my opinion, make code that is easier to understand. Speaking of
async coroutines, my belief is that they don't get used enough in
other game engines because their lifetimes are not tied to anything
- you have this danger where they can outlive their entities and
crash your game. In Easel each async task lives and dies with its
entity, which is why we call them behaviors. Clear lifetime
semantics makes it safe to use async tasks everywhere in Easel,
which is why Easel games often consist of thousands of
concurrently-executing behaviors. In my opinion, this untangles
your code and makes it easier to understand. That's just the
beginning, there is even more to talk about, it has been a long
journey these past 3 years, but I will stop there for now! I hope
that, even for those people who don't care about the multiplayer
capabilities of Easel, they just find it an interesting proposal of
how a next-generation game programming language could work. The
Editor runs in your web browser and is free to play around with, so
I would love to see more people try out making some games! Click
the "Try it out" button to open the Sample Project and see if you
can change the code to achieve the suggested tasks listed in the
README.
Author : BSTRhino
Score : 8 points
Date : 2025-05-14 10:31 UTC (1 days ago)
(HTM) web link (easel.games)
(TXT) w3m dump (easel.games)
| traverseda wrote:
| If I created a game in this, what gurantee do I have that someone
| will be able to play this game in 100 years?
| actionfromafar wrote:
| I think a chess board is more what you are looking for. :)
|
| But seriously, it wouldn't hurt to have some kind of escrow
| service for products like this.
| traverseda wrote:
| No, like 90% of video games could in theory be played 100
| years from now.
|
| If you can't answer that question, why should I trust your
| for 3 years? Or 10?
|
| Here's a list of lost video games. Hard to prove it's
| complete of course.
| https://lostmediawiki.com/Category:Lost_video_games
| BSTRhino wrote:
| Yes, I think it is super important that Easel games last
| forever and that has always been the plan. My long term plan
| is to create a standalone version of Easel that you can run
| on your server forever, regardless of what happens to Easel
| itself.
|
| I'm not yet sure of the details of how an escrow service
| might work, but honestly, I would be willing to look into it,
| that could be a good answer. I really do plan on Easel as a
| platform lasting forever. This is my life's work as much as
| it is yours.
| actionfromafar wrote:
| This is all very impressive and combines ideas I tinkered with in
| C on and off for years, into a cohesive product. Very impressive.
| BSTRhino wrote:
| Oh thank you!
| cmdrk wrote:
| How does this compare to something like BYOND? I realize it's
| dated now but conceptually there are some similarities.
| BSTRhino wrote:
| I hadn't heard of BYOND until just then. Sadly its website
| seems to be down, I would like to learn more about it.
___________________________________________________________________
(page generated 2025-05-15 23:00 UTC)