超能力者(および青魔道師と鏡使い)は、m_info.txtでspell_bookにLIFEが
設定されている。
calc_spells()において最初にspell_bookをチェックしてNONEであれば
関数を抜けるようになっているが、spell_bookにLIFEが設定されているため
通過してしまい、realmsが設定されていないので後の配列インデックスの
計算結果で配列外アクセスを引き起こしている。
そもそも魔法書が設定されているのがおかしいのでこれら3つの職業の
spell_bookはNONEにする。
ただし、spell_bookはMPの計算時にも見ており、spell_bookをNONEに
しただけではMPの計算が行われずMPが0になってしまう。
従って、spell_firstを99から1にし、MPの計算と表示ではspell_bookが
NONEであることに加えspell_firstが99の時にのみMPの計算を
行わないようにする。
(元来MPが無い職業については、すべて99に設定されている)
### Mindcrafter ###
N:9
-I:LIFE:WIS:0x00:0:99:400
+I:NONE:WIS:0x00:0:1:400
# Life
R:0:0
### Blue Mage ###
N:21
-I:SORCERY:INT:0x01:0:99:430
+I:NONE:INT:0x01:0:1:430
# Life
R:0:0
### Mirror Master ###
N:25
-I:LIFE:INT:0x00:0:99:400
+I:NONE:INT:0x00:0:1:400
# Life
R:0:0
*/
static void calc_mana(player_type *creature_ptr)
{
- if (!mp_ptr->spell_book)
+ if (!mp_ptr->spell_book && mp_ptr->spell_first == 99)
return;
int levels;
{
char tmp[32];
byte color;
- if (!mp_ptr->spell_book)
+ if (!mp_ptr->spell_book && mp_ptr->spell_first == 99)
return;
put_str(_("MP", "SP"), ROW_CURSP, COL_CURSP);