Jump to content

[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



Link to comment
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.

Link to comment
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 :)

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.

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.


  • Recently Browsing   0 members

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