{"id":196,"date":"2014-10-02T23:00:25","date_gmt":"2014-10-03T03:00:25","guid":{"rendered":"http:\/\/defiancegamestudio.com\/?p=196"},"modified":"2014-10-02T23:10:23","modified_gmt":"2014-10-03T03:10:23","slug":"archmage-rises-dev-blog-9-location-location-location","status":"publish","type":"post","link":"http:\/\/defiancegamestudio.com\/index.php\/archmage-rises-dev-blog-9-location-location-location\/","title":{"rendered":"Archmage Rises: Dev Blog #9 Location, Location, Location"},"content":{"rendered":"<p>So I&#8217;m back from my week in Florida. Reports of my death by gator were (somewhat) exaggerated \ud83d\ude42<\/p>\n<p>My purpose was to meet with a fellow indie game developer Michael Uzdavines of Saved Games Inc, so we could both help each other by brainstorming, talking through issues, giving critical feedback, and thinking of possible solutions.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/store.steampowered.com\/app\/305720\/\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/cdn.akamai.steamstatic.com\/steam\/apps\/305720\/header.jpg?t=1412180073\" alt=\"\" width=\"460\" height=\"215\" \/><\/a><\/p>\n<p>An experienced iOS developer, Michael has been working on his latest (and biggest) title,\u00a0<a href=\"http:\/\/store.steampowered.com\/app\/305720\/\"><em>Heroes of Issachar<\/em><\/a>\u00a0for just over a year.\u00a0 The game is like a modern version of the SNES classic,\u00a0<em>ActRaiser<\/em>\u2014mixing action combat and exploration with base building . . . all set in a fantasy world.\u00a0<!--more--><\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/img.photobucket.com\/albums\/0903\/coyote23\/gtp\/snes-Actraiser.jpg\" alt=\"\" width=\"400\" height=\"283\" \/><\/p>\n<p style=\"text-align: center;\"><em>Good times!<\/em><\/p>\n<p style=\"text-align: left;\">A publisher once told me that game development is split into two parts: the first 90% and the\u00a0<em>second\u00a0<\/em>90%. Michael just finished the first 90%, so this was a good point to pause and take stock.\u00a0 Michael&#8217;s main issue with\u00a0<em>Heroes of Issachar<\/em>\u00a0is that the combat just wasn&#8217;t as fun as he had hoped.\u00a0 He&#8217;d done all he could think of to fix it, but the fun remained elusive\u2014just around the corner . . . or never quite there in the first place.\u00a0 Everything else was coming together nicely but this was a major problem\u2014and one that has been constantly nagging at him. I thought to myself: \u2018It\u2019s time to slay this dragon!\u2019<\/p>\n<p>Over the course of our five-hour discussion, something radical and amazing emerged: Michael enjoys many kinds of games\u2014but he loves, LOVES shooters.\u00a0 What if he changed his combat from third-person hack-and-slash to a shooter?\u00a0 Was that even possible? Turns out that it was.\u00a0 It just so happens that shooter mechanics suit his game world really well. Even more important, Michael is now building a combat mechanic\u00a0<em>he truly loves<\/em>. He can tap into that secret fountain of happiness and make something exciting for the rest of us to enjoy.<\/p>\n<p><em>Heroes of Issachar<\/em>\u00a0is now a FPS game set in a fantasy world with\u00a0<em>Stronghold<\/em>-type resource management and base building. There is nothing else like it, and I for one am excited to play it!\u00a0 This direction is so new that he hasn&#8217;t even had time to update his website and marketing materials. I really respect Michael\u2019s willingness to toss a significant chunk of his previous work to ensure that the game is as fun as possible. That takes real courage. It is so much easier to try and convince yourself that what you have is \u201cgood enough\u201d\u2014and that no one will notice \ud83d\ude42<\/p>\n<p>(\u201cGood enough\u201d is the enemy of Great!)<\/p>\n<p>On the\u00a0<em>Archmage Rises<\/em>\u00a0front, I&#8217;ve been working on the location data architecture this week. I\u2019m referring to the process of storing locations in a flexible, robust format.<\/p>\n<p>The challenge with procedural generation is how to track\u00a0<em>locations<\/em>.<\/p>\n<p>What is a location?\u00a0 Answer: Any place a player can move to and interact with.\u00a0 It can be a town, a store, a noble&#8217;s castle, or a room within that castle.<\/p>\n<p align=\"center\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/defiancegamestudio.com\/images\/blog\/location-example.jpg\" alt=\"\" width=\"600\" height=\"337\" \/><\/p>\n<p align=\"center\"><em>This is an example of a location<\/em><\/p>\n<p>How to connect locations to each other is the crux of the matter. What locations does the player know about? What locations can the player see? Which ones exist in the world\u2014but the player simply doesn&#8217;t know about them?<\/p>\n<p>I confess: I cheated in the prototype. All cities had the same types of location, and you always knew about them. Now it\u2019s time to pay the piper \ud83d\ude42<\/p>\n<p>I want\u00a0<em>Archmage Rises<\/em>\u00a0to be as close to the freedom of tabletop role-playing as possible.\u00a0 A human GM (Game Master) can react to the player&#8217;s choices and literally create locations out of thin air.\u00a0 I&#8217;ll get into the details of how stories generate game content in a later blog; suffice to say that in\u00a0<em>Archmage<\/em>, the game engine is the GM\u2014and it needs the ability to generate locations based on story alone. This can happen in two ways: picking or generating.<\/p>\n<p>Let&#8217;s say the player meets a person at the Inn, and he knows about a spell book lost in some cave. Each &#8220;quest&#8221; in\u00a0<em>Archmage Rises<\/em>\u00a0is a story&#8211;which the need of a cave location. The GM engine will then search the world for an unallocated cave with the appropriate properties and assign it as the location for the story.\u00a0 This is my understanding of how\u00a0<em>Skyrim<\/em>\u00a0generates quest locations.<\/p>\n<p>But what happens when there aren&#8217;t any unallocated or matching locations? This is the second scenario, where the GM engine has to generate the location and stick it into the world as if it had always been there.\u00a0 The procedural generation algorithms don\u2019t just run at the beginning for world creation; they have to be able to run\u00a0<em>continuously<\/em>\u00a0or ad hoc.<\/p>\n<p>Here\u2019s an example:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.defiancegamestudio.com\/images\/blog\/location-before.jpg\" alt=\"\" width=\"600\" height=\"327\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.defiancegamestudio.com\/images\/blog\/location-after.jpg\" alt=\"\" width=\"600\" height=\"393\" \/><\/p>\n<p>I\u2019m going for a linked list approach of locations that can contain N child locations.\u00a0 A new child can be created and injected at any time, and the engine just adjusts to it. Michael and I talked through the pros and cons of my approach, which was incredibly helpful.<\/p>\n<p>The system is working well\u2014but I won\u2019t know for sure until I finish all the story creation tasks. Such is the joy of game development \ud83d\ude42<\/p>\n<p>Next week, I have something special for all newsletter members and\u00a0<em>Dragonlance<\/em>\u00a0fans.\u00a0 I could tell you now, but then I\u2019d have to feed you to a gator.<\/p>\n<p>SDG<\/p>\n<p><em>You can follow the game\u00a0I&#8217;m working on,\u00a0<\/em><a href=\"http:\/\/archmagerises.com\/\"><em>Archmage Rises<\/em><\/a><em>, by joining the\u00a0<\/em><a href=\"http:\/\/archmagerises.com\/\"><em>newsletter<\/em><\/a><em>\u00a0or chatting with me about it on the\u00a0<\/em><a href=\"https:\/\/www.facebook.com\/archmagerises\"><em>Facebook page<\/em><\/a><em>. You can tweet me\u00a0<\/em><em><a href=\"https:\/\/twitter.com\/LordYabo\">@LordYabo<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>So I&#8217;m back from my week in Florida. Reports of my death by gator were (somewhat) exaggerated \ud83d\ude42 My purpose was to meet with a fellow indie game developer Michael Uzdavines of Saved Games Inc, so we could both help each other by brainstorming, talking through issues, giving critical feedback, and thinking of possible solutions. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"yes","footnotes":""},"categories":[3],"tags":[68,67,69,66,37],"class_list":["post-196","post","type-post","status-publish","format-standard","hentry","category-news","tag-act-raiser","tag-collaboration","tag-data-structure","tag-heroes-of-issachar","tag-indie"],"_links":{"self":[{"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":0,"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"wp:attachment":[{"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/defiancegamestudio.com\/index.php\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}