{"id":8235,"date":"2012-12-07T13:10:08","date_gmt":"2012-12-07T18:10:08","guid":{"rendered":"https:\/\/www.spacesector.com\/blog\/?p=8235"},"modified":"2013-05-03T09:29:54","modified_gmt":"2013-05-03T13:29:54","slug":"making-a-space-4x-game-setting-the-stage","status":"publish","type":"post","link":"https:\/\/www.spacesector.com\/blog\/2012\/12\/making-a-space-4x-game-setting-the-stage\/","title":{"rendered":"Making a Space 4X Game: Setting the Stage"},"content":{"rendered":"<p><a  href=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game.jpg\" class=\"thickbox no_icon\" title=\"Making a Space 4X Game | Space IT\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-8236\" title=\"Making a Space 4X Game | Space IT\" src=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game.jpg\" alt=\"Making a Space 4X Game | Space IT\" width=\"600\" height=\"338\" srcset=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game.jpg 600w, https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game-300x169.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Hello everyone, I&#8217;m dayrinni. I&#8217;ve written a few articles on SpaceSector in the past. I did a series called \u201c<a  href=\"https:\/\/www.spacesector.com\/blog\/tag\/what-makes-a-good-game\/\" target=\"_blank\">What Makes a Good Game<\/a>.\u201d and I am now going to start a new series of articles, called \u201cMaking a Space 4X Game.\u201d<\/p>\n<p>I thought it&#8217;d be fun to see what goes on behind the scenes and some of the obstacles that I have encountered while making my new space 4X game, whose name will remain hidden for now! The topics for the entries will be varied &#8211; some will be technically based, while others more in the game play aspect. I&#8217;ve made plenty of mistakes and these journals will talk about what I ran into and how I overcame it.<\/p>\n<p>Before we begin, I&#8217;m a One Man Show. I do it all \u2013 design, code, test, some art (I try to contract as much as possible out as I&#8217;m not much of an artist), I find music, and so on. I like to refer to myself as \u201cSuper-Indie\u201d. It is a lot of work, but it is certainly a labor of love. I love games and I love making things. I want to make a great 4X game.<\/p>\n<h3>Know What You Want To Do Before You Do It!<\/h3>\n<p>I was previously working on a space 4X game titled \u201cSpaceIT\u201d. While this was doing well, when I first originally came up with the design, the only other recent game was Sins of Solar Empire. I like Sins, but I thought I could make a great turn-based 4X game. I wanted something that had a lot of detail and an epic feel. I left some elements of the design empty because I wanted to have some testers to give me feedback and I could make something they like.<\/p>\n<p>I thought that this would be a good idea since it would give a sense of ownership to the testers and they could become community promoters and help spread the fan base. A sense of ownership is something very powerful. While we all had good intentions, the design of the game just did not fit together at the end. It did not play in a unified way. Everything felt very disjointed to me and a few other people. Of course it would \u2013 the design was still being made in late Alpha Stages!<\/p>\n<p>On top of that, the game had numerous performance issues. It was beyond me to improve the performance \u2013 the library I was using is, well was downright awful for graphics.<\/p>\n<div id=\"attachment_8237\" style=\"width: 595px\" class=\"wp-caption alignnone\"><a  href=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha_large.jpg\" class=\"thickbox no_icon\" title=\"SpaceIT Alpha | System management view\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8237\" class=\"size-full wp-image-8237   \" title=\"SpaceIT Alpha | System management view\" src=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha.jpg\" alt=\"Making a Space 4X Game | Space IT\" width=\"585\" height=\"330\" srcset=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha.jpg 600w, https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha-300x169.jpg 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<p id=\"caption-attachment-8237\" class=\"wp-caption-text\">SpaceIT Alpha | System management view<\/p>\n<\/div>\n<p>This past June, I decided to scrap most of the project and start anew. My ultimate goal is to make a GOOD GAME. I needed to learn from my mistakes and make improvements on everything. That&#8217;s exactly what I did&#8230;<\/p>\n<h3>Solid Design<\/h3>\n<p>This time, I would come up with a unified design and ensured that it all fit together. I learned a lot from SpaceIT, especially about the very subtle aspects of 4X games. I previously specialized in RPG Games, and they are very different than 4X Games. On the plus side, I knew that I could reuse much of the code from SpaceIT for the internal game systems \u2013 such as galaxy drawing, some art assets, and other portions. SpaceIT did have a lot of good things in it and I shouldn&#8217;t let them go to waste.<\/p>\n<p>So, in June 2012, I did a lot of market research, looked into new graphics libraries, and packaging tools. SpaceIT suffered greatly from poor packaging (it was a zip file) \u2013 even though it was in Alpha, it still should have been packaged better with an installer.<\/p>\n<p>I spent a few weeks researching the market and then coming up with a solid design. I put in everything I learned from my experiences from working on SpaceIT, and all of the feedback I got into this new design. We did a lot of experimentation with SpaceIT \u2013 at one point we had, I think, 4 Fleet Combat Systems. At the end of the new design, I looked at what I had and said \u201cThis is good!\u201d. I will be going over some of these systems in the future. I vowed to stay with this design and not falter. I wanted to avoid feature creep, and going around in circles. I didn&#8217;t want to waste time. It was time to execute.<\/p>\n<p>One other aspect I wanted to do for the new game was to come up with the lore, races, technological aspects and so on before I coded anything. I had this idea, in the SpaceIT, that I could make the lore fit the game. This didn&#8217;t work out for me. I should have known better because I have made RPG games before, and the story\/lore aspect is paramount.<\/p>\n<p>I had a solid design \u2013 something that told me what the game was, and I had a plan of action. It was time to stick to my guns and pull the trigger.<\/p>\n<h3>Write That Lore<\/h3>\n<p>I spent the rest of June and all of July, writing lore and implementing the basic packaging of the game. I wrote around 40ish pages of lore and put them on the game&#8217;s website. I fleshed out all of the empires, universe, back history, and technologies. It was a huge time investment \u2013 but my new game had a basic code infrastructure that would make it easier for testers to test the game, and there was a solid backstory.<\/p>\n<p>The game had a soul, an identity, one that SpaceIT never had. You know how when you play some games and it feels empty, soulless and hollow? I got that with SpaceIT. I do not get that with the new game when I test it. It really is amazing at how much this can impact ones feelings towards a game. Something without an identity is nothing \u2013 that was SpaceIT.<\/p>\n<div id=\"attachment_8239\" style=\"width: 595px\" class=\"wp-caption alignnone\"><a  href=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha_starrmap_large.jpg\" class=\"thickbox no_icon\" title=\"Making a Space 4X Game | Space IT\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8239\" class=\"size-full wp-image-8239  \" title=\"Making a Space 4X Game | Space IT\" src=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha_starrmap.jpg\" alt=\"Making a Space 4X Game | Space IT\" width=\"585\" height=\"330\" srcset=\"https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha_starrmap.jpg 600w, https:\/\/www.spacesector.com\/blog\/wp-content\/uploads\/making_a_4X_game_space_it_alpha_starrmap-300x169.jpg 300w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/a><\/p>\n<p id=\"caption-attachment-8239\" class=\"wp-caption-text\">SpaceIT Alpha | Starmap<\/p>\n<\/div>\n<p>Now that I gave my new game an identity, it was time to write some code&#8230;<\/p>\n<h3><strong>Write That Code<\/strong><\/h3>\n<p>As mentioned above, I spent a lot of time writing the infrastructure of the game. What is this exactly? It is the repository where the code is stored, the build process, and the installer.<\/p>\n<p>A code repository is simply a place where code is stored with version control. It is good because it can allow for locked files (to prevent editing from other people), logs and backups (since the source is not on your main machine). I&#8217;m using <a  href=\"http:\/\/subversion.apache.org\/\" target=\"_blank\">Subversion<\/a> (SVN).<\/p>\n<p>For those who do not know, a build process is the steps to package a piece of software so it can be deployed to consumers. The game is written in Java, so I am using <a  href=\"http:\/\/ant.apache.org\/\" target=\"_blank\">ANT<\/a> (which is like a Makefile for those familiar with C\/C++). In ANT, it is possible to specify different tasks and all their dependencies. So in my build file, I have a series of tasks that will compile the code, obfuscate it (jumble the bytecode to make it hard to re-engineer it), generate an executable(.exe), sign it with a code signing certificate(verifies the identity of the program &#8211; me), move art assets, and finally, package everything up in an installer. The beauty is that I can do this at a click of a button! It was a large time investment (took me 71 tries to get it right) to put all of these steps in the build process, but it makes deploying the game easier. Doing a build by hand can be very time consuming and seriously error prone and cause more headaches \u2013 so I highly advise in putting the time in first to make a good build process.<\/p>\n<p>There are many ways to do build processes and deploy programs \u2013 this is just what I selected. I know, in the Java realm, Maven is very popular (and powerful).<\/p>\n<p>With Java, the executable program is generally a \u201cjar\u201d file instead of an .exe file. But I wanted to use an .exe file (on Windows, for now). I also wanted something that will be able to detect if the user has Java or not, and do proper setup. Java can be fickle sometimes with installations on newer versions of Windows. People are also more familiar with an .exe file rather than a .jar (or a .cmd file). So this increased usability. The last thing a gamer wants is to have a problem when trying to launch a game they are excited about! There are a bunch of different programs out there to package up a Java program to make it be in an .exe file. I am using <a  href=\"http:\/\/jsmooth.sourceforge.net\/\" target=\"_blank\">Jsmooth<\/a>. It is very cool and gets the job done! I was able to incorporate this into my build process, so it runs seamlessly.<\/p>\n<p>Finally, the last part, is the installer. In SpaceIT Alpha, I had a zip file \u2013 not exactly a pretty way to handle installation of a program. This time, I wanted something more robust and official looking. I did a lot of research and found another set of tools that can be used to build a Windows Installer. It is very cool \u2013 since I can add in a lot of features, such as putting icons on the desktop and start menu. It looks better than extracting files from a zip. Also, this would handle uninstalling the game, which is important. I&#8217;m using <a  href=\"http:\/\/nsis.sourceforge.net\/Main_Page\" target=\"_blank\">NSIS<\/a>. Again, like Jsmooth, I was able to incorporate this into the build process.<\/p>\n<p>All of the above are in my build process and took me a lot of time to research and setup \u2013 but it is done now. I can (and you!) forever reap the benefits for these automated processes. The time I put in now will (and has been) saved later. I can now focus just on making a Great 4X Game!<\/p>\n<h3>What Comes Next?<\/h3>\n<p>This is my first article of the series and I plan to write many more. I wanted to set the stage for what is to come \u2013 there is a lot that has happened! I will be talking about various game systems in future articles and eventually, along with the help of Adam, I will announce the game. I do want to have testers from the community, but I first need to get to a point where the game is playable so that is why it is \u201csecret\u201d.<\/p>\n<p>I realize that many of the games this past year have not been too successful and some of the developers may have led you guys on. This displeases me greatly as I am a player too! I don&#8217;t want to do that \u2013 especially since I am SUPER-INDIE.<\/p>\n<p>You, the players, are what make games successful, and thus, you can make my game successful. I want everyone to see what my game is about before they decide to purchase it (it will not be expensive). My goal is to make a great game, as best as I can, and not to sell out. If I can show you, the gamers, what the game is about from an early phase, then maybe you will trust me enough to try it out.<\/p>\n<p>I also don&#8217;t want to forget about the developers. It is always interesting and fun to see what someone else does for their projects \u2013 what tools and libraries they use, different ways of approaching a difficult technical problem and the game play decisions. I don&#8217;t have all of the answers, but maybe I do have some! I hope you can benefit from this series in some way, being far out in development already, just starting now or thinking in developing your own game.<\/p>\n<p>Thank you for your time and until the next article!<\/p>\n<p><em><span style=\"color: #227dc2;\">dayrinni has been a Space Sector contributor since October 2011. This is his first foray into writing articles for any review site. He is an avid gamer in the genres of 4X, Strategy, MMO&#8217;s and RPGs. Finally, he has been the implementor of several MUDs and is currently working on a space 4X game that offers large scope and complexity. See all dayrinni&#8217;s posts <a  style=\"color: #7a1a99;\" title=\"dayrinni's posts\" href=\"https:\/\/www.spacesector.com\/blog\/tag\/dayrinni\/\" target=\"_blank\">here<\/a>. In particular, check his <a  style=\"color: #7a1a99;\" href=\"https:\/\/www.spacesector.com\/blog\/tag\/what-makes-a-good-game\/\" target=\"_blank\">&#8220;what makes a good game&#8221;<\/a> and <a  style=\"color: #7a1a99;\" href=\"https:\/\/www.spacesector.com\/blog\/tag\/making-a-space-4x-game\/\" target=\"_blank\">&#8220;making a space 4X game&#8221;<\/a> series.<\/span><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I thought it&#8217;d be fun to see what goes on behind the scenes and some of the obstacles that I have encountered while making my 4X Game, whose name will remain hidden for now!<\/p>\n","protected":false},"author":41,"featured_media":0,"comment_status":"registered_only","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[177,1],"tags":[1502,373,1173],"class_list":["post-8235","post","type-post","status-publish","format-standard","hentry","category-game-design","category-space-strategy-games","tag-game-design","tag-game-development","tag-making-a-space-4x-game"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/posts\/8235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/comments?post=8235"}],"version-history":[{"count":0,"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/posts\/8235\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/media?parent=8235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/categories?post=8235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.spacesector.com\/blog\/wp-json\/wp\/v2\/tags?post=8235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}