Jump to content

Wilds.io - Multiplayer hack'n'slash


Rezoner
 Share

Recommended Posts

Hiya there, I've just released open beta of a hack'n'slash that I've been working on for about two months (mostly consumed by learning blender from scratch).

http://wilds.io/

The engine is custom made - on the backend there is obviously node.js
The whole architecture consists of a client, lobby (load balancer), multiple game servers and postgres database to store users
Game is 2D - I have modeled these folks in voxels - then animated in blender and exported into a spritesheet using blender internal scripting in python
It's also probably the first game that uses Patreon API as a business model

I am glad to answer any technical questions.

 

header.png

Link to comment
Share on other sites

That's amazing. Did you made everything by yourself? Great work!

Smart move to separate the sprite sheet of the legs and arms to allow rotating them separately. :)

What was your biggest challenge on making it multiplayer?

Keep it up!

Link to comment
Share on other sites

Almost.

I bought most of the sounds - also Yeti and Goblin are some stock models.

The biggest challenge was to sync object life-cycle - as in take care of that the client doesn't try to operate on objects that have been already removed - or not yet added.
It's not my first attempt at multiplayer so I find the whole thing rather easy - but I remember that the first time I have read too much about extrapolation (predicting where the object will be) and overengineering the whole thing. Today I don't give a damn about extrapolating data (except very fast objects - like bullets) - I just interpolate everything - which simply means tweening positions to the next set of data received from server.

Also I do not recommend "do it all yourself" attitude I am practicing - it's a waste of time, health and potential. The only upside of it is that there is nobody except you to screw up.
 

Link to comment
Share on other sites

Wow! Very nice graphics and gameplay, seems like there were very many people online! 

What servers do you use to host the game? In the past I have worked with Heroku, Openshift, and Google App Engine.

Also, what would you say is the best and most effective way you marketed your game?

Great Game!

Link to comment
Share on other sites

Awesome. Thanks for sharing your experience :)

I'm making an open-source game server called Colyseus (https://github.com/gamestdio/colyseus), which by now I only used for some prototypes in game jams, and extrapolating data is exactly what I'm trying to achieve right now. I'm trying not to over-engineer but applying lag compensation techniques can be kinda messy.

Hope your game become a huge thing!

Link to comment
Share on other sites

Damn that was impressive. Never seen or knew that Patreon had that API to work with.

The controls were a bit tricky, took some getting used to. I think Space Bar as jump while I'm using both hands is a bit difficult.

What I really want to know though, is how did you get it to load so fast :huh:

Link to comment
Share on other sites

Very nice, feels very responsive too - if I hadn't read your post I would have thought you were using some clever extrapolation algorithms. With simple interpolation it works better than I would have expected.

Questions:

Why postgres if I may ask?

Are you just going to self-publish it on your site with the Patreon API?

If I'm not mistaken you already have a game on Steam, what made you decide not to go the Steam route this time?

Link to comment
Share on other sites

@kevdude: I can't answer marketing question yet - we shall see in a few months. I am hosting it on a bunch of 1 core (node js doesn't support more anyway) VPSes on https://www.ovh.com/ 

@end What's more important than extrapolation is predictability - as in the constant flow of the game - if every action takes 200ms to see a response - players will get used to it and. For player controled character tho it's good to have some instant response  even if it's not truly synced with server state - legs and torso direction for the main hero in my game are determined by client. The skills are however not - because it could lead to very frustrating misses.

@umz: The controls are in the early stage and lots may change.

@blackmoondev: One thing that I don't miss - is Jameson. It was painful experience :S

@mattstyles: I want to reply to everyone - so -thanks :D

@Gio: 

Postgres - some people who are dealing with millions of records told me that I will cry at some point if I pick mongodb.

