Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Real-time multiplayer games with cubes. Early feedback on dev docs? (particubes.com)
149 points by aduermael 59 days ago | hide | past | favorite | 46 comments

When I was a teenager(?) at Facepunch Forums, I wrote Half-Life 2: Sandbox as a free and open source competitor to the by-then commercial version of Garry’s Mod.

It drove me nuts that GMod multiplayer games were declining rapidly in quality over the years and I wanted my own platform that had faster load times, better out of the box game mode experiences and so on. And I actually did it.

Due to some licensing agreement change issues with Valve, I ended up not taking it to the storefront.

But prior to that, I didn’t spend enough time marketing the mod anyway. Those who knew about it seemed to pass along some encouraging words, which was nice.

These days I work on Planimeter’s Grid Engine instead, and I have the freedom to do new things with it. But of course, new is always hard.

Anyway all that to say this reminds me of Minecraft, which is obviously a fun game. And if this has Lua and some proper bindings, it’s gonna be a blast. I’m sure it already is.

But it’s hell on earth trying to get people to play a game that is a spiritual derivative—of another well-established game.

Have fun developing this. But do it for you. Like I did Half-Life 2: Sandbox for me. All these years later, my mod still runs better than even the latest version of GMod. It does that because I put more care into it.

But since the Source SDK 2013 base is frozen in time, and there’s no usable Source 2 SDK, no one plays it. But that’s OK. I had fun.

In a similar manner, I sort of wish there would have been someone from the gaming generation before me, maybe a Quakeworld player, who would have passed on the same insight.

Projects this large will take years of your life in development time. You only get to work on some many of them. Ask yourself if you want to see yourself working on this in 5-10 years, or a similar title.

Great comment! Thank you! :)

We love each day we spend working on this, so yes we definitely see ourselves working on it in 5 - 10 years. ^^

You're right about about the fact it may be hard to sell spiritual derivative at the beginning.

We realized many Minecraft players only play for a few weeks when there's a major update (~once a year). Mainly because of the lack of renewed content and the lack of very diverse experiences. This is where Roblox excels.

We want Particubes to become an alternative for them, when they're done playing Minecraft and still want to play in a familiar environment where they can interact with everything.

We're still big Minecraft fans ourselves (as players and server admins). Particubes is a way to fix some of our own frustrations with it, but will end up being a very different product.

