Writing the Asset File Header
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next timestamp
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 and Index Controls

a
w
s
d
h j k l


Esc Close menu / unfocus timestamp

Quotes and References Menus and Index

Enter Jump to timestamp

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:38Recap and plan for the day
0:38Recap and plan for the day
0:38Recap and plan for the day
2:27Bug determining when sounds finish playing
2:27Bug determining when sounds finish playing
2:27Bug determining when sounds finish playing
10:28Rearchitecting the mixing loop to avoid this sort of bug. Removing a secondary variable to avoid having to keep it in sync
10:28Rearchitecting the mixing loop to avoid this sort of bug. Removing a secondary variable to avoid having to keep it in sync
10:28Rearchitecting the mixing loop to avoid this sort of bug. Removing a secondary variable to avoid having to keep it in sync
12:16On the importance of assertions
12:16On the importance of assertions
12:16On the importance of assertions
13:41Write assertions to catch the kind of errors that you tend to make
13:41Write assertions to catch the kind of errors that you tend to make
13:41Write assertions to catch the kind of errors that you tend to make
15:36Back to the test asset builder
15:36Back to the test asset builder
15:36Back to the test asset builder
21:01Trick to avoid modifying lots of code to reflect the change of a variable from object to pointer
21:01Trick to avoid modifying lots of code to reflect the change of a variable from object to pointer
21:01Trick to avoid modifying lots of code to reflect the change of a variable from object to pointer
26:03Data that we want to include in the asset file
26:03Data that we want to include in the asset file
26:03Data that we want to include in the asset file
27:52Pragma-packing the file format structures
27:52Pragma-packing the file format structures
27:52Pragma-packing the file format structures
28:45The hha header and its magic value
28:45The hha header and its magic value
28:45The hha header and its magic value
33:44Overview of the structure of the asset file
33:44Overview of the structure of the asset file
33:44Overview of the structure of the asset file
38:40Using offsets and counts to access asset content
38:40Using offsets and counts to access asset content
38:40Using offsets and counts to access asset content
44:40Writing the header from the test asset builder
44:40Writing the header from the test asset builder
44:40Writing the header from the test asset builder
46:06Two ways of computing the offsets of tags, asset types, and assets
46:06Two ways of computing the offsets of tags, asset types, and assets
46:06Two ways of computing the offsets of tags, asset types, and assets
50:56Streaming files mini-rant (extended in the first question of the Q&A)
50:56Streaming files mini-rant (extended in the first question of the Q&A)
50:56Streaming files mini-rant (extended in the first question of the Q&A)
52:51Writing out the arrays
52:51Writing out the arrays
52:51Writing out the arrays
58:42Stepping through the code
58:42Stepping through the code
58:42Stepping through the code
1:06:05Hex editing the resulting file
1:06:05Hex editing the resulting file
1:06:05Hex editing the resulting file
1:07:35Q&A
🗩
1:07:35Q&A
🗩
1:07:35Q&A
🗩
1:08:02gasto5 Why is a position for a stream a bad idea?
🗪
1:08:02gasto5 Why is a position for a stream a bad idea?
🗪
1:08:02gasto5 Why is a position for a stream a bad idea?
🗪
1:17:00insofaras Are you concerned that "trusting" the file format could have security concerns, e.g. someone could say they've made some modded assets, and give out a specially crafted .hha file that runs arbitrary code?
🗪
1:17:00insofaras Are you concerned that "trusting" the file format could have security concerns, e.g. someone could say they've made some modded assets, and give out a specially crafted .hha file that runs arbitrary code?
🗪
1:17:00insofaras Are you concerned that "trusting" the file format could have security concerns, e.g. someone could say they've made some modded assets, and give out a specially crafted .hha file that runs arbitrary code?
🗪
1:21:09snovind92 What is the main difference between using asserts in your code and writing separate test functions/programs that check your results, and when do you choose one over the other?
🗪
1:21:09snovind92 What is the main difference between using asserts in your code and writing separate test functions/programs that check your results, and when do you choose one over the other?
🗪
1:21:09snovind92 What is the main difference between using asserts in your code and writing separate test functions/programs that check your results, and when do you choose one over the other?
🗪
1:23:42noxy_key Will multiple threads pose any problems to reading the assets file?
🗪
1:23:42noxy_key Will multiple threads pose any problems to reading the assets file?
🗪
1:23:42noxy_key Will multiple threads pose any problems to reading the assets file?
🗪
1:24:11flyingsand If C++ had introspection, would this be a a place where you would use it? e.g. to introspect the types you want to include in the asset pack
🗪
1:24:11flyingsand If C++ had introspection, would this be a a place where you would use it? e.g. to introspect the types you want to include in the asset pack
🗪
1:24:11flyingsand If C++ had introspection, would this be a a place where you would use it? e.g. to introspect the types you want to include in the asset pack
🗪
1:26:16revolvable Are there any specific times your streams start and end?
🗪
1:26:16revolvable Are there any specific times your streams start and end?
🗪
1:26:16revolvable Are there any specific times your streams start and end?
🗪
1:27:17cubercaleb Why not just read the entire file in as a string and parse it as you please, then do the same for writing
🗪
1:27:17cubercaleb Why not just read the entire file in as a string and parse it as you please, then do the same for writing
🗪
1:27:17cubercaleb Why not just read the entire file in as a string and parse it as you please, then do the same for writing
🗪
1:30:43psuedonym73 Another option is to memory-map the file and then do as you will. Although that may not work on older consoles
🗪
1:30:43psuedonym73 Another option is to memory-map the file and then do as you will. Although that may not work on older consoles
🗪
1:30:43psuedonym73 Another option is to memory-map the file and then do as you will. Although that may not work on older consoles
🗪
1:33:19davechat Do the mollyrocket artists ever interact with the asset packer or is it automated somehow. E.g. if they immediately want to preview how their artwork looks in game
🗪
1:33:19davechat Do the mollyrocket artists ever interact with the asset packer or is it automated somehow. E.g. if they immediately want to preview how their artwork looks in game
🗪
1:33:19davechat Do the mollyrocket artists ever interact with the asset packer or is it automated somehow. E.g. if they immediately want to preview how their artwork looks in game
🗪
1:33:56gasto5 I was taught to use exceptions because it does not convolute the code with error checking code
🗪
1:33:56gasto5 I was taught to use exceptions because it does not convolute the code with error checking code
🗪
1:33:56gasto5 I was taught to use exceptions because it does not convolute the code with error checking code
🗪
1:35:25pseudonym73 (clarification to question at 1:30:43) When I said "memory-mapped file", I meant it as an alternative to fread(), not as an alternative to streamed loading. Using fread() actually copies all data twice: buffer cache into FILE* buffer, then buffer into final destination. Copying from a memory-mapped file means only one copy
🗪
1:35:25pseudonym73 (clarification to question at 1:30:43) When I said "memory-mapped file", I meant it as an alternative to fread(), not as an alternative to streamed loading. Using fread() actually copies all data twice: buffer cache into FILE* buffer, then buffer into final destination. Copying from a memory-mapped file means only one copy
🗪
1:35:25pseudonym73 (clarification to question at 1:30:43) When I said "memory-mapped file", I meant it as an alternative to fread(), not as an alternative to streamed loading. Using fread() actually copies all data twice: buffer cache into FILE* buffer, then buffer into final destination. Copying from a memory-mapped file means only one copy
🗪