[video output=day656 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Sketching Out Move Queues" vod_platform=youtube id=-GBFPHJbXFQ annotator=Miblo] [0:00][Recap and set the stage for the day][:speech] [0:44][The :audio tears and previously floating entities no longer move][:movement :run] [2:06][@thesandvichmaker][This poor tortured piano][:audio] [2:27][Toggle off the OutputPlayingSounds() call in GameGetSoundSamples()][:audio] [3:48][The music has gone][:audio] [3:56][Use #if 0 TEMPORARY][:language] [5:17][Hero hopping feels fine, just needing trailing-edge events][:movement :run] [6:38][Determine to move the glove with the hero, and sweep out a prescribed pattern upon attack][:movement :run] [9:47][Continue with the idea of a move queue][:"entity system" :movement :research] [10:51][Augment move_queue_entry with Damage and Speed][:"data structure" :"entity system" :movement] [13:10][Determine to implement non-recallable glove attacks][:"entity system" :movement :research] [17:37][Consider after-touch, and chaining attacks][:"entity system" :movement :research] [18:26][Embark on attack patterns in ExecuteBrainHero(), changing Dest to Delta in move_queue_entry][:"data structure" :"entity system" :movement] [20:20][Thoughts on the game looking grid-based, but actually being arbitrary][:geometry :research] [21:10][Enable ExecuteBrainHero() to begin attacks in the correct direction][:"entity system" :movement] [28:39][Set up ExecuteBrainHero() to push attack patterns onto the move queue][:"entity system" :movement] [29:54][@notepaduser][enum is not in C][:language] [31:34][Enable ExecuteBrainHero() to push attack patterns onto the move queue (cont.)][:"entity system" :movement] [32:40][Consider chaining attacks together][:"entity system" :movement :research] [33:57][Augment entity with a MoveGroupCount to limit the attack chain length created by ExecuteBrainHero()][:"data structure" :"entity system" :movement] [36:28][Consider what constitutes the glove having "returned to hero"][:"entity system" :movement :research] [38:19][Consider item statistics][:"entity system" :research] [41:35][@notepaduser][Guys, if integers are more efficient than floats, should we make our int pointers point to decimal numbers?] [42:05][Consider item statistics (cont.)][:"entity system" :research] [43:26][Introduce stats][:"data structure" :"entity system"] [44:53][Consider how to articulate modifiable glove statistics][:"entity system" :run] [48:04][@frizi09][The glove has six slots for colorful stones, and if you fill them all, you can snap your fingers and half of the world dissolves] [48:45][Introduce move_square_type and stat_coeff for stats to use / contain][:"data structure" :"entity system"] [52:05][Introduce move_pattern][:"data structure" :"entity system"] [53:09][Consider status effects][:"entity system" :research] [56:42][Fill in move_pattern, introducing move_pattern_entry and move_queue_flag][:"data structure" :"entity system"] [1:00:26][@tk_dev][@handmade_hero Not to be disrespectful, but it seems you are not following your own advice right now. I would suggest you implement the moving in a corner and continue from there. Sorry] [1:00:34][Reflect on our stats and move_pattern sketch][:"entity system" :research] [1:01:48][Add a MoveFlag_Ephemeral to move_queue_flag][:"entity system"] [1:02:30][Reflect on our stats and move_pattern sketch (cont.)][:"entity system" :research] [1:04:19][Enable ExecuteBrainHero() to initialise attack patterns, augmenting move_pattern with an EntryCount][:"data structure" :"entity system"] [1:06:28][@rationalcoder][@tk_dev I had a similar thought, but you need some initial bullshit idea of structs and enums to start playing with usage code] [1:06:59][@sagian2005][I don't understand how the "pattern" is involved in the game play. Like, what is the function of a pattern?][:"entity system"] [1:08:33][@pileopoop][Like a chess move] [1:09:19][Enable ExecuteBrainHero() to translate attack patterns from their canonical orientation, to the requested one][:"entity system"] [1:13:14][Set up ExecuteBrainHero() to handle move queue overflow][:"entity system"] [1:14:02][Explore ~4coder's function prototype HUD][:admin] [1:15:59][Set up ExecuteBrainHero() to handle move queue overflow (cont.)][:"entity system"] [1:17:29][Set up ExecuteBrainHero() to limit move queue pushes to the MaxMoveGroupCount][:"entity system"] [1:18:35][Consider how / when to evaluate entity stats][:"entity system" :research] [1:19:53][@sagian2005][Should the "if" just be the assert?] [1:20:16][Consider how / when to evaluate entity stats (cont.)][:"entity system" :research] [1:23:15][Reacquaint ourselves with the game update loop in Simulate()][:research] [1:24:33][Consider how / when to evaluate entity stats (cont.)][:"entity system" :research] [1:27:20][Consider entity stats evaluation to be harder than the move queue][:"entity system" :research] [1:28:07][Use swappable hats to guide our entity stats evaluation considerations][:"entity system" :research] [1:34:00][Consider evaluating entity stats when adding to hash][:"entity system" :research] [1:35:29][Try making AddEntityToHash() recompute stats][:"entity system"] [1:37:30][Augment entity with BaseStats, ActiveStats and AccumStats][:"data structure" :"entity system"] [1:38:17][@thebaker__][Have you considered just dynamically calculating stats based off the current modifiers?][:"entity system"] [1:40:35][@thebaker__][Well that way they just never get stale][:"entity system"] [1:43:49][Reacquaint ourselves with our ATan2() calls][:mathematics :research] [1:44:56][Rename the entity struct's ActiveStats and AccumStats to Stats and StatsAccum][:"data structure" :"entity system"] [1:46:56][Introduce AdvanceEntityStats() for AddEntityToHash() to call][:"entity system"] [1:48:04][Augment stats with Speed, for ExecuteBrainHero() to use][:"data structure" :"entity system"] [1:49:25][Finish making ExecuteBrainHero() push moves onto the queue][:"entity system"] [1:51:21][Make ExecuteBrainHero() consider the glove to be with the body if it is closer than 0.5 units away][:"entity system"] [1:52:55][TODO([@cmuratori casey]): Set a return move when there's no moves in the queue?][:"entity system"] [1:53:30][That's it for today][:speech] [/video]