is presently its sole maintainer,
You can support him:
Recap and plan for the day
Bug determining when sounds finish playing
Rearchitecting the mixing loop to avoid this sort of bug. Removing a secondary variable to avoid having to keep it in sync
On the importance of assertions
Write assertions to catch the kind of errors that you tend to make
Back to the test asset builder
Trick to avoid modifying lots of code to reflect the change of a variable from object to pointer
Data that we want to include in the asset file
Pragma-packing the file format structures
The hha header and its magic value
Overview of the structure of the asset file
Using offsets and counts to access asset content
Writing the header from the test asset builder
Two ways of computing the offsets of tags, asset types, and assets
Streaming files mini-rant (extended in the first question of the Q&A)
Writing out the arrays
Stepping through the code
Hex editing the resulting file
gasto5 Q: Why is a position for a stream a bad idea?
insofaras Q: 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?
snovind92 Q: 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?
noxy_key Q: Will multiple threads pose any problems to reading the assets file?
flyingsand Q: 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
revolvable Q: Are there any specific times your streams start and end?
cubercaleb Q: Why not just read the entire file in as a string and parse it as you please, then do the same for writing
psuedonym73 Q: Another option is to memory-map the file and then do as you will. Although that may not work on older consoles
davechat Q: 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
gasto5 Q: I was taught to use exceptions because it does not convolute the code with error checking code
pseudonym73 Q: (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