Also, sorry to read about the licensing agreement issues with Valve. :( We thought about building a good scripting environment for Minecraft instead of building our own engine, but depending on it felt risky, and since we're in for the long run...

I should reiterate that development time cognizance; I mean really think about it. If you're a teenager working on this project, will you still be OK working on it when you're in college? If you're in your college years, will you still be OK working on it when you're in your early marriage and trying to buy a home or start a family?

No one really articulates that level of project planning in this space, so let me be the person to mention it.

You could be working on updating the user interface while you're asking yourself if you need to really be focusing on this, or finding a new job so that you can afford that engagement ring, or asking yourself what features or bug fixes you need to prioritize in the middle of having your car fixed.

You might end up postponing voice chat until the next major release because you can't get a week of time to yourself because Valentine's Day is coming up and you haven't planned how dinner and a movie is going to work with COVID-19 changing what is possible.

You know, stuff like that. Because you're definitely going to have full-time affairs while working on this stuff.

And don't just focus on the product. So many great developers who have the skill to work on these projects focus 100% of their time on the actual product, which is of course, critical. If you don't have something good, no one will play it.

Keep in mind that at some point in time, you'll need a strategy to move from 100% development and documentation to a near minimum 60/40 of product development and marketing.

Far in advance, figure out what your penetration strategy is. For example, what forums you need to establish a presence on, what fledgling YouTubers you need to create relationships with, how you incentivize kids to share the game with their friends and what devices they're using. The latter most being perhaps the most difficult space to understand, since I constantly hear no one uses a desktop or laptop anymore.

You need to have spreadsheets of this stuff and measure how you're making progress in creating a headspace for your product in people's minds based on their routines of where they go to hang out and what content they consume.

Best of luck! You have a great piece of software here, just keep it up. If you want to play it, there's bound to be others who want to, too.

Wonderful comment, thank you.

Looks very similar to Minetest (https://www.minetest.net/) (Edit: but this is nonfree and hasn’t yet been ported to GNU/Linux, while Minetest has and also works on 3 BSDs). Although Minetest does not include built in tools for asset creation — most models, textures, and scripts seem to be made in Blender, GIMP, and standard text editors — there is a mod to convert in-game builds into models (edit: including textures in the future: https://content.minetest.net/packages/random_geek/meshport/ / https://github.com/random-geek/meshport) and mesecons’s (https://mesecons.net/) Luacontroller block allows you to type and run Lua in-game without restarting.

Minetest had a mod to fake spherical planets using a torus.

Main video: https://youtu.be/ztAg643gJBA More in depth: https://youtu.be/joFWr3JzBOI

The main problem with minetest it is that it seems not complete/done on the art assets and main game, and the devs always say that is intentionally not a Minecraft clone yet people come searching one on the subgames.

I think it intentionally doesn’t have a complete/done “main game”, minetest_game is just a base for mods — including complete games (like mineclone) — to be built on.

Exactly. Is there any point where particubes is superior?

If it really ends up in browser and allows free-form code changes in one page, then there's a huge opportunity for education. I'd do this with my classes.

Would you say not being in the browser is an important barrier for education? The app is super small (~30MB), runs on all mobile and desktop platforms natively, we even respect all sandboxing requirements to be present on the Mac AppStore. :p We’re also making sure the app runs well on ~4yo devices (including smartphones)

That being said, we agree supporting web browsers should be on the roadmap. But we’re a small team, it’s just not a priority currently.

Currently during lockdown, I like doing outreach events where kids can interact with me, and each other.

I've decided on not doing anything which isn't "open website X" -- it's far too hard to teach twenty 10 year olds, and their parents, how to install some program, set up account, etc. etc.

Getting students to install anything-- and dealing with variation between devices-- is a huge hassle. Teachers don't have time to be tech support.

For something that would be used for 2-3 weeks for most of the class, getting 20 copies installed on student computers is harrowing. Our 6th graders are allowed to use Chromebooks, too, (7th-8th graders need a real computer) so not everyone has a full-fledged computer. If we go the phone route, many parents hold the app store passwords to control what apps the student installs... and some of the 6th graders don't have phones, anyways.

Computer labs aren't really used so much anymore (and can't be this year), but if we were to go there I'd still need to either beg facilities/IT to spend limited time installing it or go install it on 20 devices myself with credentials I'm really not supposed to know.

If browser isn't a near term priority, maybe don't say "coming next".

Just getting 2 copies of some robotics control software installed among all the students in my most recent class (picking the people with the most "normal" looking computers who were most eager to install something) chewed up a big portion of my attention for 2 class sessions, and we only meet 3 times per week...

From what I understand a lot of educational computers are chromebooks. Being in a browser is definitely a plus.

Oh ok, that makes sense, thank you!

It makes asset creation simple since everything is a block and is constructed like Lego. People like constructing things like Lego because they're a very straight-forward way to construct things. It's part of what made Minecraft so popular in the first place.

I play Minetest on Mac! :)

Damn I saw the title and thought this would be a solution for easily making realtime multiplayer games, got so excited because it's really very difficult right now. But this is more like roblox or something, not a tool for setting up a realtime server to sync data across clients.

Devs out there: if you make something like firebase that lets you realtime sync in-memory server data (instead of db data like firebase) among clients in a cost-efficient way such that it's viable for multiplayer browser games and mobile apps, there are a lot of people who would pay for it. Me most of all. I would pay $100+/mo on a starter plan for it, even before I scaled.

You really have to have serious technical chops to do this well right now, and it's a big barrier to entry.

The 19yo who wrote Agar.io single-handedly is nothing short of a savant.

I think this Godot Dedicated Multiplayer series might be interesting to you: https://www.youtube.com/playlist?list=PLZ-54sd-DMAKU8Neo5KsV...

Godot also makes it very easy to export games to be run in the browser.

