Minimalistic on-chain cross-game NFT attributes

An array of bytes1 actually gets padded with blank space in EVM and cosumes a lot more gas than bytes32

Correct me if I am wrong but updating one element will consume a full 32 bytes of gas when using storage due to EVM word size.

The version thing seems use case specific. If you needed it, and another project didn’t, whatever API is used to provide definitions of properties could pull the version from your array. Gas is so expensive on L1 and every byte is precious, that’s why I am bringing it up. Maybe another project doesn’t maintain rolling versions for NFTs on layer 2, maybe they do rolling upgrades on them.

Gotcha - for completely on chain games. What about a contract with a view function that returns metadata about properties, and setting the property definition contract on the game NFT?

I am interested in this just because I am also looking at making a game that uses NFTs. If everyone starts following a convention then interopability becomes possible.