[video output=day485 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Adding Entity Placement to the World Generator" vod_platform=youtube id=2KeNcUTvVcs annotator=Miblo]
[0:04][Recap and set the stage for the day][:speech]
[0:40][:Run the game as a giant, misaligned cat, with a view to implementing the ability to place cats in the world][:"asset system" :"procedural generation"]
[8:00][Separating the world generation into room-generation and character-placement phases][:"procedural generation" :speech]
[13:32][Consider how to approach character-placement][:"procedural generation" :speech]
[17:20][Change the gen_orphanage struct to contain a single array of pointers to gen_room structs, and introduce PlaceCat()][:"procedural generation"]
[25:44][Thoughts on randomly picking a room from a list][:"procedural generation" :speech]
[28:10][Introduce gen_option struct as a store of character-placement criteria in rooms][:"procedural generation"]
[34:27][Introduce PushOption(), IterateOptions() and related functions for PlaceCat() to locate a room to place a cat][:"procedural generation"]
[49:55][Revert gen_orphanage to its original state, and introduce gen_entity, AddEntity(), PlaceEntity() and AddTag()][:"procedural generation"]
[58:34][Rename PushOption() and AddOption() and make CreateOrphanage() call it on various rooms we'd like cats to reside][:"procedural generation"]
[1:01:45][:Run the game and crash on the AddTag() call in CreateWorld()][:"procedural generation"]
[1:02:32][Fix AddOption() to put the option in the array][:"procedural generation"]
[1:03:22][:Run the game with our cats requested, but unplaced][:"procedural generation"]
[1:03:44][Introduce AddCat() based on AddMonstar() for GenerateRoom() to place requested cats][:"entity system" :"procedural generation"]
[1:17:00][:Run the game to see that cats are getting placed][:"entity system" :"procedural generation"]
[1:18:33][Make CreateWorld() place and tag each cat, Hannah, Fred and Molly][:"entity system" :"procedural generation"]
[1:20:32][:Run the game to see all three cats][:"entity system" :"procedural generation"]
[1:20:45][Add to the gen_entity struct a gen_create_entity function pointer for the Creator function][:"entity system" :"procedural generation"]
[1:24:00][Create handmade_entity_gen.cpp and .h to contain the entity generation code][:"entity system" :"procedural generation"]
[1:25:39][:Run the game with the placement phase in place][:"entity system" :"procedural generation"]
[1:26:06][Pop over to the entity construction phase, making AddCat() resize and elevate the cats][:"entity system"]
[1:27:27][:Run the game to see the more reasonably sized and positioned cats][:"entity system"]
[1:28:21][Make AddCat() elevate and shrink the head in comparison to the body][:"entity system"]
[1:30:00][:Run the game to see the more correctly placed cat][:"entity system"]
[1:31:25][Enable UpdateAndRenderEntities() to render ghosts with some transparency][:"entity system" :rendering]
[1:33:21][:Run the game to see translucent cats][:"entity system" :rendering]
[1:34:04][Set up to correlate incoming asset sizes with their resultant :rendering][:"asset system" :speech]
[1:39:47][Q&A][:speech]
[1:40:21][@Jim0_o][Q: Would / could you add the values of the cat pieces into the debug-data-list and from there drag the values to live edit the cats? (I think you already made those features long ago)][:"asset system"]
[1:40:37][@pulp_user][Q: Do you have a video where you talk in depth about the construction of Meow hash? I didn't find anything on YouTube]
[1:41:01][@bouke285][Q: Are you offended that we named our cat Muratori?]
[1:41:45][@jessef][Q: Could you talk about some of your plans on the :AI of entities and what options you're considering?][:"entity system"]
[1:43:06][@blastofcynicism][Q: Are you offended that they missed the opportunity to name the cat Purratori?]
[1:43:23][@vateferfout][Catsey Purratori is a great name]
[1:43:50][General thoughts on :AI vs arcade-style patterning in games][:speech]
[1:47:01][@joesweeney][Q: I'm watching from the beginning, and you're fairly optimistic in your expectations for the series saying you don't expect to be done for two years. What are some of the topics that have taken longer than you expected?]
[1:48:45][@xxthebigfoxx][Q: Sorry if I'm repeating the question from the pre-stream, but how would you approach redrawing of small parts of the screen, without having to redraw the whole thing in a non-immediate-mode GUI application?][:rendering :ui]
[1:50:29][@joesweeney][Q: Follow up, the goals you state are trying to inspire the next generation of game engine programmers. How successful do you feel the series has been on this front?]
[1:51:48][@toxificated][Q: Could you please explain again what does volatile do?][:language :threading]
[1:57:10][@pulp_user][Q: With the explaining Meow hash question, I aimed less at the implementation, but the thought process that goes on behind: Do you know a good resource to read up on how hashes are generally constructed, how you design them so they produce low collision rates, how you quality-check them, and so on?][:hashing]
[2:07:07][@quickshift_][Q: Do you happen to know how different is embedded C programming compared to "simple" C programming?][:language]
[2:08:26][@pajpiart][Q: Would adding a fund section on Handmade Network be a viable short-term solution? I for one would really really like to see CDbg get funded[ref
    site="Handmade Hero"
    page=Fund
    url=https://handmadehero.org/fund]]
[2:09:15][@toxificated][Q: I understand, thanks. I just wasn't sure because the wiki says: Do not use \[volatile\] for inter-thread communication][:threading]
[2:10:43][@lorymaster][Q: So a really good lossy compressor could be a decent hash function?][:hashing]
[2:11:04][@longboolean][Q: You mention many times that you are not a game designer and that it would be ideal if [@naysayer88 Jon Blow] would design the game. Do you plan on having him on in an episode or two to talk about gameplay related stuff, specifically related to the design of [~hero Handmade Hero]? If he has time, that is. He seems to be a very busy person and I imagine proper :"game design" does not just happen in a day or two]
[2:12:59][@mmozeiko][Q: There are attackers for non-crypto hashes: Hash table lookups can lead to denial-of-service attacks when the attacker can control data coming into the system (think web server)][:hashing :security]
[2:14:24][@uplinkcoder][Q: Meow hash is based on AES, right? So in a way it uses crypto-tech][:hashing :security]
[2:15:54][@pulp_user][Q: The smhasher GitHub repo[ref
    site=GitHub
    page="aappleby / smhasher"
    url=https://github.com/aappleby/smhasher] talks about percentages of bias and distribution for a hash. What do those mean?][:statistics]
[2:18:45][@iantjac][Q: [@naysayer88 Jonathan Blow] made an offhand remark that one should never use the stdio IO functions, but always use OS-specific IO functions. I do not know why, and I can't stop thinking about why it could be. Do you know what he could be talking about? Thanks][:"file io"]
[2:21:09][Thank you, everyone][:speech]
[/video]