I got what I needed for implementing interpolation from one of these videos, definitely recommend them. Godot is great but it would rock if interpolation support was as deep as puppet/rset support (which, it turns out, works great at lan speeds but can fall apart in high latency situations)

I wrote a minecraft clone with full physics sim, and networked multiplayer synced state between all clients. I had to spend a LOT of time on the multiplayer physics state propagation, it requires perfect clock synchronization, both client and server side predictions, interpolations, extrapolations and render-interpolations to maintain smoothness with hundreds of physics objects tumbling and flying around after explosions etc. It's extremely complicated and it's not going to help just having some sort of cloud SDK replicating an in-game memory area unfortunately.

But if your goal is not networked physics, it's certainly a much more simple problem!

I had been working on this project https://github.com/Fluffy9/Zenbase. I've been trying to figure out what it's good for and making an Agar.io like game is one thing I've started on. Combined with the nts library here to synchronize the clocks of devices https://github.com/gundb/gaming, I think it would be possible

Have you come across Nakama? https://heroiclabs.com/nakama. It's available as a paid service, or free to self host. It integrates nicely with engines like Unity / Unreal, but is equally usable for a browser based game.

Can you explain more on this ?

Are you wanting something like a cloud-based ... browser/cache basically a users localstorage/db/browser data would be synched in the same format in the cloud?

How are you imagining this? (Burned out dev, looking for a side project).

Context: I started building a synced browser game, having never done anything similar before, and realized that multiplayer game state isn't supposed to be stored in a database, the way firebase works. It's just kept in a server's active process memory, so there's no reads/writes to a DB involved. Otherwise realtime speed would be impossible. I never knew this before, having never worked on it or thought about it. But if you want such a setup, you basically have to write it yourself. And that's hard.

I just wish there was a SaaS (much like firebase) where you sign up and have an API that lets you define the data that your game-state involves (which may be a large schema), and then provides you with a suite of methods for letting clients create, find, and join group sessions ("games", "matches", however you want to call them) where the game-state is synced across all clients in that session until the game ends, with each client being able to modify the game-state within defined limitations (i.e. play the game.) I suppose the server would have to know under what conditions a game ended so that it could notify all players and end the session.

It just seems very daunting to me.

You will need things like client-side prediction, input queues, dead-reckoning, entity interpolation, lag compensation etc etc which means your net code will be need to be tailored for your game. Just outsourcing it like Firebase has done with regular web apps will be really hard without making a lot of assumptions about the client. Adding server authority adds another layer of complexity where you basically need to either run the same engine on the server or simulate the same processes.

With that said, I also want something like this and definitely think it's a problem worth pursuing. I know there's Photon for Unity but I don't know what it actually provides and it's obviously tied to a specific engine.

