OSDN Git Service

[fix] #41503 超能力者でゲームを開始しようとするとクラッシュ
authorHabu <habu@users.osdn.me>
Sun, 7 Feb 2021 07:08:05 +0000 (16:08 +0900)
committerHabu <habu@users.osdn.me>
Sun, 7 Feb 2021 07:08:05 +0000 (16:08 +0900)
超能力者(および青魔道師と鏡使い)は、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に設定されている)

lib/edit/m_info.txt
src/player/player-status.c
src/window/main-window-left-frame.c

index 21dfb8d..eae5d99 100644 (file)
@@ -1912,7 +1912,7 @@ R:9:0
 
 ### Mindcrafter ###
 N:9
-I:LIFE:WIS:0x00:0:99:400
+I:NONE:WIS:0x00:0:1:400
 # Life
 R:0:0
 
@@ -3503,7 +3503,7 @@ T:50:100:80:250
 
 ### Blue Mage ###
 N:21
-I:SORCERY:INT:0x01:0:99:430
+I:NONE:INT:0x01:0:1:430
 # Life
 R:0:0
 
@@ -3639,7 +3639,7 @@ R:9:0
 
 ### Mirror Master ###
 N:25
-I:LIFE:INT:0x00:0:99:400
+I:NONE:INT:0x00:0:1:400
 # Life
 R:0:0
 
index 468b4e1..c3ca968 100644 (file)
@@ -893,7 +893,7 @@ static void calc_spells(player_type *creature_ptr)
  */
 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;
index e17d5c4..5ada11a 100644 (file)
@@ -140,7 +140,7 @@ void print_sp(player_type *creature_ptr)
 {
     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);