Handmade Hero»Episode Guide
Opening Doors with Tiles
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:02Welcome to the stream
🗩
0:02Welcome to the stream
🗩
0:02Welcome to the stream
🗩
1:05Traverse the orphanage to our new dungeon door
🏃
1:05Traverse the orphanage to our new dungeon door
🏃
1:05Traverse the orphanage to our new dungeon door
🏃
3:29Our plan for doors: Q*bert style light-up tiles that unlock doors
🏃
3:29Our plan for doors: Q*bert style light-up tiles that unlock doors
🏃
3:29Our plan for doors: Q*bert style light-up tiles that unlock doors
🏃
4:01Light-up tile logic
🗩
4:01Light-up tile logic
🗩
4:01Light-up tile logic
🗩
6:50Create light-up door switch tiles, introducing brain_switches for brain_type to contain
6:50Create light-up door switch tiles, introducing brain_switches for brain_type to contain
6:50Create light-up door switch tiles, introducing brain_switches for brain_type to contain
10:40Introduce ExecuteBrainSwitches()
10:40Introduce ExecuteBrainSwitches()
10:40Introduce ExecuteBrainSwitches()
24:42Augment entity_traversable_point with a PrevOccupier for TransactionalOccupy() to set
24:42Augment entity_traversable_point with a PrevOccupier for TransactionalOccupy() to set
24:42Augment entity_traversable_point with a PrevOccupier for TransactionalOccupy() to set
33:18Traverse the orphanage
🏃
33:18Traverse the orphanage
🏃
33:18Traverse the orphanage
🏃
33:35Make ExecuteBrainSwitches() call TransactionalOccupy(), and handle switch state
33:35Make ExecuteBrainSwitches() call TransactionalOccupy(), and handle switch state
33:35Make ExecuteBrainSwitches() call TransactionalOccupy(), and handle switch state
36:51Rename IsEqual() to AreEqual()
36:51Rename IsEqual() to AreEqual()
36:51Rename IsEqual() to AreEqual()
38:22Make ExecuteBrainSwitches() depress the switches
38:22Make ExecuteBrainSwitches() depress the switches
38:22Make ExecuteBrainSwitches() depress the switches
39:06Make GenerateRoom() initialise a RoomSwitchBrain using AddBrain()
39:06Make GenerateRoom() initialise a RoomSwitchBrain using AddBrain()
39:06Make GenerateRoom() initialise a RoomSwitchBrain using AddBrain()
47:05Our large garden lacks a colourised tile
🏃
47:05Our large garden lacks a colourised tile
🏃
47:05Our large garden lacks a colourised tile
🏃
49:29Step into our tile colourisation path in GenerateRoom()
🏃
49:29Step into our tile colourisation path in GenerateRoom()
🏃
49:29Step into our tile colourisation path in GenerateRoom()
🏃
50:17Large orphanage rooms contain a colourised tile
🏃
50:17Large orphanage rooms contain a colourised tile
🏃
50:17Large orphanage rooms contain a colourised tile
🏃
50:51Make GenerateRoom() colourise our test tile faintly and add a room switch on it
50:51Make GenerateRoom() colourise our test tile faintly and add a room switch on it
50:51Make GenerateRoom() colourise our test tile faintly and add a room switch on it
54:12Hit a read access violation upon occupying our test switch
🏃
54:12Hit a read access violation upon occupying our test switch
🏃
54:12Hit a read access violation upon occupying our test switch
🏃
54:42Make ExecuteBrainSwitches() colourise occupied switches
54:42Make ExecuteBrainSwitches() colourise occupied switches
54:42Make ExecuteBrainSwitches() colourise occupied switches
57:05Traverse the orphanage
🏃
57:05Traverse the orphanage
🏃
57:05Traverse the orphanage
🏃
57:46Make ExecuteBrainSwitches() only process occupation for a valid Unlock
57:46Make ExecuteBrainSwitches() only process occupation for a valid Unlock
57:46Make ExecuteBrainSwitches() only process occupation for a valid Unlock
58:06Our switches toggle on, but the snakes can also toggle (and get trapped on) them
🏃
58:06Our switches toggle on, but the snakes can also toggle (and get trapped on) them
🏃
58:06Our switches toggle on, but the snakes can also toggle (and get trapped on) them
🏃
1:00:25Check the door creation logic in GenerateRoom()
📖
1:00:25Check the door creation logic in GenerateRoom()
📖
1:00:25Check the door creation logic in GenerateRoom()
📖
1:03:07Doors open before we've landed on their switch
🏃
1:03:07Doors open before we've landed on their switch
🏃
1:03:07Doors open before we've landed on their switch
🏃
1:04:01Make GenerateRoom() create more test door switches
1:04:01Make GenerateRoom() create more test door switches
1:04:01Make GenerateRoom() create more test door switches
1:05:17Our squares of switches work great
🏃
1:05:17Our squares of switches work great
🏃
1:05:17Our squares of switches work great
🏃
1:06:42Make ExecuteBrainSwitches() spring the switches back up (but remain lit) when their occupier departs
1:06:42Make ExecuteBrainSwitches() spring the switches back up (but remain lit) when their occupier departs
1:06:42Make ExecuteBrainSwitches() spring the switches back up (but remain lit) when their occupier departs
1:08:30Our switches spring back up after occupation
🏃
1:08:30Our switches spring back up after occupation
🏃
1:08:30Our switches spring back up after occupation
🏃
1:08:58Possibly flawed door unlocking when a door and its switches aren't in the same sim region
🏃
1:08:58Possibly flawed door unlocking when a door and its switches aren't in the same sim region
🏃
1:08:58Possibly flawed door unlocking when a door and its switches aren't in the same sim region
🏃
1:10:12Make ExecuteBrainSwitches() only partially submerge opened doors and unlock them once
1:10:12Make ExecuteBrainSwitches() only partially submerge opened doors and unlock them once
1:10:12Make ExecuteBrainSwitches() only partially submerge opened doors and unlock them once
1:11:53We do have an already opened door
🏃
1:11:53We do have an already opened door
🏃
1:11:53We do have an already opened door
🏃
1:13:23Consider how to make brains work across sim regions
📖
1:13:23Consider how to make brains work across sim regions
📖
1:13:23Consider how to make brains work across sim regions
📖
1:15:17Add a GenEntity_IsSwitch and introduce PlaceTilePattern() for GenerateRoom() to use
1:15:17Add a GenEntity_IsSwitch and introduce PlaceTilePattern() for GenerateRoom() to use
1:15:17Add a GenEntity_IsSwitch and introduce PlaceTilePattern() for GenerateRoom() to use
1:20:53Our door switches now don't fully work
🏃
1:20:53Our door switches now don't fully work
🏃
1:20:53Our door switches now don't fully work
🏃
1:22:45Make PlaceTilePattern() chain switch tiles together
1:22:45Make PlaceTilePattern() chain switch tiles together
1:22:45Make PlaceTilePattern() chain switch tiles together
1:27:18Hit our assertion in Layout()
🏃
1:27:18Hit our assertion in Layout()
🏃
1:27:18Hit our assertion in Layout()
🏃
1:27:46Make PlaceTilePattern() produce fewer switch tiles
1:27:46Make PlaceTilePattern() produce fewer switch tiles
1:27:46Make PlaceTilePattern() produce fewer switch tiles
1:28:09Hit our assertion in Layout()
🏃
1:28:09Hit our assertion in Layout()
🏃
1:28:09Hit our assertion in Layout()
🏃
1:28:22Step through PlaceRoomAlongEdge()
🏃
1:28:22Step through PlaceRoomAlongEdge()
🏃
1:28:22Step through PlaceRoomAlongEdge()
🏃
1:29:20Temporarily compile out PlaceTilePattern()
1:29:20Temporarily compile out PlaceTilePattern()
1:29:20Temporarily compile out PlaceTilePattern()
1:29:29Do not hit that assertion in Layout()
🏃
1:29:29Do not hit that assertion in Layout()
🏃
1:29:29Do not hit that assertion in Layout()
🏃
1:30:09Investigate our assertion hit in Layout()
📖
1:30:09Investigate our assertion hit in Layout()
📖
1:30:09Investigate our assertion hit in Layout()
📖
1:35:29Prevent PlaceTilePattern() from using Entropy
1:35:29Prevent PlaceTilePattern() from using Entropy
1:35:29Prevent PlaceTilePattern() from using Entropy
1:35:52No longer hit that assertion in Layout(), but now hit the Query.Found one in GenerateRoom()
🏃
1:35:52No longer hit that assertion in Layout(), but now hit the Query.Found one in GenerateRoom()
🏃
1:35:52No longer hit that assertion in Layout(), but now hit the Query.Found one in GenerateRoom()
🏃
1:36:15Inspect our EntityGroup
🏃
1:36:15Inspect our EntityGroup
🏃
1:36:15Inspect our EntityGroup
🏃
1:36:58Investigate our Query.Found assertion hit in GenerateRoom()
📖
1:36:58Investigate our Query.Found assertion hit in GenerateRoom()
📖
1:36:58Investigate our Query.Found assertion hit in GenerateRoom()
📖
1:40:01Step in to PlaceTilePattern() and watch AllowedDirectionsForNext
🏃
1:40:01Step in to PlaceTilePattern() and watch AllowedDirectionsForNext
🏃
1:40:01Step in to PlaceTilePattern() and watch AllowedDirectionsForNext
🏃
1:41:46Make PlaceTilePattern() set AllowedDirectionsForNext for every Tile
1:41:46Make PlaceTilePattern() set AllowedDirectionsForNext for every Tile
1:41:46Make PlaceTilePattern() set AllowedDirectionsForNext for every Tile
1:42:02No longer hit that Query.Found assertion in GenerateRoom()
🏃
1:42:02No longer hit that Query.Found assertion in GenerateRoom()
🏃
1:42:02No longer hit that Query.Found assertion in GenerateRoom()
🏃
1:42:21Our chained switches now work
🏃
1:42:21Our chained switches now work
🏃
1:42:21Our chained switches now work
🏃
1:43:10Plan to turn the switch chains into a list
1:43:10Plan to turn the switch chains into a list
1:43:10Plan to turn the switch chains into a list
1:43:48khrob Q: Is it worth having the renderer check if it’s running in debug mode or not, and dropping the number of lighting samples to make it more playable? Or is having code behave differently in debug and release modes a bad idea? (I know we’re not in Q&A yet, but I've gotta bounce)
🗪
1:43:48khrob Q: Is it worth having the renderer check if it’s running in debug mode or not, and dropping the number of lighting samples to make it more playable? Or is having code behave differently in debug and release modes a bad idea? (I know we’re not in Q&A yet, but I've gotta bounce)
🗪
1:43:48khrob Q: Is it worth having the renderer check if it’s running in debug mode or not, and dropping the number of lighting samples to make it more playable? Or is having code behave differently in debug and release modes a bad idea? (I know we’re not in Q&A yet, but I've gotta bounce)
🗪
1:45:04vaualbus Q: Why is MSVC's #pragma optimize("something", on/off) on that file hard?
🗪
1:45:04vaualbus Q: Why is MSVC's #pragma optimize("something", on/off) on that file hard?
🗪
1:45:04vaualbus Q: Why is MSVC's #pragma optimize("something", on/off) on that file hard?
🗪
1:45:48longboolean Q: So if I am following you correctly, this door / switch stuff only allows for switches to trigger doors that are in the same room, or can this work for triggering things in other / multiple rooms, etc?
🗪
1:45:48longboolean Q: So if I am following you correctly, this door / switch stuff only allows for switches to trigger doors that are in the same room, or can this work for triggering things in other / multiple rooms, etc?
🗪
1:45:48longboolean Q: So if I am following you correctly, this door / switch stuff only allows for switches to trigger doors that are in the same room, or can this work for triggering things in other / multiple rooms, etc?
🗪
1:48:04clb931 Could you turn it on then wrap the entire compilation unit in a pragma (turning it off) then turn it on when you need it?
🗪
1:48:04clb931 Could you turn it on then wrap the entire compilation unit in a pragma (turning it off) then turn it on when you need it?
🗪
1:48:04clb931 Could you turn it on then wrap the entire compilation unit in a pragma (turning it off) then turn it on when you need it?
🗪
1:49:12Thank you, everyone
🗩
1:49:12Thank you, everyone
🗩
1:49:12Thank you, everyone
🗩