The problem is that not all shapes need 24 orientations. So you wind up wasting space. Having your shapes mixed in with the orientations means you get more bang for your buck.
Thank you! Yeah, so it would be better to set the bits in this order: (Edit: reduced the orientation bits from 5 to 4 to give another bit to Block IDs, which, with the additional bit, can make up for the missing orientations with raw blocks)
1 activation bit
7 HP bits (most blocks won't need more than 100 HP)
4 orientation bits that could be split off/mixed with either the HP bit count or as a sub-type for the Block ID bits, depending on the Block ID.
20 Block ID bits (over 500,000 Block IDs to cover all shapes!).
For the minority of blocks with greater than 127 health, the increased Block ID count will allow us to send one orientation bit to the HP bit count, while
four six Block IDs will simulate the missing orientation bits by giving us
four six different block rotations for each of the
six faces four rotations. 6 block Ids x 3 armor types (HP > 100) x 8 colors = nearly 150 Block IDs (not a whole lot out of the total available Block ID space).
Similarly, if a block has less than 127 HP and doesn't need 15 different orientations, you could have 2 or 4 subtypes associated with that one Block ID. (E.g. Four different floating crystal meshes or eight different glass blocks that each look almost the same no matter which way they are rotated.)
Edit: Heck, at this rate, just move one of the rotation bits back into the current-HP count and mix the 3 remaining rotation bits in with the block ID bits for a total of 2^22 Block IDs and have an average of 24 Block IDs for every block type to give all orientations. Depending on how many blocks can get away with less than 24 orientations, the average Block ID count per current block would be more like 20.
Edit 2: Even if the bit count stays at 24, it might be equally efficient to move the orientation bits into the Block ID space giving 15 bits, equally 2^14 Block IDs, which is over 16,000 Block IDs, and then be very selective on which blocks get multiple orientations. If we take the current block count of 600 and some, and multiply by an average orientation count of 20 or 21, that uses up only about 12,000-15,000 of the available 16k Block ID space. Even if there are exactly 16,000 Block IDs in use, that still leaves over 380 Block IDs for custom blocks.