| 1020 | | if (older_than(2, 9, 8)) |
|---|
| 1021 | | { |
|---|
| 1022 | | /* The magic spells were changed drastically in Angband 2.9.7 */ |
|---|
| 1023 | | if (older_than(2, 9, 7) && |
|---|
| 1024 | | (c_info[p_ptr->pclass].spell_book == TV_MAGIC_BOOK)) |
|---|
| 1025 | | { |
|---|
| 1026 | | /* Discard old spell info */ |
|---|
| 1027 | | strip_bytes(24); |
|---|
| 1028 | | |
|---|
| 1029 | | /* Discard old spell order */ |
|---|
| 1030 | | strip_bytes(64); |
|---|
| 1031 | | |
|---|
| 1032 | | /* None of the spells have been learned yet */ |
|---|
| 1033 | | for (i = 0; i < 64; i++) |
|---|
| 1034 | | p_ptr->spell_order[i] = 99; |
|---|
| 1035 | | } |
|---|
| 1036 | | else |
|---|
| 1037 | | { |
|---|
| 1038 | | u32b spell_learned1, spell_learned2; |
|---|
| 1039 | | u32b spell_worked1, spell_worked2; |
|---|
| 1040 | | u32b spell_forgotten1, spell_forgotten2; |
|---|
| 1041 | | |
|---|
| 1042 | | /* Read spell info */ |
|---|
| 1043 | | rd_u32b(&spell_learned1); |
|---|
| 1044 | | rd_u32b(&spell_learned2); |
|---|
| 1045 | | rd_u32b(&spell_worked1); |
|---|
| 1046 | | rd_u32b(&spell_worked2); |
|---|
| 1047 | | rd_u32b(&spell_forgotten1); |
|---|
| 1048 | | rd_u32b(&spell_forgotten2); |
|---|
| 1049 | | |
|---|
| 1050 | | for (i = 0; i < 64; i++) |
|---|
| 1051 | | { |
|---|
| 1052 | | if (i < 32) |
|---|
| 1053 | | { |
|---|
| 1054 | | if (spell_learned1 & (1L << i)) |
|---|
| 1055 | | p_ptr->spell_flags[i] |= PY_SPELL_LEARNED; |
|---|
| 1056 | | if (spell_worked1 & (1L << i)) |
|---|
| 1057 | | p_ptr->spell_flags[i] |= PY_SPELL_WORKED; |
|---|
| 1058 | | if (spell_forgotten1 & (1L << i)) |
|---|
| 1059 | | p_ptr->spell_flags[i] |= PY_SPELL_FORGOTTEN; |
|---|
| 1060 | | } |
|---|
| 1061 | | else |
|---|
| 1062 | | { |
|---|
| 1063 | | if (spell_learned2 & (1L << (i - 32))) |
|---|
| 1064 | | p_ptr->spell_flags[i] |= PY_SPELL_LEARNED; |
|---|
| 1065 | | if (spell_worked2 & (1L << (i - 32))) |
|---|
| 1066 | | p_ptr->spell_flags[i] |= PY_SPELL_WORKED; |
|---|
| 1067 | | if (spell_forgotten2 & (1L << (i - 32))) |
|---|
| 1068 | | p_ptr->spell_flags[i] |= PY_SPELL_FORGOTTEN; |
|---|
| 1069 | | } |
|---|
| 1070 | | } |
|---|
| 1071 | | |
|---|
| 1072 | | for (i = 0; i < 64; i++) |
|---|
| 1073 | | { |
|---|
| 1074 | | rd_byte(&p_ptr->spell_order[i]); |
|---|
| 1075 | | } |
|---|
| 1076 | | } |
|---|
| 1077 | | } |
|---|
| 1078 | | else |
|---|
| 1079 | | { |
|---|
| 1080 | | int cnt; |
|---|
| 1081 | | |
|---|
| 1082 | | /* Read the number of spells */ |
|---|
| 1083 | | rd_u16b(&tmp16u); |
|---|
| 1084 | | if (tmp16u > PY_MAX_SPELLS) |
|---|
| 1085 | | { |
|---|
| 1086 | | note(format("Too many player spells (%d).", tmp16u)); |
|---|
| 1087 | | return (-1); |
|---|
| 1088 | | } |
|---|
| 1089 | | |
|---|
| 1090 | | /* Read the spell flags */ |
|---|
| 1091 | | for (i = 0; i < tmp16u; i++) |
|---|
| 1092 | | { |
|---|
| 1093 | | rd_byte(&p_ptr->spell_flags[i]); |
|---|
| 1094 | | if (i == 7) |
|---|
| 1095 | | p_ptr->spell_flags[i] = 0; |
|---|
| 1096 | | } |
|---|
| 1097 | | |
|---|
| 1098 | | /* Read the spell order */ |
|---|
| 1099 | | for (i = 0, cnt = 0; i < tmp16u; i++, cnt++) |
|---|
| 1100 | | { |
|---|
| 1101 | | rd_byte(&p_ptr->spell_order[cnt]); |
|---|
| 1102 | | if (p_ptr->spell_order[cnt] == 7) |
|---|
| 1103 | | cnt--; |
|---|
| 1104 | | } |
|---|
| | 1020 | int cnt; |
|---|
| | 1021 | |
|---|
| | 1022 | /* Read the number of spells */ |
|---|
| | 1023 | rd_u16b(&tmp16u); |
|---|
| | 1024 | if (tmp16u > PY_MAX_SPELLS) |
|---|
| | 1025 | { |
|---|
| | 1026 | note(format("Too many player spells (%d).", tmp16u)); |
|---|
| | 1027 | return (-1); |
|---|
| | 1028 | } |
|---|
| | 1029 | |
|---|
| | 1030 | /* Read the spell flags */ |
|---|
| | 1031 | for (i = 0; i < tmp16u; i++) |
|---|
| | 1032 | { |
|---|
| | 1033 | rd_byte(&p_ptr->spell_flags[i]); |
|---|
| | 1034 | if (i == 7) |
|---|
| | 1035 | p_ptr->spell_flags[i] = 0; |
|---|
| | 1036 | } |
|---|
| | 1037 | |
|---|
| | 1038 | /* Read the spell order */ |
|---|
| | 1039 | for (i = 0, cnt = 0; i < tmp16u; i++, cnt++) |
|---|
| | 1040 | { |
|---|
| | 1041 | rd_byte(&p_ptr->spell_order[cnt]); |
|---|
| | 1042 | if (p_ptr->spell_order[cnt] == 7) |
|---|
| | 1043 | cnt--; |
|---|