{"id":29576,"date":"2018-06-29T17:14:00","date_gmt":"2018-06-29T17:14:00","guid":{"rendered":"http:\/\/www.gamasutra.com\/view\/news\/320882"},"modified":"2018-06-29T17:14:00","modified_gmt":"2018-06-29T17:14:00","slug":"blog-a-steel-hunters-development-log","status":"publish","type":"post","link":"https:\/\/sickgaming.net\/blog\/2018\/06\/29\/blog-a-steel-hunters-development-log\/","title":{"rendered":"Blog: A Steel Hunters development log"},"content":{"rendered":"<p><strong><i><small> The following blog post, unless otherwise noted, was written by a member of Gamasutra\u2019s community.<br \/>The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company. <\/small><\/i><\/strong> <\/p>\n<hr \/>\n<p><em>This article was\u00a0<strong><a href=\"https:\/\/blog.joy-machine.com\/the-steel-hunters-whirlwind-update-54bb4f8f6661\">originally posted<\/a>\u00a0<\/strong>on the\u00a0<a href=\"https:\/\/blog.joy-machine.com\/\"><strong>Joy Machine blog<\/strong><\/a>\u00a0maybe check it out too (it also has a table of contents because this really is poorly organized wordspew)!<\/em><\/p>\n<p id=\"056a\">I wanted to cover a variety of\u00a0<a href=\"http:\/\/steel-hunters.com\"><strong><em>Steel Hunters<\/em><\/strong><\/a>\u00a0updates across the board so this piece is covering a lot of ground on a variety of areas; prepare for a large-cone\u00a0blast of wordspew.<\/p>\n<h2 id=\"b7c3\">Completely Wonderful Recent Happenings<\/h2>\n<p id=\"83ba\">To kick off this topical and tonal hurricane of a\u00a0<em>Steel Hunters<\/em>\u00a0update, lets start with the two biggest morale boosts in months:<\/p>\n<h3 id=\"7ceb\"><em>Steel Hunters<\/em>\u00a0and I Are in PC\u00a0Gamer<\/h3>\n<figure id=\"adf6\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log.jpg\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<p id=\"51a6\">I\u2019ve worked with Xalavier on another piece for PC Gamer in the past, but seeing the game in a big area in the spread was just\u00a0<strong>joyous<\/strong>.<\/p>\n<p id=\"cd93\">I\u2019ve had work on games while I was at Stardock Entertainment and when working briefly on\u00a0<em>Crowfall<\/em>\u2026 but seeing something I\u2019m directly responsible for like this is just, well, pretty profoundly meaningful to me.<\/p>\n<h3 id=\"c2d6\">An iOS-Created Slideshow of\u00a0<em>Steel Hunters<\/em>\u2019 Progression<\/h3>\n<p id=\"9d02\">During my sprints it can be hard to calm down and get to sleep, so I tend to play with iOS image and video apps.<\/p>\n<p id=\"b9fe\">This time: a simple, mostly-chronological, progression of\u00a0<em>Steel Hunters<\/em>\u00a0from its tech art\/vfx sandbox playground two years ago up to a few weeks ago.<\/p>\n<p id=\"a335\">It\u2019s goofy, sure, but it\u2019s such a strong reminder that progress (tremendous progress that I couldn\u2019t have ever fully predicted) is being made. Even when it feels like I\u2019m crawling to the \u201cfinish line\u201d. As follows:<\/p>\n<figure id=\"5a53\"><figcaption>\n<p>[embedded content]<\/p>\n<p>&#013;<br \/>\n&#013;<\/p>\n<p>I still wish I could have used \u201cCarry On Wayward Son\u201d for the background track.<\/p>\n<p>&#013;<br \/>\n<\/figcaption><\/figure>\n<h3 id=\"c777\">Joy Machine, Steel Hunters, and the Whole Money\u00a0<em>Thing<\/em><\/h3>\n<p id=\"45e8\">So far,\u00a0<em>Steel Hunters<\/em>\u00a0has been an enormous personal investment (<a href=\"https:\/\/blog.joy-machine.com\/starting-a-game-studio-with-no-money-dab13909cbc8\" target=\"_blank\">and clearly not financially<\/a>), but it\u2019s one I\u2019m making because I\u00a0<em>believe<\/em>\u00a0it demonstrates a sort of quality and style of game design that can make for a really great game experience. But, also, because the game entire production is based on:<\/p>\n<ul>\n<li id=\"cc45\">An efficient programming\/design ideology aimed at getting the absolute most out of any given system\/feature.<\/li>\n<p>&#013; <\/p>\n<li id=\"f405\">A content workflow that gets the most out of whatever content can be created while, also, minimizing the cost of the content that needs to be created (especially when it comes to mech\/behemoths, which could have otherwise been incredibly costly to create).<\/li>\n<p>&#013; <\/p>\n<li id=\"5c15\">I actually have the crew at my first post-college gig, Stardock Entertainment, who instilled, well, making as good a game as is possible while minimizing costs.<\/li>\n<p>&#013; <\/p>\n<li id=\"9bd1\">The requirements for an initial launch are completely viable for a small team to achieve and the game\u2019s architecture is designed to be easily updated (especially without any need for major patches\/binary updates) and frequent timed events and content and so on (one of the very few great things I realized when working in mobile games).<\/li>\n<p>&#013;\n<\/ul>\n<p id=\"0502\">So far, I\u2019ve been the only person working on\u00a0<em>Steel Hunters<\/em>; and that\u2019s been, to say the very, very least: rough. I\u2019m doing this because I have enough confidence in the quality of the initial publisher demo (which hopefully can be successfully conveyed in the short initial public trailer). And, aside from that, I\u2019ve never had more fun working on a project and been this\u00a0<em>certain<\/em>\u00a0about how great and varied an experience it can be (whether played single-player or, especially, with up to three other players).<\/p>\n<p id=\"457a\">I\u2019ve also constantly targeted a level of quality for a \u201cprototype\u201d (probably more akin to a green light demo at this point) that is representative of the game while, at the same time, based on production-ready and quality code and design that it can immediately \u201chit the ground running\u201d with more people involved. It\u2019d be fairly impossible to make the full game by myself, much less hit the intended play experience without some excellent team members who specialize in areas I can only skate by on.<\/p>\n<p id=\"d361\">I specifically wanted to position\u00a0<em>Steel Hunters<\/em>\u00a0as a AA-quality game and aim for as low a budget necessary as possible because I want really want to demonstrate that even a fast-paced third-person shooter (with heavily customizable ways for players to play how they want) can be made without a AAA budget. And all of this would be possible for the list of reasons I mentioned earlier.<\/p>\n<p id=\"9564\">I actually had some early (too early) negotiations with some publishers over a year ago that, I think, could have actually become a deal\u2026 But I wasn\u2019t psyched with their view of what the game needed (especially given the drastically inflated cost associated with those needs), so I eventually decided to just be patient and spend as much time on whatever I can develop in an attempt to show off a game that resonated with a publisher that really\u00a0<em>gets<\/em>\u00a0the goals we (my COO and I) have.<\/p>\n<h2 id=\"4fd4\">The Public Trailer and Publisher Demo<\/h2>\n<p id=\"d312\">NOW, all that said, the first trailer is\u200a\u2014\u200afor real this time\u200a\u2014\u200anot too far off. Not\u00a0<em>imminent<\/em>, but very much in sight. Realistically, I could make a few days\u2019 worth of changes and script a handful of sequences and it\u2019d be pretty solid, but I\u2019ve always wanted the trailer to be solely comprised of unscripted, in-game footage\u200a\u2014\u200aeven if it\u2019s only the highlight reel from the sum total of footage taken. When I initially wanted to release a trailer (a year ago), I realized doing\u00a0<em>that<\/em>\u00a0would be falling into the trap of so many other projects: a trailer that is good but nowhere near representative of the game\u2019s actual current state.<\/p>\n<p id=\"1e35\">And,\u00a0<em>really<\/em>, the trailer is a larger risk\u00a0<em>because<\/em>\u00a0it can\u2019t be as carefully storyboards and scripted to really make the most of its fairly short duration (~1:15m). But, it\u2019d be silly to talk a big game about \u201chow games should be developed and marketed\u201d if I didn\u2019t even follow the same principles myself.<br \/>&#013;<br \/>\nBut the trailer has a lot going for it: we integrated a character, of sorts, to convey the intended dry and dark humor I want to infuse the game with while the gameplay itself just shows a lot of mechs and explosions and so forth (to be voiced by a VO actress,\u00a0<a href=\"http:\/\/www.tamararyanvo.com\/\" rel=\"noopener\" target=\"_blank\">Tamara Ryan<\/a>, whose rough recordings matched the tone and cadence of the character on even an initial dry run). I also was able to get help from one of my favorite bands,\u00a0<a href=\"http:\/\/thefelixculpa.com\/\" rel=\"noopener\" target=\"_blank\">The Felix Culpa<\/a>, to provide the background music for the whole thing. So\u2026 I\u2019m optimistic.<\/p>\n<p id=\"85f1\">The publisher demo is intended to follow on the heels of the trailer. I wanted the two to be simultaneously available, but the prep for the two deliverables is so different that it was just unrealistic<\/p>\n<p id=\"a1c2\">I just cut everything I wrote (which was probably a page and a half or two) because, really, I\u2019ve already talked enough about how intense and rough the development of this project has been. And I\u2019ve learned a lot of great lessons I\u2019d love to relay at some point, but that\u2019s for another post. So, here are the\u00a0<em>neat things<\/em>\u00a0going on:<\/p>\n<h2 id=\"852b\">A Completely Different Take on the Environment<\/h2>\n<p id=\"99a1\">I wasn\u2019t planning on changing the landscape all that much from its second iteration, but one day I wanted to aim for smoother, more sand-swept landscape with less rigid mesas, some small dunes\/waves, and smoother, more open spaces. The prior iterations were nowhere near open enough to ever construct a believable space for where a city may have once been.<\/p>\n<p id=\"df07\">So as to not labor on the whole process too much in an overview article, here\u2019s what\u00a0<strong>iteration two<\/strong>\u00a0looked like:<\/p>\n<figure id=\"a3c0\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log.png\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<p id=\"9f3e\">And here\u2019s the lighting-only and end result of the\u00a0<strong>current third\/final iteration of the landscape<\/strong>\u00a0(I didn\u2019t do exact before\/afters, so the lighting-only image has meshes from the second-iteration landscape, which I was using for a scale reference):<\/p>\n<figure id=\"5a1c\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log-1.png\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<figure id=\"1d5c\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log-2.png\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<p id=\"7f47\">On the plus side: anyone with World Machine and GeoGlyph 2.0 can check out the two-pass (one of the biggest mistakes in the second iteration) node graph that generated it on the\u00a0<a href=\"https:\/\/github.com\/joymachinegames\/joymachine-public\" rel=\"noopener\" target=\"_blank\">Joy Machine GitHub Repo<\/a>.<\/p>\n<h3 id=\"7eaa\">With More\u00a0<em>Stuff<\/em><\/h3>\n<p id=\"f3ca\">Here\u2019s a more recent screen shot of the progress on the landscape. Of note is that it\u2019s been a lot of high-level building\/mesh layout work to establish the rough feel of each of the map\u2019s disparate areas. You may notice that there\u2019s still a fairly large space that hasn\u2019t been filled out quite yet, but I just figured out what that was going to be a day or two ago:<\/p>\n<figure id=\"8ac6\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log-3.png\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<p id=\"f877\">The current aesthetic for the \u201cAI\u201d buildings (the very out-of-place clean, new, and shiny buildings) is very much a work-in-progress.<\/p>\n<h2 id=\"f3e9\">The Pieces Are Coming\u00a0Together<\/h2>\n<p id=\"03c4\">For a more grounded perspective, though, here\u2019s the same camera composition some of you have come to know and love (or at least expect):<\/p>\n<figure id=\"27b0\">\n<p><img decoding=\"async\" src=\"http:\/\/www.sickgaming.net\/blog\/wp-content\/uploads\/2018\/07\/blog-a-steel-hunters-development-log-4.png\" \/><\/p>\n<p>&#013;<br \/>\n<\/figure>\n<h2 id=\"aaab\">Gameplay<\/h2>\n<p id=\"ced9\">I have, much to the detriment of my own stress levels and completely-unfulfilled desired time doing design\/vfx work, spent about 90% of my time over the last three months working exclusively on gameplay and backend code. So much C++.\u00a0<em>So<\/em>\u00a0much. But a run-down of the major systems currently in-place and just in need of tweaking to feel and function better:<\/p>\n<ul>\n<li id=\"605c\">A custom camera rig and effect stack (effect in this case being game\/world effect such as a camera shake or FOV\/positioning change).<\/li>\n<p>&#013; <\/p>\n<li id=\"a971\">The custom \u201cphysical movement component\u201d that replaces the commonly-used \u201ccharacter movement component\u201d that, if you\u2019ve worked in UE4 or played prototypes\/demos\/some games, are\u00a0<em>very<\/em>\u00a0familiar with.<\/li>\n<p>&#013; <\/p>\n<li id=\"fb5d\">This was one of the most difficult development requirements of anything I\u2019ve ever worked on (the second being something that is too large to fit in this list, so will be the next section). There are so many things in the UE4 \u201cGame Framework\u201d which are built around the use of the character (type of pawn) and character movement component that it was a bit of a nightmare to go in and replace them myself. Of all fields in game development: complex collision detection and animation are big blind spots. And the physical movement component combined physics, complex and continuous collision detection and animation all into one\u00a0<em>mega-fun<\/em>task.<\/li>\n<p>&#013; <\/p>\n<li id=\"bacc\">The most important goal of this task, though, was to make any object using a physical movement component (basically only mechs\/behemoths) as fully-integrated into the physical simulations and physics objects in the world as I could possibly make them. If a larger and heavier mech were to run into a lighter mech, the lighter mech would react as you\u2019d expect: it\u2019d be pushed back or its speed would be altered (as opposed to just completely stop upon impact). The component also interacts with physics objects but, more importantly, also applies force\/impulse to Blast objects (covered in a bit).<\/li>\n<p>&#013; <\/p>\n<li id=\"eb34\">A refactored mech setup that functions better and separates as many of its dependencies on other systems in the game as much as possible. This may not mean much in the actual end playable result, but for development it makes life much, much easier.<\/li>\n<p>&#013; <\/p>\n<li id=\"135f\">The refactor also makes AI mechs, remote human-controlled mechs, and the local player\u2019s mech share all the common functionality that can possibly be shared. This sounds like it should be simple and obvious\u200a\u2014\u200aand maybe it was\u200a\u2014\u200abut the mech and mech part architecture was one of the first things I iterated on continuously from the get-go to be as solid as possible. And it was, it just wasn\u2019t done considering how its logic should be split up for all its necessary use-cases.<\/li>\n<p>&#013; <\/p>\n<li id=\"622d\">Complete support across all of\u00a0<em>Steel Hunters<\/em>\u00a0project features for JSON-based config data (locally or from a server) that the game will automatically reload on-the-fly whenever it detects a change to an active file.<\/li>\n<p>&#013; <\/p>\n<li id=\"9226\">I can\u2019t even begin to convey how much faster this made camera setup and weapon\/projectile design. It\u2019s\u00a0<em>fantastic<\/em>.<\/li>\n<p>&#013; <\/p>\n<li id=\"9f54\">More on this whole thing\u00a0<a href=\"https:\/\/blog.joy-machine.com\/data-driving-unreal-engine-4-for-live-ops-and-hotfixes-63dae9ab38fc\" target=\"_blank\"><strong>from a past article I wrote<\/strong><\/a>.<\/li>\n<p>&#013; <\/p>\n<li id=\"96ef\"><strong>Support for NVIDIA\u2019s Blast<\/strong>: As far as I\u2019m aware,\u00a0<a href=\"https:\/\/developer.nvidia.com\/blast\" rel=\"noopener\" target=\"_blank\"><strong>Blast<\/strong><\/a>\u00a0has yet to be really used in many projects, but it is absolutely wonderful. I\u2019ve gotten to the point where I can start designing meshes explicitly\u00a0<em>for<\/em>\u00a0Blast and the results are, I mean, astounding. A basic example is that if you were to shoot out the legs of a table, it would, of course, eventually topple. Blast adds a \u201cstress factor\u201d into the mix, however, so if you were to only shoot out one table leg and the table was made to look cheaply-built (or whatever), you can make it buckle under the stress of its instability with even a small bump (or a gust of wind which, because I\u2019m a complete nerd, also physically affects certain objects in the world).<\/li>\n<p>&#013; <\/p>\n<li id=\"ccdc\">Unfortunately, since Blast isn\u2019t widely-used yet, the content workflow is somewhat complicated due to a lack of examples\/documentation. That said, like with other\u00a0<a href=\"https:\/\/developer.nvidia.com\/what-is-gameworks\" rel=\"noopener\" target=\"_blank\"><strong>GameWorks<\/strong><\/a>\u00a0tech that I\u2019m using, NVIDIA\u2019s developers on each respective tech have been\u00a0<em>astoundingly supportive<\/em>. I\u2019m currently working with the lead developer on Blast (at least from the Unreal Engine 4 integrate-side) and an NV tech artist to improve my understanding of the best workflow.<\/li>\n<p>&#013; <\/p>\n<li id=\"3e9e\">Also: I\u2019m planning on some particularly large-scale world features (meshes, not landscape\u200a\u2014\u200athat\u2019s static) to be Blast-based. And\u2026 Well. I\u2019m beyond excited for how rad that should be.<\/li>\n<p>&#013; <\/p>\n<li id=\"beb1\">Then there\u2019s, of course, a variety of engine-side rendering and shading adjustments, improvements to my core material \u201cshaders\u201d, iterations on post-processing effects and atmospherics, and more that I\u2019ll go into another time.<\/li>\n<p>&#013; <\/p>\n<li id=\"5e37\">\u2026 Except to say that I added support for\u00a0<a href=\"https:\/\/github.com\/Chlumsky\/msdfgen\" rel=\"noopener\" target=\"_blank\">Multi-Channel Signed Distance Fields<\/a>\u00a0for UI elements to make them as clear and smooth for any screen resolution as I possibly can. I can make a 32&#215;32 reticle (which may take up, say, 150\u2013200px of screen space at 1080p) look good whether playing at very low resolutions or at obscenely high resolution. I\u2019ll release my plugin for this once it\u2019s cleaned up a bit.<\/li>\n<p>&#013;\n<\/ul>\n<p id=\"bac6\">I was hoping to postpone work on the core game simulation backend until after the demo\/trailer because it\u2019s a huge part of the project and as non-trivial a system I\u2019ve ever had to design, much less develop, in my\u2026 career, I think? But, because luck isn\u2019t a thing that exists sometimes, that had to receive first-pass support now. Literally: now. I\u2019m wrapping up the first-pass implementation today.<\/p>\n<p id=\"18f4\">The whole goal of the game simulation was to be able to easily integrate independent systems\/functionality into any type of object in the game so that the object can handle it as it needs to while the actual implementation of the systems (which can be trivial or can be quite complex) it handles never need to care one iota about how an object may handle them. I was always assuming this would be some kind of event system, but the more I looked through my own design notes and documentation, the traditional concept of an event (more specifically the Unreal Engine 4 concept of an event) didn\u2019t quite fit with what I had in mind: a, let\u2019s say \u201coccurrence\u201d for now, would be activated in the world that needed to be handled by any object which supports that occurrence. But each occurrence, not intended to have knowledge of any of the specific objects that would respond to it, would need to be handled by anything that fell within its \u201cinfluence range\u201d (which can be unbounded). Aside from the challenge that presented, there was the performance implication that a locationally-relevant occurrence could have on a world filled with any number of objects that may or may not support it.<\/p>\n<p id=\"3c6f\">The first thing I did once I realized all of this was try to find a working terminology for the entire simulation architecture that would clearly separate it from the word \u201cevent\u201d\u200a\u2014\u200aotherwise there\u2019s just room for a whole bunch of confusion throughout development (in practice or purely in conversation). This led to:<\/p>\n<ul>\n<li id=\"e18c\">A search for general development terminology lists.<\/li>\n<p>&#013; <\/p>\n<li id=\"c655\">Then software engineering terminology lists.<\/li>\n<p>&#013; <\/p>\n<li id=\"c6bf\">Then: various units of measurement. And this one yielded one\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_unusual_units_of_measurement\" rel=\"noopener\" target=\"_blank\"><strong>AMAZING RESULT<\/strong><\/a>. Some key examples:<\/li>\n<p>&#013; <\/p>\n<li id=\"6836\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_unusual_units_of_measurement#Micromort\" rel=\"noopener\" target=\"_blank\"><strong>Micromort<\/strong><\/a>\u200a\u2014\u200a\u201cA micromort is a unit of risk measuring a one-in-a-million probability of death (from micro- and mortality).\u201d<\/li>\n<p>&#013; <\/p>\n<li id=\"1443\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_unusual_units_of_measurement#Banana_equivalent_dose\" rel=\"noopener\" target=\"_blank\"><strong>Banana Equivalent Dose<\/strong><\/a>\u200a\u2014\u200a\u201cThe banana equivalent dose, defined as the additional dose a person will absorb from eating one banana, expresses the severity of exposure to radiation, such as resulting from nuclear weapons or medical procedures, in terms that would make sense to most people.\u201d<\/li>\n<p>&#013;\n<\/ul>\n<p id=\"7731\">As I was searching through all of this, I was talking to my BFF\u00a0<a href=\"http:\/\/invicticide.com\/\" rel=\"noopener\" target=\"_blank\">Josh Sutphin<\/a>(who explicitly said to note that it\u2019s currently undergoing work to make it \u201cnot absolute shit\u201d) about what kind of setup I was thinking of. And I said:<\/p>\n<blockquote id=\"5211\"><p>I\u2019m thinking of the whole thing as, like, a droplet of water falling into a pond and the ripple effect it causes.<\/p><\/blockquote>\n<p id=\"2efd\">About an hour, I discovered that\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_metaphor-based_metaheuristics\" rel=\"noopener\" target=\"_blank\">\u201cMetaphor-Based Metaheuristics\u201d<\/a>\u00a0were a thing. As I was looking through the list, I found the\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_metaphor-based_metaheuristics#Intelligent_water_drops_algorithm_%28Shah-Hosseini_2007%29\" rel=\"noopener\" target=\"_blank\">\u201cIntelligent Water Drops Algorithm\u201d<\/a>. A very\u00a0<em>rough<\/em>\u00a0interpretation of the summary and its\u00a0<a href=\"https:\/\/pdfs.semanticscholar.org\/9d61\/b5d40f561a08657e75350c58a0e842be00c7.pdf\" rel=\"noopener\" target=\"_blank\">corresponding paper<\/a>, while not anywhere near being\u00a0<em>exactly<\/em>\u00a0what I was thinking of, was close enough for me to absolutely dig it. So, my simulation is:<\/p>\n<ul>\n<li id=\"a4ae\">A single \u201csimulation core\u201d that only one very high-level game object has access to. But the simulation core has some publicly-available static methods for interacting with the simulation, of course.<\/li>\n<p>&#013; <\/p>\n<li id=\"a916\">The \u201csimulation droplet\u201d which is, essentially, the contents of a what I previously referred to as \u201coccurrences\u201d.<\/li>\n<p>&#013; <\/p>\n<li id=\"8470\">A \u201csimulation bucket\u201d which holds a list of all pending droplets for the duration of their lifetime and hands references of them out to any object within the droplet\u2019s influence area that support any given droplet type.<\/li>\n<p>&#013; <\/p>\n<li id=\"137f\">These buckets are created and placed throughout the world to cover as much ground as possible to limit the search area for objects whenever it\u2019s holding active droplets.<\/li>\n<p>&#013; <\/p>\n<li id=\"4bf7\">Currently, there are just a handful of these buckets because I don\u2019t want this first-pass to be a larger time commitment than it already is, but I have a rough generalized adaptive quad-tree implementation that I will likely integration into the simulation core for bucket distribution that adjusts the quantity of buckets based on the density of players (and therefore actions\/droplets) in given areas.<\/li>\n<p>&#013;\n<\/ul>\n<p id=\"29ca\">This is possibly the most ridiculous thing I\u2019ve ever come up with, but having implemented 95% of it by now, its practical use is perfect. So that\u2019s neat.<\/p>\n<p id=\"a4f1\">I probably won\u2019t do any more\u00a0<em>Steel Hunters<\/em>-specific articles until after the trailer\/demo are ready, but this was long overdue.<\/p>\n<p id=\"0998\">I\u2019m currently working on Part Three of my two-part series (<a href=\"https:\/\/blog.joy-machine.com\/how-i-started-programming-part-one-of-two-74abffa51ae2\" target=\"_blank\">part one<\/a>,\u00a0<a href=\"https:\/\/blog.joy-machine.com\/how-i-started-programming-part-two-of-two-89280c5f26c6\" target=\"_blank\">part two<\/a>) which is solely as much advice, anecdotes, recommendations, and some more touchy-feely stuff like how to do deal with our weird games industry if you\u2019re someone with a kind of mental illness that I have some familiarity with. So hopefully it\u2019s easy to see why it is taking so long to write.<\/p>\n<p id=\"7303\">I\u2019m also working on a very rough overview of C++ programming in Unreal Engine 4 to serve as interim resource for developers working on games and finding the lack of documentation on\u00a0<em>pretty critical subjects<\/em>\u00a0problematic or not fully understanding why C++ in UE4 is the way it is, my best-practices recommendations, a bunch of tips\/tricks\/snippets\/utilities that I\u2019ve developed to make my life easier, as well as a software\/extensions (or just the configuration of commonly-used extensions and even Visual Studio itself for best-use with UE4).<\/p>\n<p id=\"d3f9\">I can\u2019t even begin to give a rough idea of when I\u2019ll publish those other than: some day. The whole\u00a0<em>Steel Hunter<\/em>\u00a0thing in addition to contracting that I need to do to, like,\u00a0<em>live<\/em>\u00a0is starting to be a substantial high-wire act to maintain. But I\u2019ll get there!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The following blog post, unless otherwise noted, was written by a member of Gamasutra\u2019s community.The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company. This article was\u00a0originally posted\u00a0on the\u00a0Joy Machine blog\u00a0maybe check it out too (it also has a table of contents because this really is poorly organized [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":29577,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-29576","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"_links":{"self":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/29576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/comments?post=29576"}],"version-history":[{"count":0,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/posts\/29576\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media\/29577"}],"wp:attachment":[{"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/media?parent=29576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/categories?post=29576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sickgaming.net\/blog\/wp-json\/wp\/v2\/tags?post=29576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}