Hi Maria,
I think I've figured out the alignment restriction flags. Assuming your examples are correct, the breakdown I did of the alignment bits seem right to me. From high-order to low-order, the AlignRestrict bits seem to be:
0x10 = Evil
0x08 = Good
0x04 = Chaotic
0x02 = Lawful
0x01 = Neutral (affected by the AlignRestrictType flag, see below).
Note: Those are alignment restrictions. i.e. If you set the AlignRestrict field to be 0x10, that means you cannot select evil characters, so you can only choose neutral or good characters.
0x01 (Neutral) is a bit more complex. That's affected by the AlignRestrictType flags. If you don't care about restricting neutrality in any way, I believe the AlignRestrictType flag serves no purpose. If the Neutral bit is set, here's how the AlignRestrictType flag affects it:
0x02 = Restricts LN, N, CN
0x01 = Restricts NG, N, NE
You can also set the AlignRestrictType flag to 0x03, in which case it will affect both axes as you expect; i.e. it will restrict NG, LN, N, CN, NE.
It's easiest to visualise this as the standard 3x3 alignment grid:
LG NG CG
LN N CN
LE NE CE
Setting any AlignRestrict bit will then restrict an entire horizontal or vertical row of the grid:
0x10 = Evil (invalidates bottom row)
0x08 = Good (invalidates top row)
0x04 = Chaotic (invalidates right column)
0x02 = Lawful (invalidates left column)
0x01/0x01 = Neutral/Restrict Good+Evil (invalidates middle column)
0x01/0x02 = Neutral/Restrict Lawful+Chaotic (invalidates middle row)
0x01/0x03 = Neutral/Restrict G+E+L+C (invalidates middle column and middle row)
I've whipped up a Google Spreadsheets document to try to make things easier: Alignment Bits on Google Spreadsheets
The sorta dumb thing is that the alignment bitfield actually uses 8 bits right now: (1) evil, (2) good, (3) chaotic, (4) lawful, (5) neutral, (6) neutral restrict LC, (7) neutral restrict GE, ( invert. Since there's only 9 possible alignments, it would be far simpler and take less space to just use 5 bits to store the information, with each bit being a boolean flag for each of the LG/NG/CG/LN/N/CN/LE/NE/CE alignments ). I'm a little puzzled as to why Obsidian/BioWare chose this 8-bit encoding for restricting alignments.
Note: in four of your examples (non-evil = 0x10, any chaotic or evil = 0x14, non-good = 0x08, and non-lawful = 0x02), the AlignRestrictType shouldn't have any effect, even though they're set to different values in all four of those cases. Perhaps the game engine requires the AlignRestrictType to be non-zero, or I've interpreted it slightly wrongly.
Hope that's slightly useful for someone... now, back to procrastinating to see if I can get these pesky Genasi races enabled...
--
% Andre Pang : trust.in.love.to.save <http://www.algorithm.com.au/>