Yes I am going to roll my business model solely around Patreon - if it fails I will think about switching to real payments or Steam. The game is browser based - it's always extra work to make it available and updated on Steam - I can put these extra hours into gameplay instead. Also there is a ongoing myth that being on Steam = super revenue. I have earned around 5000$ (minus Steam cut, minus taxes from QbQbQb) which wasn't worth the hustle - I've made a lot more from bundles than the Steam alone.

Link to comment
Share on other sites

Well keep posting when updates are out. Really like the whole idea and the game is great. The controls are good, I think it was just the jump that was off, because I had to move my hands away from the mouse or the controls to do it.

Also, I'd love to know if this business model works as well as, or even better than Steam and all the tribulations that go with it.

Link to comment
Share on other sites

On 5/17/2016 at 2:26 AM, Rezoner said:

@kevdude: I can't answer marketing question yet - we shall see in a few months. I am hosting it on a bunch of 1 core (node js doesn't support more anyway) VPSes on https://www.ovh.com/ 
 

That's awesome, great work to finally see people taking advantage of how node is supposed to be used!

Edit: Just curious, how many node instances do you have running right now and how many ws connections do each of them hold? Also, the cpu/specs if you want.

Thanks so much, this game is really blowing up, awesome work!

Link to comment
Share on other sites

@WombatTurkey I have moved to Digital Ocean because they let me clone a server with one click.
I am currently running it on cheapest nodes which stands for:
512 MB RAM
Intel(R) Xeon(R) CPU E5-2630L 0 @ 2.00GHz

I am running 10 of these.

It can only handle 40 players - although from what I can tell only 20% burns in the game logic, the rest sinks in websockets communication.
Take note that I didn't bothered with binary transfer - it's all based on LZW compressed JSON which might be the reason it's underperforming
 

Link to comment
Share on other sites

7 hours ago, Rezoner said:

@WombatTurkey I have moved to Digital Ocean because they let me clone a server with one click.
I am currently running it on cheapest nodes which stands for:
512 MB RAM
Intel(R) Xeon(R) CPU E5-2630L 0 @ 2.00GHz

I am running 10 of these.

It can only handle 40 players - although from what I can tell only 20% burns in the game logic, the rest sinks in websockets communication.
Take note that I didn't bothered with binary transfer - it's all based on LZW compressed JSON which might be the reason it's underperforming
 

Nice! Thank you so much, this information is invaluable really. It's hard to find real world use cases in websocket data mixed with node. Although yea, LZW is crazy expensive (especially on long strings). I've done some benchmarks and basically the result was if your server can handle the bandwidth, no compression is worth it (Trade off, bandwidth -> speed). Also to add, MSGpack, bson, and others simple fall short in comparing to the native JSON speeds.  

Again, thanks! I've told my friends on discord about the game they love it

Link to comment
Share on other sites

Wow this is really great! I am getting some bad lag in New Zealand though :(. Keep it up man, the way the game is looks feels pretty polished! I have always been curious about making a multiplayer game with a Node back end. So it's interesting to read about what you have used to make this work. 

Link to comment
Share on other sites

Not sure if anyone is interested but perMessageDeflate in websocket/ws is super bugged - it causes huge memory leaks - after disabling that my server can handle 200 players instead of 40.

Also thanks for all the congratulations. The game is getting steady flow of users but with that comes a responsibility, worries about loosing players and feeling of constant demand for new features - it burns you out nonetheless than corporate work :)

Link to comment
Share on other sites

Game runs really well, well done.

Interested to hear about your server performance, what is taking up all your CPU time?

I have a game I'm working on that uses a nodejs+websockets based server and the server is still idling at 20 players. (Haven't built load testing stuff yet)

Link to comment
Share on other sites

Soz for the delay. Would love to say that it was due to a break like @benny! suggested - but I had to meet my commercial deadlines :D

One server ($5 digitalocean thing) can now withstand 140-200 players - the most CPU goes into websocket communication not the game logic as one would expect. Not that I am using UTF-8 not binary packets - but I plan to switch soon, so I can give you a report was it worth the work.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...