Randomized Overworld Layout
?
?

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:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
0:00Recap and set the stage for the day
🗩
1:08Demo our randomly generated dungeon placement
🏃
1:08Demo our randomly generated dungeon placement
🏃
1:08Demo our randomly generated dungeon placement
🏃
2:17Pull up the original Legend of Zelda map1
📖
2:17Pull up the original Legend of Zelda map1
📖
2:17Pull up the original Legend of Zelda map1
📖
3:20Note the proximity-ordered placement of dungeons in The Legend of Zelda2
📖
3:20Note the proximity-ordered placement of dungeons in The Legend of Zelda2
📖
3:20Note the proximity-ordered placement of dungeons in The Legend of Zelda2
📖
4:09Recap our plan to make each dungeon increase in difficulty as you go deeper into them
📖
4:09Recap our plan to make each dungeon increase in difficulty as you go deeper into them
📖
4:09Recap our plan to make each dungeon increase in difficulty as you go deeper into them
📖
5:21Consider how to motivate exploration of our overworld
📖
5:21Consider how to motivate exploration of our overworld
📖
5:21Consider how to motivate exploration of our overworld
📖
6:35Note the Legend of Zelda's difficulty cues that motivate overworld exploration
📖
6:35Note the Legend of Zelda's difficulty cues that motivate overworld exploration
📖
6:35Note the Legend of Zelda's difficulty cues that motivate overworld exploration
📖
8:24Why would you care about how you are traversing things?
📖
8:24Why would you care about how you are traversing things?
📖
8:24Why would you care about how you are traversing things?
📖
8:52hniojnuoujbnh If you think C++ is bad and C better, then why don't you just use C instead of C++?
🗪
8:52hniojnuoujbnh If you think C++ is bad and C better, then why don't you just use C instead of C++?
🗪
8:52hniojnuoujbnh If you think C++ is bad and C better, then why don't you just use C instead of C++?
🗪
9:44Why would you care about how you are traversing things? (cont.)
📖
9:44Why would you care about how you are traversing things? (cont.)
📖
9:44Why would you care about how you are traversing things? (cont.)
📖
10:50Exploration motivation ideas: 1) Enemy generators, with overlapping ranges
📖
10:50Exploration motivation ideas: 1) Enemy generators, with overlapping ranges
📖
10:50Exploration motivation ideas: 1) Enemy generators, with overlapping ranges
📖
14:29Exploration motivation ideas: 2) Temporary destruction of generators, which strengthen upon regenerating
📖
14:29Exploration motivation ideas: 2) Temporary destruction of generators, which strengthen upon regenerating
📖
14:29Exploration motivation ideas: 2) Temporary destruction of generators, which strengthen upon regenerating
📖
15:39radavandar So what you get in return for taking out a generator should be worth increasing the long-term difficulty
🗪
15:39radavandar So what you get in return for taking out a generator should be worth increasing the long-term difficulty
🗪
15:39radavandar So what you get in return for taking out a generator should be worth increasing the long-term difficulty
🗪
16:50wheeel Is there a way to tie the overworld difficulty to the dungeon difficulty system, or is it better to keep separate?
🗪
16:50wheeel Is there a way to tie the overworld difficulty to the dungeon difficulty system, or is it better to keep separate?
🗪
16:50wheeel Is there a way to tie the overworld difficulty to the dungeon difficulty system, or is it better to keep separate?
🗪
17:04Consider making multiple and different routes overlap different generators
🏃
17:04Consider making multiple and different routes overlap different generators
🏃
17:04Consider making multiple and different routes overlap different generators
🏃
19:39Consider using the dungeon generator for enemy generators
📖
19:39Consider using the dungeon generator for enemy generators
📖
19:39Consider using the dungeon generator for enemy generators
📖
20:12Augment world_room with a DebugColor for AddWorldRoom() to set
20:12Augment world_room with a DebugColor for AddWorldRoom() to set
20:12Augment world_room with a DebugColor for AddWorldRoom() to set
22:15Our orphanage outline is red
22:15Our orphanage outline is red
22:15Our orphanage outline is red
22:40Fix CreateOrphanage() to pass green to PlaceDebugMarker()
22:40Fix CreateOrphanage() to pass green to PlaceDebugMarker()
22:40Fix CreateOrphanage() to pass green to PlaceDebugMarker()
22:55With our green orphanage and yellow dungeons, plan to place red enemy generators
22:55With our green orphanage and yellow dungeons, plan to place red enemy generators
22:55With our green orphanage and yellow dungeons, plan to place red enemy generators
23:52tinspin By the way, is Handmade Hero going to get multiplayer?
🗪
23:52tinspin By the way, is Handmade Hero going to get multiplayer?
🗪
23:52tinspin By the way, is Handmade Hero going to get multiplayer?
🗪
25:14Set up CreateForest() to generate enemy generators, augmenting world_generator with GeneratorCount and GeneratorLocations
25:14Set up CreateForest() to generate enemy generators, augmenting world_generator with GeneratorCount and GeneratorLocations
25:14Set up CreateForest() to generate enemy generators, augmenting world_generator with GeneratorCount and GeneratorLocations
29:04dandymcgee Your game design woes are the essence of my existence as a programmer. I feel your pain in my soul
🗪
29:04dandymcgee Your game design woes are the essence of my existence as a programmer. I feel your pain in my soul
🗪
29:04dandymcgee Your game design woes are the essence of my existence as a programmer. I feel your pain in my soul
🗪
29:33Consider specifying the notion that "these points in the world should have this many overlapping generators"
📖
29:33Consider specifying the notion that "these points in the world should have this many overlapping generators"
📖
29:33Consider specifying the notion that "these points in the world should have this many overlapping generators"
📖
31:25Introduce world_gen_location and world_gen_location_type, to replace DungeonLocations and GeneratorLocations in world_generator
31:25Introduce world_gen_location and world_gen_location_type, to replace DungeonLocations and GeneratorLocations in world_generator
31:25Introduce world_gen_location and world_gen_location_type, to replace DungeonLocations and GeneratorLocations in world_generator
35:14Update CreateDungeon() to use our new world_gen_location, introducing GetLocation()
35:14Update CreateDungeon() to use our new world_gen_location, introducing GetLocation()
35:14Update CreateDungeon() to use our new world_gen_location, introducing GetLocation()
37:47ponkkiz Anyone know if this error highlighting is public or is it Casey's own thing?
🗪
37:47ponkkiz Anyone know if this error highlighting is public or is it Casey's own thing?
🗪
37:47ponkkiz Anyone know if this error highlighting is public or is it Casey's own thing?
🗪
38:17Introduce GetClosestLocationTo() and GetClosestDistanceTo() for CreateDungeons() to use
38:17Introduce GetClosestLocationTo() and GetClosestDistanceTo() for CreateDungeons() to use
38:17Introduce GetClosestLocationTo() and GetClosestDistanceTo() for CreateDungeons() to use
43:53Set up CreateWorld() to call all the location creation functions, respecifying world_gen_location_type as plain ints rather than flags
43:53Set up CreateWorld() to call all the location creation functions, respecifying world_gen_location_type as plain ints rather than flags
43:53Set up CreateWorld() to call all the location creation functions, respecifying world_gen_location_type as plain ints rather than flags
48:36Rename CreateForest(), CreateOrphanage() and CreateDungeons() to Layout*(), and introduce CreateMonsterGenerator() and CreateItemRoom()
48:36Rename CreateForest(), CreateOrphanage() and CreateDungeons() to Layout*(), and introduce CreateMonsterGenerator() and CreateItemRoom()
48:36Rename CreateForest(), CreateOrphanage() and CreateDungeons() to Layout*(), and introduce CreateMonsterGenerator() and CreateItemRoom()
51:08Introduce PushLocation()
51:08Introduce PushLocation()
51:08Introduce PushLocation()
53:04Implement GetClosestLocationTo(), and make CreateWorld() push the orphanage location first
53:04Implement GetClosestLocationTo(), and make CreateWorld() push the orphanage location first
53:04Implement GetClosestLocationTo(), and make CreateWorld() push the orphanage location first
59:38Infinitely loop in our location placement code
🏃
59:38Infinitely loop in our location placement code
🏃
59:38Infinitely loop in our location placement code
🏃
59:50Scour our location placement code for problems
📖
59:50Scour our location placement code for problems
📖
59:50Scour our location placement code for problems
📖
1:01:34Enable GetClosestLocationTo() to handle exclusion types, introducing Matches() and FlagOf()
1:01:34Enable GetClosestLocationTo() to handle exclusion types, introducing Matches() and FlagOf()
1:01:34Enable GetClosestLocationTo() to handle exclusion types, introducing Matches() and FlagOf()
1:05:14Hit a write access violation
🏃
1:05:14Hit a write access violation
🏃
1:05:14Hit a write access violation
🏃
1:05:51Hit the Gen->LocationCount assertion in PushLocation()
🏃
1:05:51Hit the Gen->LocationCount assertion in PushLocation()
🏃
1:05:51Hit the Gen->LocationCount assertion in PushLocation()
🏃
1:05:59Fix LayoutOverworld() to increment PlacedDungeonCount(), relieving it of using dungeons as an exclusion type
1:05:59Fix LayoutOverworld() to increment PlacedDungeonCount(), relieving it of using dungeons as an exclusion type
1:05:59Fix LayoutOverworld() to increment PlacedDungeonCount(), relieving it of using dungeons as an exclusion type
1:06:19Run successfully in -Od
🏃
1:06:19Run successfully in -Od
🏃
1:06:19Run successfully in -Od
🏃
1:06:35Run successfully in -O2
🏃
1:06:35Run successfully in -O2
🏃
1:06:35Run successfully in -O2
🏃
1:06:47Consider generalising our half-annulus point-picking code
📖
1:06:47Consider generalising our half-annulus point-picking code
📖
1:06:47Consider generalising our half-annulus point-picking code
📖
1:09:07Drop frames
🗹
1:09:07Drop frames
🗹
1:09:07Drop frames
🗹
1:10:24Quick break
🗹
1:10:24Quick break
🗹
1:10:24Quick break
🗹
1:12:08Return and eyeball the dropped frames counter
🗹
1:12:08Return and eyeball the dropped frames counter
🗹
1:12:08Return and eyeball the dropped frames counter
🗹
1:13:35Introduce PickPointInAnnulus() and world_gen_annulus
1:13:35Introduce PickPointInAnnulus() and world_gen_annulus
1:13:35Introduce PickPointInAnnulus() and world_gen_annulus
1:22:46Our dungeons remain dispersed along a half-annulus
🏃
1:22:46Our dungeons remain dispersed along a half-annulus
🏃
1:22:46Our dungeons remain dispersed along a half-annulus
🏃
1:22:54Make LayoutOverworld() generate item rooms using PickPointInAnnulus()
1:22:54Make LayoutOverworld() generate item rooms using PickPointInAnnulus()
1:22:54Make LayoutOverworld() generate item rooms using PickPointInAnnulus()
1:24:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:24:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:24:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:24:59Fix LayoutOverworld() to strew items along a different annulus
1:24:59Fix LayoutOverworld() to strew items along a different annulus
1:24:59Fix LayoutOverworld() to strew items along a different annulus
1:25:34We now have item rooms, but can still hit our max iteration assertion in PickPointInAnnulus()
🏃
1:25:34We now have item rooms, but can still hit our max iteration assertion in PickPointInAnnulus()
🏃
1:25:34We now have item rooms, but can still hit our max iteration assertion in PickPointInAnnulus()
🏃
1:26:02Consider improvements to PickPointInAnnulus()
📖
1:26:02Consider improvements to PickPointInAnnulus()
📖
1:26:02Consider improvements to PickPointInAnnulus()
📖
1:27:29Switch PickPointInAnnulus() to use a random angle and distance, to discard fewer points
1:27:29Switch PickPointInAnnulus() to use a random angle and distance, to discard fewer points
1:27:29Switch PickPointInAnnulus() to use a random angle and distance, to discard fewer points
1:30:13Locations are placed behind the orphanage
🏃
1:30:13Locations are placed behind the orphanage
🏃
1:30:13Locations are placed behind the orphanage
🏃
1:30:42Augment world_generator with an OrphanageYLine for PickPointInAnnulus() to clip to, introducing IsInForest()
1:30:42Augment world_generator with an OrphanageYLine for PickPointInAnnulus() to clip to, introducing IsInForest()
1:30:42Augment world_generator with an OrphanageYLine for PickPointInAnnulus() to clip to, introducing IsInForest()
1:32:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:32:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:32:54Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:33:11Decrease MinDistFromExistingLoc from 40 to 20 for item rooms
1:33:11Decrease MinDistFromExistingLoc from 40 to 20 for item rooms
1:33:11Decrease MinDistFromExistingLoc from 40 to 20 for item rooms
1:33:17We successfully place locations
🏃
1:33:17We successfully place locations
🏃
1:33:17We successfully place locations
🏃
1:33:46Establish the notion of min distance from everything / specific, introducing world_gen_filter for world_gen_annulus to contain
1:33:46Establish the notion of min distance from everything / specific, introducing world_gen_filter for world_gen_annulus to contain
1:33:46Establish the notion of min distance from everything / specific, introducing world_gen_filter for world_gen_annulus to contain
1:34:59Enable PickPointInAnnulus() to apply our new world_gen_filter
1:34:59Enable PickPointInAnnulus() to apply our new world_gen_filter
1:34:59Enable PickPointInAnnulus() to apply our new world_gen_filter
1:39:53Locations may only be placed far from their same type but near different types
🏃
1:39:53Locations may only be placed far from their same type but near different types
🏃
1:39:53Locations may only be placed far from their same type but near different types
🏃
1:40:33Determine to add the monster generators
📖
1:40:33Determine to add the monster generators
📖
1:40:33Determine to add the monster generators
📖
1:41:49Make LayoutOverworld() generate enemy generators, augmenting world_gen_location with OverlappingGeneratorCount
1:41:49Make LayoutOverworld() generate enemy generators, augmenting world_gen_location with OverlappingGeneratorCount
1:41:49Make LayoutOverworld() generate enemy generators, augmenting world_gen_location with OverlappingGeneratorCount
1:52:45Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:52:45Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:52:45Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:52:52Temporarily decrease MinDist from 10 to 0 for the monster generator filter in LayoutOverworld()
1:52:52Temporarily decrease MinDist from 10 to 0 for the monster generator filter in LayoutOverworld()
1:52:52Temporarily decrease MinDist from 10 to 0 for the monster generator filter in LayoutOverworld()
1:53:02Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:53:02Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:53:02Hit our max iteration assertion in PickPointInAnnulus()
🏃
1:53:08Revert MinDist in LayoutOverworld()
1:53:08Revert MinDist in LayoutOverworld()
1:53:08Revert MinDist in LayoutOverworld()
1:53:27Try making LayoutOverworld() place monster generators at our annulus-dispersal centroids
1:53:27Try making LayoutOverworld() place monster generators at our annulus-dispersal centroids
1:53:27Try making LayoutOverworld() place monster generators at our annulus-dispersal centroids
1:53:56Crash on PushLocation()
🏃
1:53:56Crash on PushLocation()
🏃
1:53:56Crash on PushLocation()
🏃
1:54:03Scour our monster generator placement code for bugs
📖
1:54:03Scour our monster generator placement code for bugs
📖
1:54:03Scour our monster generator placement code for bugs
📖
1:54:26Hit our Gen->LocationCount assertion in PushLocation()
🏃
1:54:26Hit our Gen->LocationCount assertion in PushLocation()
🏃
1:54:26Hit our Gen->LocationCount assertion in PushLocation()
🏃
1:54:44Count up our locations
📖
1:54:44Count up our locations
📖
1:54:44Count up our locations
📖
1:55:11Make LayoutOverworld() add 1 to our MaxLocationCount for the orphanage
1:55:11Make LayoutOverworld() add 1 to our MaxLocationCount for the orphanage
1:55:11Make LayoutOverworld() add 1 to our MaxLocationCount for the orphanage
1:55:21Run successfully in -Od
🏃
1:55:21Run successfully in -Od
🏃
1:55:21Run successfully in -Od
🏃
1:55:27In -O2, our monster generators are all placed in the same location
🏃
1:55:27In -O2, our monster generators are all placed in the same location
🏃
1:55:27In -O2, our monster generators are all placed in the same location
🏃
1:55:52Try letting LayoutOverworld() place monster generators at the centroid of dungeons and item rooms without overlapping generators
1:55:52Try letting LayoutOverworld() place monster generators at the centroid of dungeons and item rooms without overlapping generators
1:55:52Try letting LayoutOverworld() place monster generators at the centroid of dungeons and item rooms without overlapping generators
1:57:21Our monster generators are placed better
🏃
1:57:21Our monster generators are placed better
🏃
1:57:21Our monster generators are placed better
🏃
1:57:35Desire random location picking for monster generators
📖
1:57:35Desire random location picking for monster generators
📖
1:57:35Desire random location picking for monster generators
📖
1:59:34Let LayoutOverworld() place monster generators along their annuli
1:59:34Let LayoutOverworld() place monster generators along their annuli
1:59:34Let LayoutOverworld() place monster generators along their annuli
1:59:53We have plenty more locations
🏃
1:59:53We have plenty more locations
🏃
1:59:53We have plenty more locations
🏃
2:00:10Increase MonsterGeneratorCount from between 12 and DungeonCount + ItemRoomCount in LayoutOverworld()
2:00:10Increase MonsterGeneratorCount from between 12 and DungeonCount + ItemRoomCount in LayoutOverworld()
2:00:10Increase MonsterGeneratorCount from between 12 and DungeonCount + ItemRoomCount in LayoutOverworld()
2:01:26Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:01:26Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:01:26Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:01:35Let LayoutOverworld() place monster generators around other monster generators
2:01:35Let LayoutOverworld() place monster generators around other monster generators
2:01:35Let LayoutOverworld() place monster generators around other monster generators
2:01:51Successfully place all locations
🏃
2:01:51Successfully place all locations
🏃
2:01:51Successfully place all locations
🏃
2:02:44Increase MinDist from 10 to 20 for the monster generator filter in LayoutOverworld()
2:02:44Increase MinDist from 10 to 20 for the monster generator filter in LayoutOverworld()
2:02:44Increase MinDist from 10 to 20 for the monster generator filter in LayoutOverworld()
2:02:53Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:02:53Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:02:53Hit our max iteration assertion in PickPointInAnnulus()
🏃
2:03:09Make PickPointInAnnulus() try 10× more points
2:03:09Make PickPointInAnnulus() try 10× more points
2:03:09Make PickPointInAnnulus() try 10× more points
2:03:20Successfully place all locations, with the determination to place paths next week
🏃
2:03:20Successfully place all locations, with the determination to place paths next week
🏃
2:03:20Successfully place all locations, with the determination to place paths next week
🏃
2:04:29Plug the Handmade Hero pre-order3 and Molly Movie Club4
📖
2:04:29Plug the Handmade Hero pre-order3 and Molly Movie Club4
📖
2:04:29Plug the Handmade Hero pre-order3 and Molly Movie Club4
📖
2:07:16That's about it
🗩
2:07:16That's about it
🗩
2:07:16That's about it
🗩
2:07:30technicbeam Saves me from having to watch Dune
🗪
2:07:30technicbeam Saves me from having to watch Dune
🗪
2:07:30technicbeam Saves me from having to watch Dune
🗪
2:07:34Take it easy, everybody
🗩
2:07:34Take it easy, everybody
🗩
2:07:34Take it easy, everybody
🗩