After pushing the merits of a TCP multiplayer game, it’s about time I uploaded one to show that it works. I was hoping to have a more complete game to upload, but it’s been 4 years now and I’m struggling to find the energy to take it further.
SpellShips is a TCP multiplayer MOBA, designed for LAN play between friends. It’s a mix between World of Warships and the custom map “Battleships” from Warcraft III. It uses BGE 2.79.
The name is literal; it’s warships, but with MOBA “spells”. Currently there is one ship with a “spell”, but more will come.
Note that it was developed on PC. I didn’t put anything platform specific in there, but it probably needs more path expansion in the code to run it on OSX. Keen to hear anyone’s experiences trying to get that to work.
- Multiplayer (TCP)
- Basic AI that paths and shoots
- Working shop for changing ships and weapons
- Two teams
- Pretty water (Thanks Martish!)
You can currently ‘play’ with multiple people. You can see them in game, shoot at them to cause damage, kill them (and they’ll respawn). Kills and deaths are tracked. The game ends when the enemy base has taken 10k damage. AI’s will spawn and meet each other in the middle of the lanes like standard MOBAs.
Instructions for playing
- Extract the distributable ZIP
- Run “start.bat” ( you may need to unblock Blenderplayer)
- Enter a name
- Click “host” if you want to host a game, otherwise enter an IP address and click “join”
With the exception of the water (Martish made it, ask him about his permissions), do whatever you want with the code and assets in the Blend (and python scripts), as long as you do not do anything to hinder my own development e.g. don’t try licensing any of this stuff so that I can no longer use/sell/distribute/etc. You can use it commercially without attribution, although attribution would be nice.
I mainly uploaded this as a way to demonstrate TCP that doesn’t make the main BGE thread lag. Currently I’m still using the sendAll command to send data from the client to the server. Under heavy load, this can still cause micro-pauses in the client if the buffer can’t fit all of the message. It’s not that difficult to fix (see how the server does sending, for example), I just haven’t got around to improving it yet because it hasn’t been causing me any grief during testing.