HandmadeCon 2016 - HandmadeCon 2015 Q&A (Part 2)

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
so ideally with something like this where we started off with more questions than we were going to be able to answer we would not add questions to the list but since folks came up and asked questions we now have more questions than we ended the previous session with so on to our best a pretty good multi-part question that got asked actually just in the break that that I thought was pretty interesting and I kind of wanted hear what people had to say about it was oftentimes we in you know in the game industry we will pull research from other places so you know when you're working on something or implementing something especially in graphics but also in sort of other areas we go get research from places that you know isn't necessarily game industry so it could be you know SIGGRAPH was a common one back before games sort of did a lot of the original research that's into graph like that sort of stuff but even today it's still very common but then there's certainly obviously tons of stuff like AI all those sorts of things there's tons of publications and you know oftentimes the games pull from those so the two-part question I'll say what both parts are but we're gonna take them both separately the first part is you know these papers oftentimes regardless of whether the thing they're talking about is you know going to be useful or not are oftentimes kind of they have a bit of a math wall in them right or a Naumann klaich or wall where you know if you might be a very good programmer but you're you know coming to this paper and you're looking at it and you're like I do not know what I'm looking at here right and so the question is how do you start getting past this pair here like how do you know what do you need to do how do you need to like start practicing to like be able to start reading these papers and more fluently and then the second part of the question was assuming that you kind of gotten to the point where you can start using papers effectively you know how do you find and evaluate them so just going back to the first part to the math wall part does anyone want to kind of start on one I don't know I can I can probably answer it sound really stupid but when I look at those and I see a symbol I don't recognize I try to find it on Wikipedia and then figure out what the symbol is and that's where yeah well Google's really good at like what is the math sign that is like this is an example they go weird like half II kind of thing and it'll come up with it'll show you a picture and then yeah yeah so Google but that's only gonna get you that only gets you a little bit yes well I don't I don't read a lot of papers either so my wife is a biostatistician and so I actually get to read some of her papers and I know that there's a huge math gap like she's way more advanced than me so I do have a resource that helps me cheat but I would say the first thing is like the density of papers tends to be very much higher than most of the reading you do on the Internet and so you're probably used to skimming like this is what I do right mostly internet reading I'm doing is skimming even for programming stuff because it's like yeah yeah yeah okay there's the meat that's the line of code or that's the the core function that I need when you read science papers boy you really have to just slow down a lot in your reading and really like if you don't understand the terminology you have to go and read something else like go to Google and get the terminology and and then it's much more likely you can actually use the results of those papers so so about about the math wall I don't find that that tends to happen to me in terms of notation but it does happen in terms of like concepts okay like do you understand that you know I don't know differential geometry has a certain set of results and what that implies and whatever and if you do you can follow a thing and if you don't but but usually I don't try to follow things that much anyway I'm very impatient when it comes to papers I'm like yeah yeah I don't care I don't really care why this works right now I just want to type the thing that works and if that's promising then I'll come back and build understanding in fact that's even going way back that's how I learned software texture mapping which by current day standards that's actually very simple mathematics right but I would like read Mike's articles and like Chris's articles and like Mike's especially right I would read those several times I still didn't really understand I didn't know what the one over Z thing was for and like whatever right because I didn't even at that time have experience with like projection right all the experience with projection that you have now from decades of making games I didn't even have like I literally sat down and wanted to make games that didn't know any of that so but I just kind of started trying to understand a little bit of it right like okay I'm just gonna get a triangle on the screen with no texture and then by the time I've done that I actually have more context so the thing actually this applies to my approach to everything is just I'm willing to let myself just be pretty dumb for a while and not care because human brains are really good at pattern matching and learning and improving and it doesn't need so much for you to consciously try that hard right if you immerse yourself in something for a while you'll just kind of get it and then you come back and if you really need to read it again later and understand it you know it's not like you're gonna automatically understand it but you're in a more privileged position in the second time around right but my second thing to say is I've been burned so many times by papers that I think most of them I don't go to papers as a like if I see a paper that claims some result like oh this algorithm does something fast or I don't believe it my default stance my default stance is that this is not even toilet paper because I've so many times I've put in the effort to do something and then it turns out well okay it may be 10% but they haven't done the real work right and that I may be a little bit over I've over corrected in that direction more cynical than I should be but really most papers are not very good but some of them are tremendously good right some of them will change your understanding in such a way that you are just on a different level now in terms of being able to approach a certain class of problem and so it's it's very important to like keep an eye on stuff yeah but I don't know how you know which is the right stuff I mean sometimes I guess you can kind of get that from the word of mouth on a particular paper and then you know people I trust have been finding this to be useful but it's really actually not so even that's kind of saying where it's hard to tell I suppose I was gonna say something about the math wall sort of separate from that that's that's very much related to what Pat said which is just I think that most of the time if I'm looking at a paper and I don't really know what's actually going on in the paper like it's obviously you kind of read the abstract and the textual part and you're kind of like okay well obviously anyone who reads this is gonna kind of vaguely know what's going on the paper like some papers are maybe so sort of far afield that you wouldn't even have any idea what they're even talking about but most of the time especially we were talking about so you might be reading for you know graphics for example is the least a picture so yeah you're not completely out too much so you know typically the math wall part usually comes in when they start doing things it's like oh okay you know here's some equation lines that aren't really quite worked through all the way and then they say some stuff and then there's another one here and they don't really quite relate exactly the way that you might be obvious in blah blah blah so you're kind of starting to go like wait what about what's going on and I find that when I actually do need to understand those pretty much I just have to redo the math myself on a separate piece of paper always so either the math was so obvious when I looked at it that it was like you know high school algebra and anyone could read it or it's pretty much I have to flick I have to work it out it's rare that I actually can read it just read it and so I feel like the slowing down part is like really important it's just like okay I want understand this I'm just gonna take my time I'm gonna like start writing out the equations every you know try to work them through myself but you know maybe get confused about how they got something and work it through and then I usually find when I've actually finally made the mental decisions that I'm actually gonna take the time to understand it then I can write whereas before that it was just kind of like I'm just moving around my eyes around the page hoping that for some reason I eventually start knowing what the math did which ever works right or or certainly hasn't previously so let's move on to the second part of that question which i think is you kind of just brought up which is like okay so how do you find research and how do you know if that research is good so you know maybe you're working on some kind of a problem and you think that this problem is probably something that people have studied it's probably not totally new what's the process of collect is anyone have any kind of experience stuff from that where they'd be like here's how I you know here's an example of how I might look for for research on something just even if it tends to be kind of a crappy solution like what does that look like dead you know the web search will get you a little of the way so for the witness this didn't end up in the shipping game but when we were initially building the island for the game we even know if it was gonna be you know a parameterised surface right or if it was gonna be hand constructed we ended up with hand constructed in a modeler but for the first few years of game it was like moved some control points around and we like you know interpolate the surface and I had some requirements on that that meant that it couldn't be like the standard spline sheathing that you would think of it had to be a different thing and I just like searched for like you know terms like an interpolation of unstructured control points or something and usually you don't really find the right thing that way but if you spend like literally a day doing that like of eight hours of trying you will probably find something if it exists usually well how might I describe this in a way that I could see a paper yeah yeah and then sometimes you'll find things that aren't the right thing but they might refer like you start learning about the subject space of like okay this is not what I want but it's in some field and I'm seeing the field a little bit better which might teach me more about the keywords to look yes yeah so that worked in that instance that was good Wow I think some of it is the conclusions the paper draws like and look if you run this code then we can simulate thousands of objects on a computer that's the evaluation part right look what you've already found it it's like when you look at that time that table of timings that they're proud of and you're like oh you right because the maximum number is like way below what you know you could actually use in a game so you're like well okay so I have a answer to this one which is that I actually typically do it almost exactly the same way every time which maybe is good maybe as bad so what I typically do is I first go through the publication's that I know of that correspond to this thing so for like for SIGGRAPH I usually will manually step through like SIGGRAPH in reverse chronological order right and go in that bucket because I don't know if you ever seen half SIGGRAPH proceedings are laid out they like bucket them by group and I'm like for the group that I care about here what are the five papers that that are in that group and I just look to see if the sort of thing that I'm interested in has had anything in the SIGGRAPH recently because typically I find that's a really good way to kind of like jump up to date on something that I may have let slide because you know I don't do that much graphics programming anymore so I I'm not like really in the know about what's going on there so that's usually a good way to catch a few things the next thing I'll typically do is take whatever those were that I found and just resource crawl them I mean I reference crawl them so in that you know the thing where it's like the bibliography I'll just go like okay let's just grab all of what those papers are and also by professor so if I fly if I get any kind of pull from that at all I'll look at who the professor was that's on that paper or any co-authors that are on that paper because they the professor that oftentimes students I suppose who are writing the paper but whoever is writing the paper because they usually have websites and those websites are usually categorized by sort of what they've been working on recently and they'll typically be like oh here's some things and oh that paper was actually the lead-up to the thesis that I wrote and I got bingo like I've got the thesis now and so on and so I find that if I actually kind of do this manual spider process if I can just get one good pull I can get the whole like nets worth of dolphin slash tuna in that like you know in that process if that makes sense so I don't know maybe I'm the only one who finds that useful but that's that's been typically my go-to for a long time the only time that it becomes really hard is if you can't find any place to get an initial poll so like if you're in a thing we're like I literally have no idea if there even is a publication somewhere that even talks about this thing at all or if it did it's the kind of thing that's almost impenetrable to search so it's like they don't have online indexes or anything so I just I can't even get it most of the time I think in reality that's very rare I feel like it especially these days but that's actually not the hard problem the hard problem is is again the I don't know what I don't know problem right yes so like going back to to the earlier days right like Ken shumake had his famous quaternion paper that was like here's how you could rotate 3d objects right which was a very important paper because part of that everybody was doing like janky Euler ankle stuff not even game people but like computer graphics didn't know how to rotate objects correctly right and that was not a new research paper that was like no the guys who do spaceships like know how to do this yeah I'm gonna communicate it to a different audience yeah right and so the fact that that exists like how many of those papers have not been written because somebody didn't have the idea that this other community might be interested in this thing it's got to be like of relevancy to games it's got to be hundreds right well probably there's a two-stage process there to a certain degree as well which is that like the only reason that paper was able to be written is because somebody in the spaceship field had read math stuff on patterns because otherwise they wouldn't have known to apply quaternion math to astrophysics anyway right so yeah can I have that sort of thing probably just in general although I suppose since quaternions kind of came from physics in the first place that's probably kind of a I mean yeah but he was trying to describe rotations in 3d space so it wasn't yeah it wasn't like this thing that we didn't really think about and then it came down but you know let's imagine other mathematical concepts which were not created to do anything that had anything to do with computer stuff pulling those in in the first place takes one step of somebody going hey this thing that I happen to do when I was working on some abstract NASA I think I could use that here for a practical problem and then there's the like oh what other practical problems could it actually applied to and that's like a second step that night neither of which may happen in which case you're kind of just sitting there going we'll never know we're still waiting for your paper by the way on using Taylor series expansion for estimating the division coordinate for quaternions because we stole that well you know you told us about that idea for guild wars in 2004 something like that right that's a great idea okay but I never used the Taylor series expansion for it oh well it was a different expansion then it was maybe a it was an estimation of the lower term of the division term so I think what that was is just that it's it's actually a trick I want to say that I saw from maybe Carmack or something there was not for quaternions at all but it's basically just like if you want to renormalize something so you have something that you're going to you know take that was normal before and you do something you want to renormalize it right it's just a really simple first order approximation of how to renormalize something if you know that original length was what close to one you could get it back there so I'm pretty sure I don't need to write a paper there's a point at the original that's like the kind of instruction that shipped in 3d now and whatever whatever and so I think I might be able to to magically point to that paper without actually do it because yeah that I stole that that I totally stole I just put it on quaternions because it was on just regular vectors like that so I spent roughly like I'd written the animation system for Cold War's and spent about a month trying to optimize quaternions to use less CPU and like you know so approximating like a 1 over square root of sine or something like that slurp yeah and it's it's nasty and like so I did all these approximations and I never would be like these weird 3d models that would animate like you know a bunch of points that are obviously supposed to like look like a character look like a mess and you came along with your solution and it just looked for his tweet stream this to point this out up there but I knew I stole that I knew I stole that from because people had to renormalize you know vectors all the time just just standard three-dimensional vectors and since quaternions are based they're just the same you could just apply it so I I think we probably even had been using that in the characterization system probably just for regular vectors and I just like I'll just four elements just as easy or something like that I just I just wanted to say it's what lets the hand go on the doorknob so if I if it hadn't have been like over a decade since this happened I could probably read arrived it but I'm pretty sure I won't remember how to do it is the problem it's basically yeah I'll ask a question and see if I can do it on notebook and then I could show it's really simple but I just yeah since I wasn't the person who figured it out originally - it's more of a thing that I just remember someone telling me how to do whereas you know if you actually work something out yourself oftentimes it kind of sticks a little bit better at least for me all right so let's let's ask the last part of that question just in case there's anything we didn't actually cover which is for a cigarette paper or for you know any kind of math paper that's in this in that range how do you evaluate one to know if it's good and it sounds like your answer is it's the answer is it's not sir you don't evaluate no I mean there's a there's a small probability that you know there's some curve but it's very steep where the really good papers are clustered at the end and then but most most of them are like something a guy wrote cuz he had to publish a bunch of things like and it's really it varies by discipline you know but in computer science it's pretty bad it's not a good situation the ratio is not good yeah I guess you were saying one way is to look at just the conclusion right you're just looking at kind of like when they showed the results what does that section look like I guess basically like how how much confidence do you place and if it doesn't have any results listed at all I'm assuming the answer she stowed yeah usually I read the abstract to find that I'm in the right paper and and everybody conclusion to see what the results were and then the sieve that warrants reading the rest of the papers so it's like the middle gets gets pigeon if the two ends look good basically there's also like some authors are reliable so like if Catan is on a paper okay it's probably a good paper okay it's just that most people are not kaha or whoever okay so that's the problem well so the basic going by author is one way as well potential yeah but then you're not going to hit most fields or sub headers right yeah all right so let's go off of that to that topic was surprisingly silent I guess that kind of means maybe we don't use research as much as we think we do I don't know I feel like I use it maybe not we used to more in the in the older days yeah like back when like now it's most of our bottlenecks are just getting everything done which like if I could read a couple bucks that helps with that that would be great but it's it's not like I have a lot of you know I don't I don't perceive technology barriers between me and what I'm trying to do these days all right let me pick another one here so this one kind of applies to what we talked about yesterday and it's kind of a it's kind of an interesting question because I feel like it gets it gets brought up a lot it got brought up at Hamid Khan 2015 as well and it comes from a poo from India who actually also makes the papaya which i think is a network actually it's like a open source image editor when creating an engine or shipping a game what do you look for in a file format for asset data how do you balance compression versus speed versus readability etc and sort of like separate from that is is there a particular best file format you've worked with in some case where you're like this kind of does things right you know more often than it does wrong thoughts on that I always get bit by the byte order stuff oh really yeah I always do so I try to avoid that stuff so you have only one byte value yeah just 0 to 55 and everything you know it's one of those things that I think I don't have to worry a whole lot about storage and load speed but I have really gravitated towards file formats that are asking at some level it aren't a lot of binary stuff and I mean clearly that does not work in a lot of a lot of games for what I do I just kind of I just kind of enjoy that because they can also just pull up the file in a text editor and see what else is going on here yeah so I've I've kind of gravitated towards kind of a you know a very dense version of stuff so if you take for example you were talking about building a tool that allows you to layout a room in Fenway Park that's typically going to save out to some kind of an ASCII file which generally people aren't going to edit I guess but it is actually gonna ask a description of it yeah yeah I mean there are you know using a big GUI tool and there there is a point we're just going into an editor and just going copy and then paste 50 times it's just a lot faster I've been going through a GUI tool and I I kind of like that kind of backdoor into that data so I tend to tend to favor ASCII stuff I have actually kind of an interesting one so again this is the model exporter for a girl were so we're using 3ds Max's our animation and model editing tool and 3ds max is notoriously difficult to get data out of because you can't read its file format that's not documented in so I wrote a plugin that would like live inside it and you'd press a button and it would like go and ask all the API is like here and then we give vertex data and pull all stuff together and what I would do is I'd write a really simple file format it was it was a chunked file format but like the data was more or less exactly as it came from max with no processing and then I would run a second pass and then I'd like converted into model format data that was had to be super tightly packed because Guild Wars was like really early in the online game space and we needed to download the whole game I mean every single file so make them small and tight and what that enabled me to do is then in the build process like I go you know I have a better way to compress the animation data and so instead of having to like you know take this data which was like hideously compressed and then reverse it which is potentially lossy I congest should go back to the source data and reprocess it and get a new junk out of that so that worked really well and that was so that you wouldn't basically have to have something that load max back up and reran the like export process or something yeah was like yeah got spurred games to this trick I forget to the engineer was who showed it to me but they had the system where they would automate 3ds Max and they'd say like okay just you know max load up this file reprocess it and write the results and they've just run for hours and hours and hours this they changed their model file format and so that's like a different take on them you know the problem of like recompressing your data a different way it also seems like it would keep you out of the business oh like max got upgraded and can't read this sold file format currently so then now that has to be artist intervention for this process for some reason and it's like we can just avoid that because as long as we saved the original export we can always sort of Remus the data without having to actually go back yeah I mean I use ASCII stuff for like config files but for me stuff like when I integrated flash when I integrated a spine as a spline I don't remember it's the one that everybody uses but they didn't have an a non ASCII format they just had JSON files which was really irritating because I want to be able to just load in a big chunk of data and just do stuff with it like like what I do with the SWF file format I just chunk done and what I save out for levels is the same it's just a chunk file format just as small as I could possibly get it for you know levels or anything so and the difference there you're saying you don't want to have to start parsing things yeah yeah well yeah I well I had to write a JSON parser which was fun but I didn't I didn't want to have to do that I wanted to just load in a thing and just have all my things but yeah so to speak yeah so for me it's more about can like it's more about just what is documented and what I can use and then like with with spine they had you know there are two formats and I was forced to use this one because they didn't have documentation for the other one so they wanted me to use their library to do all that stuff right now so yeah it for me it really doesn't matter well and I think what Pat said is sort of the direction that most larger games have gravitated toward and I think it it reveals a little bit of an assumption in the question which is that there's a file format right okay I think what there really is is there's things that you need to happen at various stages right either like when the release game is going to load something that needs to have certain characteristics right our tool pipeline needs different characteristics and so you might have two different file formats again for example for the mesh at both of those stages right and then that lets you not just make different decisions about you know automatically reprocessing to regenerate that second format but now that second format can be different on different platforms right because what what is a mesh right like a visual mash has different precision requirements than a collision mesh and if you're tight on memory you know you might use half floats for water together or whatever right so and that happens all over the place so even you know something like entities right we have two different formats for entities they're they're the same we meaning into the witness yeah right there's not everybody but no and and so and that was kind of driven by a little bit by a desire for readability in fact the original format was just text because it was expected to be a small amount of data of course when you have thirty to forty thousand entities it becomes more data right but but really you know you also want to start the game up real fast and load all those things and not you know whatever you know use memory on it as well or anything but we also had the constraint that entities were one of the main things that goes into and out of source control so that's a binary file format then you're in because the second you have a merge conflict you have to throw one or the other version away you can't well you can't merge it all really here it would be kind of crazy right so so there are reasons you have a text format and reason to have a reason readable format and reasons to have a binary format and they're at different places in different times and you just lay out that architecture and decide what level of complexity you're willing to adopt to get the performance that you want and then you do that right so I mean I don't know like like I'm sure if Chris butcher had done a survey of how many different file formats have in the Bungie asset system like that would have been a two-hour talk at least like right there right I assume I don't actually know but it's just it's it's not that there's a way to store data right there's Mike Acton would say right you right they either side of the data well I don't know I mean I guess I guess that's a little meta Acton right because he's always about he's always about you know me program to the data but when you can also determine the data that will make the best program they write that right so so I don't know if that that sounds like you're basically saying you don't really look for something specific in file formats so much as you say look I I know what it needs to do on either side of it well II so whatever I look for in it is just what are the things that make those parts work well or is that yeah yeah and it's contextual so if something is a small amount of data were more likely to be text only so like the variables that you said to control like gravity or whatever we don't ever ever have ballistic things in the witness anymore but there's still a grab gravity variable you know player friction or whatever right that's like you know there's probably a hundred variables or something and those are just in a text file and there's no reason to do it another way it's not a freakin JSON file great because that stuff drives me bananas because the the promise of like oh we have this general file format and all the tools will make it amazing to work with that's never true right it's always easier to just go like search for the line that says player acceleration and change that to whatever and then because it's our own format we can do small things so I don't know if you hinted us at this or somebody did but like anytime that we have a floating point value for example in one of these files we put the human readable value and then like semicolon and then the hex value right so that if it hasn't been edited you load the hex value and you get exact reproducible reproducibility of your float value won't wander if Yuri save the file or whatever right through bit errors but if you want to edit it you just delete the hex value in just thing and then it's human editable right so that's a weird hybrid thing that's a little bit of a machine format a little bit of a human format and we just decided on that as being the best thing for us at the time right so I like to keep the text formats very small and simple how do you know I am almost certain so much you can you might even Charles it could have been Charles so I feel like that's an odd world it could be how do you know do you just assume that one bit errors are close enough because if you can't reproduce the original float from the ASCII how do you know if it's been edited you just assume it fits well it's way worse if you printf in Windows you're not down to one bit error half the time I don't think they might have fixed that right so I can start saying how do you know that the whether the user has the reason that the hex and the float don't agree is because the user edited them or because the precision is just off actually let me correct you do it I said let me correct that even if it's a one bit error right that's one bit per load andrey saves right and received that like correct 500 times i don't know where that numbers gonna go right that's not usually how it works usually it'll it'll get into its local max because it'll save the same well if it's a scalar right so now you've got a vector and it's normalized or you know I don't even like there's just it's it's not that simple right and I don't know yeah either way I was just curious so I sleep better at night when the hex number is there when you actually implement this Oh the other issue actually is if that number wanders then it's gonna generate spurious source control check-ins and did write which is a whole different thing thing which we wanted a minimum we did a lot of tactics in our file formats actually so there's a little bit of a different topic but like okay I've got energy data yes and I've got all these different types that the fields could bees there's float types there's maybe vector types if you decide that's a high level thing there's string types and there's like an array of the IDS of other things because you want to know like oh this is a container and here's what's in the container or whatever right we made the choice to not put those in the file format but because it would generate dips and conflicts like we don't necessarily care what order things all right word but subversion doesn't know that so so because of that we said that kind of thing is not in our file format and anytime you have a collection of entities it works backwards where the entity knows who it's in right and then startup time which is a little bit of overhead but it's small right and that's just to illustrate this is not an isolated file format issue at all right it's like a list of the things that I connect with is a totally reasonable thing to have in a file format and yet for our requirements it was causing problems every family different way to do it so okay I just want to ask the original question there cuz I don't understand it so I print out a floating point value yeah I print out the hex version of a floating point value right and presumably the reason I'm doing this is because the print out routine for the floating point value and the scan routine that loads the floating point value back in is no guarantee you never did the work to make those River people have since right right I mean nobody we didn't nobody done this the C runtime library that I'm calling let's say I didn't write it sure no it's just I'm calling this function and I know that it won't be reversible yeah so now I go to load the file in and I load the file in and I see that the two numbers are not the same how do I know whether the reason that they're not the same is because the user edited it or the reason they're not the same because when the user I mean give me where I'm wrong here but when the user edits the floating point value you delete the hex value okay we might have also measured the magnitude of the difference as well like if it's a if it's a significant difference you you can do it just just as a way to like okay maybe they forgot to delete that part or whatever but I think I think we just delete the value so basically the user goes in the text file they change the floating point value they need to remember get rid of the hex load because otherwise we're just gonna overwrite your floating point value next time you say this thing yeah and this is interesting too because what we're saying right now only applies to the entity files right which are rarely edited by anyway and those get saved out all the time when you save stuff in the editor for stuff like the variables that I was talking about before the computer doesn't ever write or you know we ended up writing sometime later I guess but the main ones are read-only and so we don't care about this right right and so we don't then we don't have that potential mistake of forgetting to delete the X float as well all right but but you know it's it's hard to cuz you put it it's like one space away from the number so you see it just totally spaced yeah all right so I don't know why I really wanted to do so many things are pretty cool I'm just like wait so okay I kind of wanted to ask a little bit about that reverse storage part there because I think that's kind of interesting thing just in general which is that anytime that you're storing information you obviously have a choice you know if it's information that involves sort of a variable length list or something like this you can either store something like a list in the actual data format meaning I can say okay this is gonna be a variably sized thing in here that just enumerates all the things that are members of it or whatever or you can do what you were talking about there which is you can transform that into saying everyone has a sort of back pointer that says which - my a member of right and what's interesting about that is like so I'm us you know benefits of that are like you were saying it means that now it's doesn't mess with an entity's data every time maybe that list order changes or anytime like something like this happens that isn't really something that you cared about but it does mean stuff like okay any you know things can only be in one list now right for example or now we need to start having multiple ones of these and the reason I bring that up is I think that actually happens in the witness there were these times when you had to have stuff like reference one reference to because sometimes thing would have that was that was more you know like you've got like a marker in any title and what it wants to do is based on some string tag like says what like open a door if a person walks into this marker or whatever and just you whenever you do that you have different numbers of things that any of those handlers will care about those are just slots for that okay so we never ran into the specific problem of oh my god we can't I mean we sort of wanted to put things in more than one group but it was never a such a burning desire that it became a problem and we could have just said blood group two or whatever right okay so but but you know in a different game that might be more or the problem yeah it's but but it's like I'm saying it's contextual you solve the problem that you have as opposed to everybody's alright let's see here we are down we're actually making reasonable progress here this one comes from and and I think this was basically someone who submitted a question because they wanted to finally give me names that I would have no trouble pronouncing my cue from Amsterdam asks if you could go back in time and give yourself only one piece of advice at the beginning of your career what would it be I think I've got one if anybody ever tells you anything that's ready to finance or honestly though let's say that's all I'm thinking of is like maybe maybe spend the money on lawyers maybe don't be afraid of them you know I think I think I would have told myself to be a lawyer of the panel says talk to a lawyer is the advice they would have given us us at the beginning of their programming career good advice probably John wanna either say make it 75% of the panel or do a different one yeah I'm having a hard time with that one if you restrict it to programming right if it has to be a programming piece of advice you know that I would give myself that's I mean I don't know that I can really think of one actually I think the thing that I mean you hear this a lot that I probably struggled with a little bit early is just don't be afraid to fail you know just just try stuff no matter what and if it doesn't work just keep trying you know I think very early on in my career I was a little bit you know dejected by failures where well now I just I don't care about some level is that the sort of thing that basically like you know seeing this this maybe kind of relates back to the imposter syndrome part of things that we were talking about earlier is it's a sort of thing that kind of is like well if you've if you experience failure and then have some successes then you can sort of start to put it in context where it's like Oh failures are those things that happen on the way to success but maybe it's like you haven't had a success yet so all you're sort of seeing as the failures or is this something that's more like no no I've had successes already at that point I just for some reason was still afraid of failure as a reason to not go do something or try something well I think I think a lot of it and maybe he doesn't go back to that imposter soon another thing is it's watching people I have an immense amount of respect for fail and and it is it's one of the reasons I enjoy watching your Twitter feed right you are one of you know the best programmers that I know and I watch you on that feed struggle with stuff and I go well if Casey is struggling with this stuff it's okay for me to struggle with this stuff - whispers you know before so watch it but but I think I think that's the kind of thing that you know over time you realize oh it's not me it's not just me that's failing everybody's failing and it makes you it makes it okay that does seem to me to be like a pretty big part of it too because I feel like I don't even know if I still internalize that part of it meaning I think I still generally think that I like in even though if I cognate link of it I don't think it this way but when I'm just subconsciously think about it I don't think of other programmers that I respect as making mistakes mmm like it just isn't in there it's like when I think of somebody else doing this program I just don't think of them making the mistakes now I know they must make them it's not that if you asked me to then think about it would I would I not but I think it is kind of the case that it's hard to actually remind yourself in practice no really they're all making mistakes that's just how it works I'm gonna start with a design one because that's the problem I actually had but then it's got a programming equivalent right which is just you know usually usually you have a voice somewhere telling you what the problem is with what you're doing and you usually choose to ignore it so the first professional game I did was a you know as a science fiction hovertank war game and they had yes it had some gameplay problems that made it you know not that fun like the the combat situations would always devolve into like a mess in a small area of the map and it was because of decisions that from a high level I had decided were important like oh you could place a unit anywhere because that gives you the maximum player freedom or whatever but what that really does is it you know it makes most it makes terrain a lot less important or whatever right so but I had lots of reasons in my head why it was a good game and it was pretty good in some areas but it had some fatal flaws to it right and I I knew what they were right but I cognitive dissonance myself out of understanding them and acting on them you didn't want that to be true so you just yeah or you know there's always enough things to think about and deal with when especially when it's your own software company that you just find other things it's like oh you know this doesn't feel the way I want but you know we'll figure it out eventually it's not gonna it's not going to be these decisions that I made that were the problem deal with it later right I mean and the programming version of that is just you know you're building some system that you think is gonna solve a problem and gonna be really great and it's got plenty of drawbacks and downsides and you probably know some of them you probably don't know cuz you haven't hit the wall but some of them you know you really do yeah but you're just choosing not to pay attention to that voice in your head so it's just like listen to that and pay attention to that I learned that or probably in programming before I learned it in design but I didn't know that either at the beginning right I would say kind of similar or along those same lines one of the pieces of advice that I will simply throw in here that's actually from Jeff Roberts who was in the opening session at this this handmade one of the things that he said that I found to be totally true is he said that like actually finished pieces of code before moving on to new pieces of code which is an odd thing to say because it sounds like well obviously that has to be true but actually when you're doing a fairly large project or you're at the point you know in your programming career where you're doing you know a broad spectrum of things you know it's often the case that you're like you'll get something up to just the point where it sort of works a little bit and then you'll move on to a new thing right and one of the things that happens at least to me there is if I don't actually stop and go wait have I actually done all of the programming necessary to to finish sort of fleshing this out completely it doesn't mean I have to like optimize it all the way down or it doesn't mean I have to like have it in its shippable state it's just have I actually finished it to the point where I don't think I will have to come back to this for some ancillary reason I find that a lot of times I just won't do that if I don't stop and like hear Jeff's voice in my head saying this right because a lot of times you just kind of want to get everything working and now this thing just kind of works and okay I'm aware of these things that it's not doing it all but I'll just I'll do those eventually or something right and the reason that I find that it actually becomes important to do that is just that the amount of mental context that you build up when you're working on a piece of code doesn't come back immediately at least it doesn't for me if that code is at all complicated so like when I'm actually writing it for the first time or even you know whenever I'm opening up a piece of code in like working on this system or something my brain is the lot sharper at working on that system after I've been doing that for several days then if I pop back to it and now it's day one again of working on that system and so I find that actually I if I don't follow that advice I burn a lot of time INRI getting all of my context back if the changes that I have to make are at all non-trivial so nowadays much more than I used to I definitely tried to kind of like finish this code to the point where I don't think I need the mental context anymore and if it's just stuff that I can just go look if I pop back in here it's brutally obvious what I've been doing I need to optimize this loop there's no conceptual optimizations it's just some assembly language stuff really I'll put Cindy is't or something like this that's no problem right but if it's not that if it's like something where it's like no no there's conceptual optimizations that I probably need to make in order to make this thing run I now do them there if I know that I have to do them because otherwise I find I just burn all this time on otherwise that might not be what other people find but just the way I program it seems like it really is true that it ends up saving time in the end throw that out there fortunately I have one thing to add on there actually since nobody else jumped in there's a secondary reason to do that that relates to a topic we had earlier which is just you know we all we all make stuff and we feel like it's crappy a lot of the time right and a lot of the reason we feel like it's crappy is because we took all these shortcuts get it go I mean that's my programming philosophy right is like get it running as quickly as possible so I will very deliberately take a large number of shortcuts where you could like it looks like a wall but you can kick through it because it's paper right yeah and you know that you have to come back and do that later and at some point that affects your picture of what you're making right because in the beginning it's like oh I'm gonna make an amazing thing that's gonna do all this right and then after a while it's like oh I've been making this crappy thing of all these shortcuts that don't really do and and they pile up and eventually at least for me and I think for a lot of people your morale changes like oh this thing I'm working on it's not that good right and then combined with all the factors we were talking about before about how it just can be so hard to just keep going right that this becomes a barrier at least for me and so for example with the compiler I've taken a great deal of joy and just like stopping and like you know what okay cool I've done a lot of good work to this point I'm gonna go back now and you know refine these couple of areas to a much greater degree than I need to like I'm just gonna do it really I'm gonna go chase all the corners of this yeah and I'm gonna be really proud of what I did and I'll use the demos to do that like okay I'm gonna demo in a week everything I do from now till then I can already demo right right but I'm just gonna harden all that stuff right and at the end of that I feel really good about what I did yes because it's quality now yes it's not you know it's not just a thing that's gonna collapse as soon as I turn that way yeah so and and then that helps me keep going yeah so I should have said that earlier well but it's it's an interesting sort of trade-off - because it's like overdoing things is definitely a problem in programming as well so you're constantly in the stand of like am I going to am i over building a system and so I think it's important to eventually riu know learn that there's a difference between adding stuff to a system and making the system good like they're totally unrelated right it's like adding features or thinking that it's gonna do more do whatever is a separate part and that's the thing you want to kind of limit like only do the things you actually you know need to do but then the like quality part is like a separate access and you kind of do want to go down that one more than oftentimes I think you might but we have different styles - right so like if I if I were doing handmade hero right I would not do the environment I don't do this on handmade here yeah between what we do like you you went and did like I'm building the technical infrastructure for the game because I want to build a what I would do in that case is I would have gone and you know just done the lowest effort things possible to get things on the screen and then elaborated them right so those are two different approaches and I'm not I see I see what you work on and I'm like I would have done that later right but you know it's not to say that one is better than the other or like it's even you know it's down to your personality as a programmer you have to do the best thing for you but what's the best thing for you also changes with time and winning the project it is so like the stop and work hard and make a piece of it high quality is almost the exact opposite advice of like don't rathole writings and but both of those are correct advice at different times in different contexts and part of being a really good programmer is knowing when to swap in one piece of advice for another or you do a blend of like thirty percent this advice to 70 percent this advice your face makes and that's why new people can get really confused I I still don't feel like it's the kind of thing that I'll probably ever not mess up or at least not know if I'm messing up right like you know maybe this system shouldn't have been done this way or at this time or whatever so I I don't know necessarily if it ever gets perfected in terms of allowing your experience to inform those things but you know unless you're literally working on something that you've you totally have done before and just know this is exactly the order to do it in or something like that one other thing that's funny is this also happens in design where like I have a lot of ideas about how what's a good game design for me or for a particular game right but then there's other ideas that come into play at different contexts in different times so like someone on the team will be asking me how something should be and I'll be like you know most of the time I'll say this one thing and then one day I'll like say a completely opposite thing because now the situation is and I feel you know like there's this stereotype of like the flaky designer who just says random crap that nobody you know pre-madonna just like has ideas out of nowhere and expects you to do them but it's actually it's if they're a good designer was actually something very similar at play where you cross some invisible boundary where before one thing was appropriate and now a different thing is appropriate and we don't know exactly when that was crossed but it has had and now what we're doing is different in this one piece right so it's just you know if someone asks you how do you design a game you have to actually plug them into the matrix and do the thing because it's not it's not that simple to say how to do it right as you have to give them the BSP tree of all these weird lines where you cross this one and now this other thing and it's a multi-dimensional space and whatever and mine doesn't agree with anyone elses model anyway okay so you're basically just saying like yeah okay I've got this complex set of internal sort of trade offs I can move the as the design moves around the actual practical thing I'm going to tell somebody needs to get done that the game is gonna change sometimes I just cross that some boundary where it's like okay this thing I told you and was very serious about yesterday needing to be in this game Tilly doesn't need to be in this game this other thing does now I realize that sounds nuts but yeah trust me there is a very sane logical process that occurred internally that I just can't describe and I don't do that too often right I've done it simulator yeah so that so then the last thing to make that make more sense is like the technical version of that does exist right and so in the large like the Chris butcher asset system thing which was like the technical version of that but played out at a much longer time scale where you can see the reason right like oh we were doing this thing but had these drawbacks that we didn't anticipate and because of that reason the right decision is now diff different right so it's the same thing it's just a lot harder to see cuz it's subjective right with game design being something that you can't say is absolutely why are there 15 mega tasks is not a game design but but then you know as it becomes more subjective in the technical realm to like how how should the handmade hero Engine be right well a lot of things and you might change your mind tomorrow about something right okay so I don't know how we're doing on time here we have 15 minutes left I think I'm gonna not talk for the rest of the 15 minute that's it okay all right so these questions cannot be directed at John anyway this one's for Pat it said regarding the prevention of cheating how much is it I figured we were little heavy there in our in our sort of psycho psychology psychology for a second there so this is totally concrete regarding the prevention of cheating how much of a difference does encrypting gameplay network traffic realistically make I often hear it as important but it seems to me it would only catch the lowest hanging fruit so first I'd say that the thing you're doing for encryption is you're actually preventing people's personal data from being stolen if they're playing in a cafe is the primary motivation for everything if you want to cheat in games there's lots of ways to do it so I mean first I'm going to separate like console games from PC games so a console games it's much harder to cheat because it's hard to inject code into the console I mean some really smart people have managed to figure out exploits for Xbox and Playstation but by-and-large really tough and then the risk is if you do that and get caught then your Xbox gets bricked and you can't play anymore and your accounts wiped out so encryption you know it can be useful for console games but for PC games it's actually not really good anti cheat mechanism because what happens is the game client is already running in an on trust for the environment and all I need to do is break open my create remote thread inject some code into the process space and like discover where the network code is and start sending messages you know as if I was the game client so encryption doesn't save you at all so I would say that you should do it but it's for a different reason so basically Krypton is for keeping the stuff that the user knows themselves from being snooped in route but other than that it does nothing so here is a question for everybody I guess except John because he has opted out of a further question witness I could ask one so this question is when debugging your code are there obvious shortcomings in the debugger as you use and are there any uh you sure you don't want to talk with this are there any obvious things that debuggers should do to make debugging easier this is a question that is apparently everyone thinks immediately tons of people will have tons of answers for based on the laughter so I apologize out there the people who write debuggers yeah so what calm 10-point Oh back in the DOS 4gw days actually was really powerful and you could run like a short script so that like breakpoint a would hit and it would run a script and look at some stuff and then set breakpoint B so you could catch League these really esoteric bugs that only happened in certain states and I'm still waiting for a visual studio to do something to make that process easy yeah I don't think they have any way to script a break point do they have scripts yeah you can write code to do that like sort of aftermarket and set debug registers and things but it's like you're gonna have this bug that I'm currently trying to track down and I know there are ways around this but it's a bug that only happens when the game is running in full-screen mode and that becomes very difficult to debug because I can't actually step through my code I can't look at stuff because we're in full-screen mode so you [Laughter] so literally some way to just overlay the text on the screen but some yeah I feel like for laptop work that would make a lot of sense in general reminder what yeah when you're working on a laptop and you're doing stuff it's very difficult to to debug in full-screen mode so lens Minds very quick and it might be a thing but I haven't really looked into it too much you know data breakpoints now come in the watch window I can't right click and hit watch watch the data right there why can't I do that why do I have to copy it and paste it and then kill all the stuff that's also in the watch row to make the data breakpoint it's so irritating like why isn't that a thing I used like for things in Visual Studio and that's the one thing I want yeah you used to at least be able to drag a break point from line to line you can yeah don't don't expect a new function no no I I I copy and paste it's fine we could re-request old so this one I think is a possibly a little tough because I'm not sure I guess I have addressed to everyone and the question is what are the costs and benefits of shipping a mod API or level editor with a game I guess well you know what actually no Warcraft at all we're doing that yeah we're crafting mr. craft had love letters yeah okay so I don't know like you know people make these trivial little add-ons like dota I'm sorry watch which add-on so did you want to say the cost/benefit yeah well I mean you know it's funny because like clearly other companies have benefited hugely right like valve and and Riot Games have made big hey on making new versions of that game but but also Warcraft 3 probably got a lot of users that were playing extensively for really long periods of time because of the extended play value of the game because people were coming up with new ideas all the time and certainly you know valve has made a really successful game business out of like taking the mods that people have created in and like really seeing them which is kind of funny because back in I don't know maybe 2002 or something like that there was a bunch of us playing CS Kirk beta we're like now you know everybody who wants to play this game has probably already downloaded it nobody's ever gonna pay money to valve to release this game and you know I turned it to be totally wrong on that one so so I think there's huge value in doing level editors if you have the time you're in your development schedule I guess one thing I would ask about that is is that really level editor or does that have to go all the way to mod because I'm just thinking about the the things because he sort of said mod or level editor and that they're kind of grouped together there but I'm just thinking in terms of finer detail it seems like a lot of that value that you're talking about like for example that valve gets out of the you know pulling mods into into there you know sort of business model or whatever or the you know Warcraft spawning sort of these other lineages those seem to be mostly if you can actually change what the game is right which is not really quite the same as level editor so I wonder is perhaps there a big difference between the value in doing full mod support versus just level editor and maybe like level editor isn't so useful but mod support definitely is or you know I'm saying like I wonder if there's actually a pretty big difference between going all the way and only going part of the way in terms of allowing the game to sort of be customized in that way yeah well in as much as Warcraft who didn't really spawn any derivative games because yeah Warcraft 3 did because it was a yeah you know like I guess you could argue that mods are a better strategy Tommy do you have super meatboy at the PC ship 12 in ship with it but which is which is the the mistake is don't promise stuff after because you're not gonna want to do it so so but I think more than you know are mods more valuable than level letters based on the like the context of the game so with meatboy when we did when when I did the editor and I put the editor out there people made seventy four hundred levels and that just had people just constantly playing the game which you know just had constant attention there were weekly levels that people were making and I can't say if I actually made any money off of that but what it did is it did get a whole bunch of people excited about creating for the game so I think in that way for meatboy it works is just a love letter I don't think I needed to go deeper into mods like make it so Meat Boy has a gun and you can like make an entire different game I don't think it would have really added much to the game because you know with meatboy a lot of what made it great is the stuff that you couldn't do so you know you couldn't make weird little slopey levels that you know have all these rolling hills and stuff because it was just tiles and what people did is they took that and they creatively found ways to make new kinds of levels and stuff and I think I think in that way that you know that added some sort of something that engaged people to the game so mod or no just kind of context so I guess question about that it did say costs and benefits kind of thing obviously benefit to that doesn't have to be monetary right in a sense it could be just like I wanted to have those extra people make those maps I mean yeah I wanted in the you know as my vision for what this is so the benefit doesn't necessarily have to matter could be anything I suppose yeah I just wanted us about the cost part because that's something that people haven't really talked about yet in the answer it's just that okay so let's say we do have this benefit that we want or that we're thinking of what about the cost part of shipping that right because you kind of touched a little bit there it's like I promised it now yeah they're written so it's a it's a big undertaking potentially or I mean I'm just depending on what it was like the the reason it was a big undertaking for meatboy wasn't in like technical complexity or anything it was literally I don't want to work on this anymore and now I have to make it look pretty and I have to fix all the bugs in it that II didn't just he didn't place it there you know he didn't place that there but now I have to make it so people can place this thing here and it doesn't crash so and then after the crazy development cycle it was like well live life now I don't want to keep working on the stupid thing so yeah I I think though I mean having said that the games that I'm working on now that I want to put out I do want to put out the level editor at launch because if for no other reason I enjoyed seeing everything that everybody made I thought it was pretty cool yes and I think it helps with just a community in general because you know media is kind of garbage you know Twitter is kind of garbage you know you you want people to just play and be excited about your game and the way they can do that some of them at least is by making more of it so so this would get to a question that was asked during the break actually because it kind of touched on it there just incidentally the question was actually about something but jamun said earlier which means you may have to talk briefly just just I'm talking about like just a little bit yes or no or you can kind of blink it out John had said something earlier that was about like okay I had you know done something in particular and I was really burnt out from this and you know for doing things a certain way for too long or whatever and get really burnt out and he used I was at 20% and then what you know etc and the person asked a very interesting question which was how do you know what that even means in your head like ignore trying to quantify the 20 thank us obviously like what you know you can't but how do you know what it is to be you know I'm at my normal productivity or I'm like really close to bottom productivity you're like what quick how do you what what does that even mean is that just an experience thing or is that something that that look almost look if you were gonna say something I think is probably the number of times per hour then I open up Twitter yeah so we could quantify exactly really quantify yeah like three times an hour that's a good day yeah yeah yeah alright so number of Twitter checks per hour metric what is a number that would be good productivity how often would you check Twitter I mean literally was with Twitter right I have two factor authentication turned on and so I will in the morning I will log out of Twitter because it is such a pain to log back into Twitter because I have to get my cell phone out and or some crazy number and all those other stuff that that's kind of you know how I keep myself productive during the day is lock myself basically what you're saying is two-factor authentication is not a security I guess though if you were view if you follow me on Twitter and you don't hear from me during the day you know I'm the same way if you're not feeling it you're not gonna log out of Twitter so you can be logged into it and continue to be on Twitter so if you're if you're not feeling very productive like that morning when you're logging out of Twitter yeah so would you even go so far as to say that we could get productivity gains by moving to three all right Pat yeah I guess it's for me it's email right cuz it's like ooh there's fun stuff I can go and respond to people like I actually turn off email toast when I programming doesn't pop up it's like Oh a distraction that looks cool yeah and so in general you would know if you were kind of burned out if you're just kind of like spending all your time an email or that's ultimately if I don't really have any I wouldn't do what I'm doing you know let me hit Google again and again surely some of you have solved this problem before okay so basically searching for other people's answers rather than writing the answer yourself is a good sign that like you're not well and I suppose too because it's like that means you're not that excited about solving it yourself because you just want it to kind of be done and move on exactly how are we doing on time we got three minutes left alright so here is here is kind of I guess we'll do this on the the closing question because I think it's the only one that I can ask that would in no way require John to talk the question is what old school books did you like back when people still read books about programming or tech things in general and I guess we'll just go down I don't know if you've got any wrong well I mean I think my favorite tech book ever was just that big fat Commodore 64 manual that you know showed all the cool pecan poke locations and stuff it's just like come with no yeah ordered separately you didn't come with a ordered it separately and I just you talked about every aspect of the Machine and where all the memory values were and stuff and I think I mean I don't I don't really read a lot of stuff me even before the internet I didn't you know it was mostly just conversations with people but that one book so the good book was actually an AI programming book that I got when I was in college and it sort of demystified the whole idea of how a program like server the basics of depth-first and breadth-first searches and things I'm like because before then it's like I don't know you make the computer think and yeah it was really valuable to sort of demystify the whole process because I was still learning cooking then and the one that actually it was the reverse that was the KN RC book because it's like you know jumps into like print death and pointers and stuff it's like this isn't really helpful how do I do useful stuff without pointers right because you know coming from like a very beginning Pascal knowledge it's like there's all this weirdness in the language I don't know you just want to do something interesting first so I didn't find it to be very helpful book so the K in R was just like it was too focused on just like specific language these things they were doing they didn't really take the time to go like look here's sort of how you start doing things and see I didn't really read many programming books I had my one cue basic book but that was it it was it was on the Panasonic computer I had that was a laptop that was about 35 pounds Wow yeah it was really cool I had like a green screen and a built-in printer two things and it had a keyboard that went over and you would carry it and well you wouldn't carry it had a roll case because it was too heavy yeah that was like my first computer and it had a Q basic book and that's no it was kind of the only one I read can you just say the way I got into programming there was some books that came like in RadioShack the trs-80 color computer there was I just remember there were two books that like started with really simple exercises and you would go through I don't know if they were particularly good it was just like how I did it so and and you wouldn't use those to learn today no well maybe learn how to program the trs-80 all right well I think we're just about out of time so thanks so much for coming back and talking with us again this year [Applause]
Info
Channel: Molly Rocket
Views: 6,774
Rating: 5 out of 5
Keywords: Handmade Hero, HandmadeCon 2016
Id: _NmfCLssHuI
Channel Id: undefined
Length: 75min 14sec (4514 seconds)
Published: Mon Sep 25 2017
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.