Vertex [Lexaloffle Blog Feed]https://www.lexaloffle.com/bbs/?uid=26013 Picar.io, The Massive Online PICO-8 Multiplayer Game <p>Try it out at <a href="http://zachpetersendev.com/picarioGame/">zachpetersendev.com/picarioGame</a>!</p> <p>You are a fruit. Eat the tiny dots to grow bigger, or eat other fruit that are smaller than you. Just make sure that none of the larger fruits eat you! Works on anything that can run a web browser (including mobile!)</p> <p><table style="width:640px" cellspacing=0 cellpadding=10><tr><td bgcolor=#CCCCCC><span style="color: #101010;">Controls:<br /> Arrow Keys : Move<br /> Mouse : Click and hold to move in direction of cursor<br /> Touchscreen : Touch and hold to move in that direction<br></span></td></tr></table></p> <p>The code for this project can be found at <strong><a href="https://github.com/zacharypetersen1/picario-server">This Github Page</a></strong>.</p> <p>This is a proof of concept game made by Dylan Tran, Zachary Petersen, John Chau, and Sterling Salvaterra. Special thanks to our amazing instructor Adam Smith at UC Santa Cruz for his advice and encouragement, and to Mathew Kuhn for the music.</p> <img loading="lazy" style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/26013/PicarioTeam.png" width=512 height=288 alt="" /> <p>Our goal was to show that the PICO-8 can support a relatively massive number of simultaneous players in a single game given its constraints. We decided to recreate the popular agar.io to achieve this goal.</p> <p>In our largest test, we had 35+ simultaneous players. Theoretically, the game can handle 64+ simultaneous players.</p> <p>One of the biggest challenges we faced is that there are only 128 bytes of GPIO in the PICO-8 meaning that the each client can only handle take in 128 bytes of Input/Output per frame. We decided to represent each object with six bytes, one for ID, one for size, two for X Coordinate, and two for Y Coordinate. With 128 bytes of I/O, that meant we could update 21 objects per frame. We designated three of these objects to output (The client telling the server about changes in the player's state and the state of any objects the player eats) and the other 18 to Input (The server telling the client about the change of objects in the world).</p> <p>We wrote the server in python. Since the clients can only handle 18 updated objects per frame, we implemented a spatial hashing optimization so that each client only receives updates about objects that are nearby the player. The connection between the clients and the server is made using websockets.</p> <img loading="lazy" style="margin-bottom:16px" border=0 src="https://www.lexaloffle.com/bbs/files/26013/serverScreen1.png" width=952 height=536 alt="" /> https://www.lexaloffle.com/bbs/?tid=30059 https://www.lexaloffle.com/bbs/?tid=30059 Thu, 12 Oct 2017 02:27:25 UTC