[Phaser] MassiveMatch.io - Massively Multiplayer Match 3

Recommended Posts

Hi All!

I've made a Match 3 game where everyone is playing on the same board. It's crazy and fun :)


There are currently 5 level types, 4 cooperative and 1 team based. I'll definitely be adding more in the future - any suggestions for these are very welcome.
All of the art is from http://emojione.com - I'm no artist, I'm very grateful to have use of this.

I might look at offering private servers in the future, or the ability to customize your cursor. I'm not totally sure what players will want. Player feedback is always helpful here!

There are definitely some lag issues. I know how I'm going to improve this, hoping to get it done during the next week.

Right now the game is running on a 0.25 CPU Azure instance, it looks like it'll comfortably get to 100 simultaneous players before I need to do some work on performance or upgrade the machine.

Tech Used: Phaser, Primus, Typescript, NodeJS



Share this post

Link to post
Share on other sites

Fantastic job!  I see a bundle.js -- did you use webpack to bundle and cross-compile the typescript?

What about the server?  My guess is you're using websockets or some equivalent for the communication with the server, right?  Still, keeping all that in sync sounds challenging.  Especially for a player who is currently trying to make a move while everything is still falling down from a previous match made by another player.

Fantastic work.  Would love to hear some of the technical details.

Share this post

Link to post
Share on other sites

@Randito - Yep typescript and cross compiling using webpack. I did a post on some of the stack over here:


The Server and Client share as much code as possible, and yes websockets are used.

The network protocol is done using deterministic lockstep (ref http://gafferongames.com/networked-physics/deterministic-lockstep/ ). The server runs the simulation and sends down "at frame 9 player one started swapping these two matchables". Clients can then run the simulation exactly the same, but only after hearing what inputs happened in each frame from the server (there is some latency here)

When a player does a swap on their client, it doesn't actually happen locally until it is sent up to the server and the server sends it back down (as above).

As we are using Websockets our data transmission is TCP, which means that massive match can have the jerkiness shown in that article. Currently the game will shudder like this if you are having packet loss or fluctuating latency. I have a plan to tackle this by having the client play forward the simulation even when they don't know what inputs happened, then fixing it back up when the inputs arrive. I think this will look better than the current errors as most of the simulation will continue correctly. This will make everything a bit more complicated, but I think it will be worth it.


Hope that answers a few questions :)

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.