Yes! It is a complicated problem. And it just leaves me laying awake wondering how a 19yo solved it so effectively by himself. (agar.io's author) How could he possibly have such depth of skill and knowledge at such an age?

I know, I'm side tracking from productive conversation, sorry for that.

If you're looking for resources on learning the basic principles of multiplayer games I invite you to read the very well written and illustrated tutorials by Gabriel Gambetta https://www.gabrielgambetta.com/client-server-game-architect....

On a lower level, I have been using Colyseus (https://github.com/colyseus/colyseus) which is, in the words of the author: "[...] an Authoritative Multiplayer Framework for Node.js, with clients available for the Web, Unity3d, Defold, Haxe, and Cocos2d-X.". I have been using it on multiple projects as a state synchronisation library for my browser-based games. It takes cares of all the data synching aspecta among all players in a "room". The community is very active and you will get a lot of help to begin with and scale your creations.

Of course, a lot will have to be done by you for anything like client-side prediction, server reconciliation, lag compensation, entity interpolation, but knowing that the state manages itself is already a huge relief if you are unfamiliar with these concepts.

Another project which already includes many of these features is https://github.com/timetocode/nengi. It is more opinionated and well focused on fast-paced games.

On my side, I have been creating an open-source multiplayer game for the browser that includes client-side prediction, entity interpolation and server reconciliation https://github.com/halftheopposite/tosios.

Ooh, this looks very good. I might try colyseus. Thanks for the link. My game is only a card game so it's actually a very simple use case relative to many others. But it isn't turn based, so it's still realtime.

Your spec is a little all over the place; Different multiplayer games need different setups, or more specifically different parts have different requirements. Matchmaking, lobbies, and rooms are one thing. (Database) Running an instance of a game (joining, game state, sync points, state authority, game complete) Is another. Live movement of players which dont affect game/rule state, (ie, jumping up and down doesnt score a point) but wants low latency is another.

For the middle part, i developed https://github.com/NewChromantics/PopNotPoker as an alternative to boardgame.io for easy room creation, sharing, and most importantly to me, exetremely easy game rules (all async js)

The "netcode" would be stuck on top (player movement, voice chat etc), using a bit of player meta for say webrtc session sync (or udp addresses etc etc)

This is an approach I used for 25 years on pc, console and now vr & web games; have "keyframes" where the server/authority dictates new game state to everyone, and everything else is client side predicted and throwaway

I've done this before myself for a pretty simple game and had to build the system alongside it. It's quite fiddly to get right.

I've been working on a new game on and off which is a bit less working with websockets directly and I looked at ably[0] to be that firebase like system, I've found it works reasonably well if you squint, though it's definitely not the same thing.

You can hack together a pretty nice implementation which gets you started using for example using presence[1] to store a minimal dataset associated with synced state. Then derive gamestate off that.

Which you can then expand on.

Though maybe you were wanting a more complete solution =)...

- [0]: https://www.ably.io

- [1]: https://www.ably.io/documentation/realtime/presence

I'm in the same boat as you! Looking to build a real-time multiplayer application (think Figma), and I'm not so sure of what to go for: Mongo is fine I guess but I have a feeling it'll bite me at some point. I've looked into CouchDB, as well as Redis and SQLite.

If anyone has experience with building this kind of thing, I would gladly pay for some consulting.

I made an open-source multiplayer online system/standard: http://fuse.rupy.se/about.html

It has all the parts you would need to get any multiplayer game (from 1vs1 to MMO) working.

From what you've written it sounds like it's a great implementation for solving this problem! But I'm only a so-so dev and I just can't do much without great documentation-- the tutorial section on this page just isn't enough for me to feel confident that I can wield this tool in a meaningful way.

Yeah, it's hard, even with documentation there is so much that can't be communicated efficiently.

I'm working on a client that I will try to make more accessible (just like particubes and roblox are trying to do), but no matter how you turn it you're going to need some basic programming skills:


would redis on a server, with webrtc as an interface fit that requirement?

This is cool. I'm working on something similar called enu (https://github.com/dsrw/enu), but you're further along than I am.

A few suggestions that may or may not be helpful:

- I realize that this is a big part of your esthetic, but blocky "game fonts" are hard to read. They're fine for games, but for editing code I want a normal monospace font rendered at a normal DPI.

- I feel like there should be a way to apply code changes without a full Publish. It's nice to test a change without resetting the entire world.

- Your docs are off to a good start, but it's really not clear to me how everything comes together. A more in depth example would be more helpful at this point than API docs, I think.

I'll definitely keep an eye on this. Nice work!

This looks... really cool. Good luck! I love the concept of an open game development platform , and especially the automatic multiplayer. I hope this succeeds.

Thank you!

Looks incredible, more competition for Roblox and Minecraft is a great thing.

Yes, we believe there’s room for more actors!

Similar idea to https://dotbigbang.com/ except it's more platform focused and not browser native

I'm part of the dot big bang team and just want to note that we're absolutely a platform.

Our aim is to be a place where people can play games but also one where anyone can make games. We're in the process of unlocking the first stage for the gameplay side of that by releasing our TypeScript based scripting API soon.

Particubes looks great too and it's cool to see so many companies popping up in this space.

Oh Hi! :) It's great to know that you're adding scripting to dot big bang!

Thanks, these things are always an entertaining journey! :)

It’s not too much work to make it work with wasm, adding web browser support. The app is very small (~30MB), it’s definitely something we want to do in the future. But Linux will be supported before that. Game servers and our CI already run on Linux.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact