Handmade Hero»Episode Guide
Preparing HHAs for Rewriting
?
?

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:04Recap and set the stage for the day continuing with asset loading
🗩
0:04Recap and set the stage for the day continuing with asset loading
🗩
0:04Recap and set the stage for the day continuing with asset loading
🗩
2:49Review CheckForArtChanges() with a few words on obtaining tagging information from filenames
📖
2:49Review CheckForArtChanges() with a few words on obtaining tagging information from filenames
📖
2:49Review CheckForArtChanges() with a few words on obtaining tagging information from filenames
📖
6:30Considering file deletion
🗩
6:30Considering file deletion
🗩
6:30Considering file deletion
🗩
9:29File system capabilities
🗩
9:29File system capabilities
🗩
9:29File system capabilities
🗩
14:31Finish walking through CheckForArtChanges() and ProcessTiledImport()
📖
14:31Finish walking through CheckForArtChanges() and ProcessTiledImport()
📖
14:31Finish walking through CheckForArtChanges() and ProcessTiledImport()
📖
18:03Asset tagging
🗩
18:03Asset tagging
🗩
18:03Asset tagging
🗩
20:55Change the Assets in game_assets to be expandable, implementing ReserveAsset()
20:55Change the Assets in game_assets to be expandable, implementing ReserveAsset()
20:55Change the Assets in game_assets to be expandable, implementing ReserveAsset()
35:23Implement WriteAssetData(), introducing WriteDataToFile()
35:23Implement WriteAssetData(), introducing WriteDataToFile()
35:23Implement WriteAssetData(), introducing WriteDataToFile()
37:42Set up to implement WriteAsset() considering our .hha file format
📖
37:42Set up to implement WriteAsset() considering our .hha file format
📖
37:42Set up to implement WriteAsset() considering our .hha file format
📖
40:34Enable AllocateGameAssets() to track asset locations in .hha files
40:34Enable AllocateGameAssets() to track asset locations in .hha files
40:34Enable AllocateGameAssets() to track asset locations in .hha files
42:56Consider either enabling .hha files to reference each other, or rewriting the header of a given .hha file on every asset edit
🗩
42:56Consider either enabling .hha files to reference each other, or rewriting the header of a given .hha file on every asset edit
🗩
42:56Consider either enabling .hha files to reference each other, or rewriting the header of a given .hha file on every asset edit
🗩
46:56Propose rewriting the entire header, and storing with each asset their type
🗩
46:56Propose rewriting the entire header, and storing with each asset their type
🗩
46:56Propose rewriting the entire header, and storing with each asset their type
🗩
50:09Introduce Win32WriteDataToFile()
50:09Introduce Win32WriteDataToFile()
50:09Introduce Win32WriteDataToFile()
53:22Remove WriteAsset() in favour of RewriteHHAHeader()
53:22Remove WriteAsset() in favour of RewriteHHAHeader()
53:22Remove WriteAsset() in favour of RewriteHHAHeader()
54:31Run the game to make sure it's fine
🏃
54:31Run the game to make sure it's fine
🏃
54:31Run the game to make sure it's fine
🏃
55:22Consider possibly changes to our .hha file to pair up assets with their types
🗩
55:22Consider possibly changes to our .hha file to pair up assets with their types
🗩
55:22Consider possibly changes to our .hha file to pair up assets with their types
🗩
59:31Temporarily change GetBestMatchAssetFrom() and AllocateGameAssets() to chain up assets of whatever type as a linked list
59:31Temporarily change GetBestMatchAssetFrom() and AllocateGameAssets() to chain up assets of whatever type as a linked list
59:31Temporarily change GetBestMatchAssetFrom() and AllocateGameAssets() to chain up assets of whatever type as a linked list
1:10:22Run the game to see that we didn't mess anything up
🏃
1:10:22Run the game to see that we didn't mess anything up
🏃
1:10:22Run the game to see that we didn't mess anything up
🏃
1:10:44Note our newfound ability to rewrite our .hha files at will and interleave our asset types, with a view to future improvements
1:10:44Note our newfound ability to rewrite our .hha files at will and interleave our asset types, with a view to future improvements
1:10:44Note our newfound ability to rewrite our .hha files at will and interleave our asset types, with a view to future improvements
1:12:42Consider establishing the concept of editable .hha files
🗩
1:12:42Consider establishing the concept of editable .hha files
🗩
1:12:42Consider establishing the concept of editable .hha files
🗩
1:15:06Add EditingHHAIndex to game_assets, fixing AllocateGameAssets() to assert FileIndex < Assets->FileCount
1:15:06Add EditingHHAIndex to game_assets, fixing AllocateGameAssets() to assert FileIndex < Assets->FileCount
1:15:06Add EditingHHAIndex to game_assets, fixing AllocateGameAssets() to assert FileIndex < Assets->FileCount
1:18:50Run the game to see that all is okay
🏃
1:18:50Run the game to see that all is okay
🏃
1:18:50Run the game to see that all is okay
🏃
1:19:00Make CheckForArtChanges() honour our EditingHHAIndex, and introduce RewriteHHADirectory()
1:19:00Make CheckForArtChanges() honour our EditingHHAIndex, and introduce RewriteHHADirectory()
1:19:00Make CheckForArtChanges() honour our EditingHHAIndex, and introduce RewriteHHADirectory()
1:21:49Rename EditingHHAIndex to DefaultAppendHHAIndex for ProcessTiledImport() to set for the first .hha file
1:21:49Rename EditingHHAIndex to DefaultAppendHHAIndex for ProcessTiledImport() to set for the first .hha file
1:21:49Rename EditingHHAIndex to DefaultAppendHHAIndex for ProcessTiledImport() to set for the first .hha file
1:26:42Add FileSize to asset_file
1:26:42Add FileSize to asset_file
1:26:42Add FileSize to asset_file
1:27:46Growable Data Storage
🖌
1:27:46Growable Data Storage
🖌
1:27:46Growable Data Storage
🖌
1:32:14“An artist's machine can write 2.5 MB before Photoshop can even select the lasso tool, not counting if you accidentally, heaven forfend, accidentally hit the "Open In Bridge" button, at which point you could rewrite all of the world's knowledge many times over to optical media and you would be done before Photoshop could even open its dialog box”α
🗩
1:32:14“An artist's machine can write 2.5 MB before Photoshop can even select the lasso tool, not counting if you accidentally, heaven forfend, accidentally hit the "Open In Bridge" button, at which point you could rewrite all of the world's knowledge many times over to optical media and you would be done before Photoshop could even open its dialog box”α
🗩
1:32:14“An artist's machine can write 2.5 MB before Photoshop can even select the lasso tool, not counting if you accidentally, heaven forfend, accidentally hit the "Open In Bridge" button, at which point you could rewrite all of the world's knowledge many times over to optical media and you would be done before Photoshop could even open its dialog box”α
🗩
1:32:38Overwriting tiny data with large data before rewriting the tiny data back out to the file
🖌
1:32:38Overwriting tiny data with large data before rewriting the tiny data back out to the file
🖌
1:32:38Overwriting tiny data with large data before rewriting the tiny data back out to the file
🖌
1:33:27Add HighWaterMark to asset_file for AllocateGameAssets() to set using a newly introduced RetractWarterMark()
1:33:27Add HighWaterMark to asset_file for AllocateGameAssets() to set using a newly introduced RetractWarterMark()
1:33:27Add HighWaterMark to asset_file for AllocateGameAssets() to set using a newly introduced RetractWarterMark()
1:46:28Implement ReserveData() and WriteModificationsToHHA()
1:46:28Implement ReserveData() and WriteModificationsToHHA()
1:46:28Implement ReserveData() and WriteModificationsToHHA()
1:56:55Q&A
🗩
1:56:55Q&A
🗩
1:56:55Q&A
🗩
1:57:28quote_corn_if_brother Q: Will you be making an editor for the engine?
🗪
1:57:28quote_corn_if_brother Q: Will you be making an editor for the engine?
🗪
1:57:28quote_corn_if_brother Q: Will you be making an editor for the engine?
🗪
1:57:41jixi85 Q: Did you mean to type it "retractwaRtermark"?
🗪
1:57:41jixi85 Q: Did you mean to type it "retractwaRtermark"?
🗪
1:57:41jixi85 Q: Did you mean to type it "retractwaRtermark"?
🗪
1:58:02Fix name of RetractWaterMark()
1:58:02Fix name of RetractWaterMark()
1:58:02Fix name of RetractWaterMark()
1:58:20enemymouse Q: I may have missed this, but where are you handling the growth of an existing asset. Presumably you'd still need to memcpy a huge portion of the bitmaps to insert new data or remove from the middle?
🗪
1:58:20enemymouse Q: I may have missed this, but where are you handling the growth of an existing asset. Presumably you'd still need to memcpy a huge portion of the bitmaps to insert new data or remove from the middle?
🗪
1:58:20enemymouse Q: I may have missed this, but where are you handling the growth of an existing asset. Presumably you'd still need to memcpy a huge portion of the bitmaps to insert new data or remove from the middle?
🗪
2:00:03cynicalape Q: I've probably missed this but why do we want to contiguously pack the bitmaps and the header?
🗪
2:00:03cynicalape Q: I've probably missed this but why do we want to contiguously pack the bitmaps and the header?
🗪
2:00:03cynicalape Q: I've probably missed this but why do we want to contiguously pack the bitmaps and the header?
🗪
2:02:21Brian Q: Is asset_file (or forgive me, whatever you've named the file) actually a file?
🗪
2:02:21Brian Q: Is asset_file (or forgive me, whatever you've named the file) actually a file?
🗪
2:02:21Brian Q: Is asset_file (or forgive me, whatever you've named the file) actually a file?
🗪
2:03:16enemymouse Q: Thanks, separate question, again from much earlier stuff I may have missed: What is the likelihood of a hash collision with the asset source names and do you handle that?
🗪
2:03:16enemymouse Q: Thanks, separate question, again from much earlier stuff I may have missed: What is the likelihood of a hash collision with the asset source names and do you handle that?
🗪
2:03:16enemymouse Q: Thanks, separate question, again from much earlier stuff I may have missed: What is the likelihood of a hash collision with the asset source names and do you handle that?
🗪
2:04:00gureitoro Q: Wouldn't keeping different files for different assets, and keeping another file just for the index be better for source control?
🗪
2:04:00gureitoro Q: Wouldn't keeping different files for different assets, and keeping another file just for the index be better for source control?
🗪
2:04:00gureitoro Q: Wouldn't keeping different files for different assets, and keeping another file just for the index be better for source control?
🗪
2:06:02ivereadthesequel Q: Are I/O puns off limits, cause I hope this question doesn't block! If you wouldn't mind, as you've often hailed it, what makes IOCP such a great API? How does it work better than other APIs?
🗪
2:06:02ivereadthesequel Q: Are I/O puns off limits, cause I hope this question doesn't block! If you wouldn't mind, as you've often hailed it, what makes IOCP such a great API? How does it work better than other APIs?
🗪
2:06:02ivereadthesequel Q: Are I/O puns off limits, cause I hope this question doesn't block! If you wouldn't mind, as you've often hailed it, what makes IOCP such a great API? How does it work better than other APIs?
🗪
2:08:57gureitoro Q: I was thinking on the direction of always having a running build on source control
🗪
2:08:57gureitoro Q: I was thinking on the direction of always having a running build on source control
🗪
2:08:57gureitoro Q: I was thinking on the direction of always having a running build on source control
🗪
2:09:45quickshift_ Q: When / where are you doing that Witness development presentation?
🗪
2:09:45quickshift_ Q: When / where are you doing that Witness development presentation?
🗪
2:09:45quickshift_ Q: When / where are you doing that Witness development presentation?
🗪
2:10:00ivereadthesequel Q: Quick follow up: Is that just a matter of using the one message queue for more than I/O or when you need to use multiple message queues?
🗪
2:10:00ivereadthesequel Q: Quick follow up: Is that just a matter of using the one message queue for more than I/O or when you need to use multiple message queues?
🗪
2:10:00ivereadthesequel Q: Quick follow up: Is that just a matter of using the one message queue for more than I/O or when you need to use multiple message queues?
🗪
2:15:28Close it down with a glimpse into the future tackling the tagging problem
🗩
2:15:28Close it down with a glimpse into the future tackling the tagging problem
🗩
2:15:28Close it down with a glimpse into the future tackling the tagging problem
🗩