Ok, I'll slowly start to decribe the columns, proposals for better names (more suited for your work) are very welcome. Part 1.
The "secret" value is unused. I removed it completely as it's just a waste of space. The exe uses it to know how many extra slots are free, but that's only -1 value and set automatically anyway.
"Sort order" <- that's just a cosmetic field to help sorting the cards. There are only a few order requirments here: 1) basic lands and original lands that count as basic lands are first. Some code definitely used it, I'll try to find it but that might be hard. 2) effect cards and 16 free slots are last. Yes, there's only 16 slots for extra types created while playing and it cannot be increased without major changes in exe. For example only these 16 slots are copied when AI starts calculating and so on. In any case, sorting in excel by "Sort order" and "Full Card Name" is what I used for initial version. Blue entries are coming from the old 2005 edition (updated code address whenever it changed) so the other fields should be ok if you want to look how anything was set by the original programmers (or me at the time).
"Name (34 letters)" <- almost cosmetical field. It's used only for ease of debugging and first letter of name is used as a sort order whenever the game adds new card to some sorted list. The only one that must stay the same is "DataCard" as it's used to scan the struct for effects block at the end. This field can probably be truncated to make space for extra entries whenever you need to expand this struct. 35 bytes at offset 0x01 in destination struct. "char name[18];" in your header.
"Full Card Name in CSV" <- card name from CSV is used to get a CID from Cards.dat. DWORD at offset 0x24h in destination struct. "uint16_t id;" in your header.
"Type: Effect, Type: Artifact, Type: Interrupt, Type: Instant, Type: Sorcery, Type: Enchantment, Type: Creature, Type: Land" - combined makes a card type entry. Byte at offset 0x28. "uint8_t type;" in your header.
"Family" - a value for specific group of cards. This isn't really same subtype as in csv but close. It's used to identify some cards for certain effects that look for them. An example is "wall", "land that counts as a basic land" etc. It's not very flexible as you cannot combine 2 families for 1 card. I think you expanded it but in the past I had it defined like below. It's a byte at 0x29. "uint8_t subtype;" in your struct.
FAMILY_WALL = 0
FAMILY_MERMAN = 1
FAMILY_ZOMBIE = 2
FAMILY_GOBLIN = 3
FAMILY_DWARF = 4
FAMILY_DJINN = 5
FAMILY_EFREET = 6
FAMILY_RAT = 7
FAMILY_URZALAND = 8
FAMILY_ORC = 9
FAMILY_ELEPHANT = 10
FAMILY_MAMMOTH = 11
FAMILY_COUNTSASBASICLAND = 12
FAMILY_BASICLAND = 13
FAMILY_LEGEND = 14
FAMILY_LEGENDARY = 15
FAMILY_ENCHANTWORLD = 16
FAMILY_NONE = -1
"Color Unused, Color ArtMana, Color White, Color Red, Color Green, Color Blue, Color Black, Color Colorless" - combined into a card color value. Byte at 0x2A. "uint8_t color;" in your header.
Required Color Mana (total) - a sum of all color mana required to play the card. This is used by the code calculating available mana and playable cards. Byte at 0x2B. Part of "uint8_t cc[3];" in your header.
Required Colorless Mana (total) - like above, except sum of colorless cost. X is 255. Byte at 0x2C. Part of "uint8_t cc[3];" in your header.
"Extra Flags (Unused) * 6, Modifies Produced Mana, Has Self Cost" - an extra flags field. Mostly unused, not sure if I added it in the past or it was there from the start. It was originally at 0x2D but as your cc[2] replaced it, I moved it now to 0x32.
In any case "modifies produced mana" signals that a card will alter mana produced by other cards. The cards that use it are Fertile Ground, Gauntlet of Might or Wild Growth. Lots of new cards have trash value here. The subroutine that calculates potential mana from available cards checks this flag and if it's set it calls the card with an event type 0xA6 (no entry in your header, CP_MODIFY_PRODUCED_MANA in my old stuff). Checked/modified mana source card is set in _affected_card and _affected_card_controller.
"Has self cost" - means the card has an extra cost to pay. If this flag is set the card is called with an event 0xA4 (EVENT_MODIFY_COST in your header, CP_ADDITIONAL_SELFCOST in mine). I believe I added this flag and Avatar of Hope was the only card that used it at the time.
Edit: Now that I check it, you seem to have expanded this field quite a bit... I'll need to redo the xls and re-add the old values. I just hope you used it as a bitfield and not as an enum...
