{"author_link":"\/users\/blaster391","author_name":"blaster391","author_uid":"blaster391","comments":[],"epoch":1493660489,"event":"LD38","format":"md","ldjam_node_id":29521,"likes":1,"metadata":{"p_key":"92301","p_author":"blaster391","p_authorkey":"1014518","p_urlkey":"305219","p_title":"Every Man\u2019s Sky Breakdown","p_cat":"LDJam ","p_event":"LD38","p_time":"1493660489","p_likes":"1","p_comments":"0","p_status":"WAYBACK","us_key":"1014518","us_name":"blaster391","us_username":"blaster391","event_start":"1492732800","event_key":"69","event_name":"LD 38"},"node":{"_collation":{"body_sanitizer":"TextUtils::SanitizeHTML via existing importer","event":"LD38","removed_author":false},"_superparent":9405,"_trust":8,"author":14518,"body":"Since I was asked to go through the tech that I had used for my entry \u201cEvery Man\u2019s Sky\u201d, I thought that I should take the opportunity to do a bit more of a write up about it.\n### Background ###\nThe concept of the game has been around in my head for a few months before the event, mainly because of one night (when I may have been slightly drunk) getting annoyed at No Mans Sky winning awards for technical achievement\u2026 Then when I saw this LD\u2019s theme I knew what I had to do.\n\nI realized creating an \u201cInfinite Universe\u201d would be fairly easy with procedural generation, but I don\u2019t believe I could have made the universe a very interesting place to be in. So that\u2019s when I had the idea to let the players themselves make it. In the beginning, I wanted to just let players name the planets they found, but then I decided it would be even more interesting to let players place them themselves, literally shaping the entire game world.\n\nThis has its own problems. But I decided, for this experiment to try to have as few limitations as possible, so this means you are free to place whatever you want, wherever you want, I want to try to avoid moderating this world (within reason) and let it be a true representation of what the players want to say.\n\nThe outcome was not quite like No Mans Sky, but it still has a focus on exploration. But I also look forward to seeing player\u2019s creativity. Who knows what the universe will look like in a month?\n![emsscreen.png](\/\/\/raw\/6b8\/3\/z\/3533.png)\n### Technology ###\nMy technology stack could be referred to as \u201cnon-standard\u201d, since I am not aware of any other projects using a similar stack. So I will go through it, with my reasoning why I had chosen these technologies. The stack itself is as follows:\n-\tGame Engine \u2013 Unity\n-\tServerside \u2013 C# WebApi (dotnet core)\n-\tDatabase \u2013 RavenDB (https:\/\/ravendb.net\/)\n\nUnity was an obvious choice of engine, as I am already very familiar with it (I have used it in all previous LD projects). I have found it is a remarkably flexible engine, and also very good at allowing me to rapidly prototype ideas without getting bogged down in unnecessary details.\n\nRavenDB was selected for my database as the setup is very quick and straight forward (plus I had a server with it set up on already, so I could repurpose that fairly easily). It is a document database with super-fast read times, which is perfect for what I needed (players will want hundreds of planets loaded ASAP on the game load). It also allowed me to create indexes to query details at super fast speeds (someone already taken your username? I can look that up very quickly thanks to ravens indexing). Raven also supports caching by default, so it doesn\u2019t even need to hit the database to retrieve planet information (it is just important to make sure all of the requests the clients are sending requesting data is uniform).\n\nThe Web API layer is just because I needed a very basic interface between the database and the players game. This simply takes basic HTTP POST and GET requests from the game clients, and throws back responses in JSON. (Turns out parsing JSON in Unity is needlessly hard). There is some basic validation of input, but other than that, I chose WebApi for its reliability. \n\nThis is all running on the free tier Amazon Webservices EC2 instance, running Windows Server 2016, is this box going to have enough power as the universe grows? Only one way to find out. A likely scenario is I run out of CPU credits and the server slows to a crawl.\n\nWhat\u2019s also notable is the way I tried to structure my client-server relationship. I tried to make all interaction (apart from loading the player information at the game start) between the server and client asynchronous, this means that hopefully, even under load, your game should not slow down, planets may take longer to load, but other than that it should not be noticeable. The actual loading of planets is done on a cycle, every ~5 seconds the client polls the server, gets a JSON list of planets, parses them and displays them. When you create a planet, you simply POST it to the WebApi, the client is dumb and doesn\u2019t care about the response from this POST, so it simply lets it run in the background and continues doing its own thing.\n![emscover.png](\/\/\/raw\/6b8\/3\/z\/3534.png)\n\n### Final Thoughts ###\nThe main interest for me in this project is to see what kind of things the general public make of it, how engaged they find themselves, but more importantly what they can create.\n\nIf you would like to play the game for yourself, and make a little mark on the universe, you can find it here: https:\/\/ldjam.com\/events\/ludum-dare\/38\/every-mans-sky\n\nIf you have any other questions, drop a comment here (if you can do that?), or on the game page itself, I will try to answer anything I can.\n\nKeep Jamming Guys!\n\n","comments":2,"comments-timestamp":"2017-05-08T10:48:04Z","created":"2017-05-01T17:37:12Z","files":[],"files-timestamp":0,"id":29521,"love":1,"love-timestamp":"2017-05-01T19:40:11Z","meta":[],"modified":"2017-05-08T10:48:04Z","name":"Every Man\u2019s Sky Breakdown","node-timestamp":"2017-05-01T17:41:29Z","parent":25275,"parents":[1,5,9,9405,25275],"path":"\/events\/ludum-dare\/38\/every-mans-sky\/every-mans-sky-breakdown","published":"2017-05-01T17:41:29Z","scope":"public","slug":"every-mans-sky-breakdown","subsubtype":"","subtype":"","type":"post","version":74876},"node_metadata":{"n_key":"29521","n_urlkey":"305219","n_parent":"25275","n_path":"\/events\/ludum-dare\/38\/every-mans-sky\/every-mans-sky-breakdown","n_slug":"every-mans-sky-breakdown","n_type":"post","n_subtype":"","n_subsubtype":"","n_author":"14518","n_created":"1493660232","n_modified":"1494240484","n_version":"74876","n_status":"WAYBACK"},"source_url":"https:\/\/ldjam.com\/events\/ludum-dare\/38\/every-mans-sky\/every-mans-sky-breakdown","text":"Since I was asked to go through the tech that I had used for my entry \u201cEvery Man\u2019s Sky\u201d, I thought that I should take the opportunity to do a bit more of a write up about it.\n### Background ###\nThe concept of the game has been around in my head for a few months before the event, mainly because of one night (when I may have been slightly drunk) getting annoyed at No Mans Sky winning awards for technical achievement\u2026 Then when I saw this LD\u2019s theme I knew what I had to do.\n\nI realized creating an \u201cInfinite Universe\u201d would be fairly easy with procedural generation, but I don\u2019t believe I could have made the universe a very interesting place to be in. So that\u2019s when I had the idea to let the players themselves make it. In the beginning, I wanted to just let players name the planets they found, but then I decided it would be even more interesting to let players place them themselves, literally shaping the entire game world.\n\nThis has its own problems. But I decided, for this experiment to try to have as few limitations as possible, so this means you are free to place whatever you want, wherever you want, I want to try to avoid moderating this world (within reason) and let it be a true representation of what the players want to say.\n\nThe outcome was not quite like No Mans Sky, but it still has a focus on exploration. But I also look forward to seeing player\u2019s creativity. Who knows what the universe will look like in a month?\n![emsscreen.png](\/\/\/raw\/6b8\/3\/z\/3533.png)\n### Technology ###\nMy technology stack could be referred to as \u201cnon-standard\u201d, since I am not aware of any other projects using a similar stack. So I will go through it, with my reasoning why I had chosen these technologies. The stack itself is as follows:\n-\tGame Engine \u2013 Unity\n-\tServerside \u2013 C# WebApi (dotnet core)\n-\tDatabase \u2013 RavenDB (https:\/\/ravendb.net\/)\n\nUnity was an obvious choice of engine, as I am already very familiar with it (I have used it in all previous LD projects). I have found it is a remarkably flexible engine, and also very good at allowing me to rapidly prototype ideas without getting bogged down in unnecessary details.\n\nRavenDB was selected for my database as the setup is very quick and straight forward (plus I had a server with it set up on already, so I could repurpose that fairly easily). It is a document database with super-fast read times, which is perfect for what I needed (players will want hundreds of planets loaded ASAP on the game load). It also allowed me to create indexes to query details at super fast speeds (someone already taken your username? I can look that up very quickly thanks to ravens indexing). Raven also supports caching by default, so it doesn\u2019t even need to hit the database to retrieve planet information (it is just important to make sure all of the requests the clients are sending requesting data is uniform).\n\nThe Web API layer is just because I needed a very basic interface between the database and the players game. This simply takes basic HTTP POST and GET requests from the game clients, and throws back responses in JSON. (Turns out parsing JSON in Unity is needlessly hard). There is some basic validation of input, but other than that, I chose WebApi for its reliability. \n\nThis is all running on the free tier Amazon Webservices EC2 instance, running Windows Server 2016, is this box going to have enough power as the universe grows? Only one way to find out. A likely scenario is I run out of CPU credits and the server slows to a crawl.\n\nWhat\u2019s also notable is the way I tried to structure my client-server relationship. I tried to make all interaction (apart from loading the player information at the game start) between the server and client asynchronous, this means that hopefully, even under load, your game should not slow down, planets may take longer to load, but other than that it should not be noticeable. The actual loading of planets is done on a cycle, every ~5 seconds the client polls the server, gets a JSON list of planets, parses them and displays them. When you create a planet, you simply POST it to the WebApi, the client is dumb and doesn\u2019t care about the response from this POST, so it simply lets it run in the background and continues doing its own thing.\n![emscover.png](\/\/\/raw\/6b8\/3\/z\/3534.png)\n\n### Final Thoughts ###\nThe main interest for me in this project is to see what kind of things the general public make of it, how engaged they find themselves, but more importantly what they can create.\n\nIf you would like to play the game for yourself, and make a little mark on the universe, you can find it here: https:\/\/ldjam.com\/events\/ludum-dare\/38\/every-mans-sky\n\nIf you have any other questions, drop a comment here (if you can do that?), or on the game page itself, I will try to answer anything I can.\n\nKeep Jamming Guys!\n\n","title":"Every Man\u2019s Sky Breakdown","wayback_source":[]}