Show HN: An online 2D MMO game, written in Rust and JavaScript
polyfight.io
polyfight.io
That said, this is still good work, especially considering your experience and age (I checked out your 2D physics library on github and I found the trailer on youtube).
One suggestion: As someone in the game industry, I personally wouldn't label it an MMO as it doesn't include many of the features, particularly the "massive" part of MMO, that is usually associated with that term. The work is already impressive enough, you don't need to give it a label that could open it to criticism.
Otherwise, this is solid work. If you're aiming for a career in the game industry eventually, it's a good foundation to build on.
I have ported Quake III to use DataChannel and it works great (once all the WebRTC boilerplate is in place). You can test it here: https://thelongestyard.link/ Once you click the multiplayer link you will get a URL with your server name, which others can visit to join your server instantly.
Back then Quake 3 would require 3d accelerators and now we can play it in the browser... and some person on HN just casually "ported it". Awesome!
What's the technology there? Do you run it on WASM?
In addition to WebRTC multiplayer and a bunch of random improvements I added web gamepad API support as well as touch controls. Yeah, touch controls, because half of everyone is browsing on their phone and I don't think you can really call it a proper web port if it doesn't work on phones. Touch controls for Quake III were a challenge but I think I have something that's fun to use. I'm interested to hear if it works for people.
I'm also experimenting with a port of Cave Story (the classic 2D indie platformer) with touch controls for mobile: https://thelongestyard.link/cave-story/
This the demo we share: https://github.com/rivet-gg/examples/tree/main/javascript/we...
Taking great care to design your data streams to be self-correcting (e.g. transfer a world location where characters are going towards instead of which direction they are heading) can go a long way towards saving a ton of synching headaches, and enables very efficient networking.
One-off events go over the TCP-like channel, but constant streaming data that naturally self-correct over time, like the example above, can benefit from being on the UDP channel.
Like QUIC?
That's also how some speed hacks are made possible.
I'm currently enjoying more relaxed MMO settings using threeJS libraries with multiplayer built in:
Also on Firefox the FPS meter says 40 FPS, but visually the game (the interface rather, I was unable to play) is clearly not smooth, clearly below stable 24 FPS.
I did encounter a bug where out of nowhere I was jolted onto the bounds of the map (specifically the lower-left corner) and died, killed by "Unknown".
I think thse bugs in this kind of game are especially scary because you lose everything when you die, which makes you a little weary of starting again. You might get far just to randomly die for no reason. If those are ironed out, I think you've got yourself a pretty good .io game to build upon and keep evolving here!
- Dying and losing exp (and levels) feels overly brutal. Losing ~10 levels a death makes me dejected to re-grind.
- The level scaling might be better logarithmic so the initial levels make it super clear as to the benefit the upgrade has.
- Up to level 5 there should be a "noob flag" where you can't damage or be damaged by other players. This can be toggled off and is only on until the first time you reach level 6.
Levels are determined by halving your XP then finding the correct level, just like Diep.io. I agree with you though; I'll probably make it less harsh.
Level scaling is already exponential (its harder to get levels as you progress).
I actually really like the noob flag idea; when spectating, a bunch of people were confused on what to do and kept dying to a higher level person. I will definitely add this feature in the following week.
What Rust libraries did you use, what are you using for state management, etc.?
That's kind of funny. When this project said it had elo rankings, I had the thought, "it's a shame they're using elo when there are better options." It seems like you are already using one of those better options!
Other than where elo is used for historical reasons, about the only other reason I can think to use it in a new project is as a placeholder until you do something better. It's great as a placeholder since it is so easy to implement.
For one on ones you’d be pretty dumb not to prioritize front facing guns
In my very first game I got to Rank 6 with 24K points. However, there's some cases where the client and server get out of sync (despite only supposed 10-20ms latency) where the server eventually syncs you with some wild rubber banding. I died because during this rubber banding where I was shoved across the map, I likely was picked off by the leader with 118K points.
Take care of the latency issues and you have the core of something. Something similar-but-different is "Realm of the Mad God" which originally was a Ludum Dare entry using the Oryx spritesheet. So add in some interesting NPCs, and deal with the latency issues and you have the core of something that actually is monetizable.
I'll look into that game, I've never heard of it. Not sure how I'd incorporate NPCs in a fast paced game like this, if you have any ideas let me know!
Realm of the Mad God will make your game seem “comfy speed” by comparison. You’ve not yet seen fast. ;)