Linux で忍者/修行僧/練気術師で始め、オートローラーを回すと落ちる
ログインしてませんでしたが報告者は自分です。失礼いたしました。
もう少しソースを読んでみたのですが、「ふさわしい武器」の判定を行う際に素手かどうかのチェックを行っていないのが原因ではないでしょうか?(違ったらすみません)
v2.2.1 では xtra1.c 内の 5425 行目に has_not_ninja_weapon() および has_not_monk_weapon() 相当の処理があり、そこでは if (buki_motteruka(INVEN_RARM+i)) というチェックが入っていますが、現在のコードではこの判定が消えています。
報告ありがとうございます。検証します。
修正を担当します。
下記コミットにて修正。マージをよろしくおねがいします。
https://osdn.net/projects/hengband/scm/git/hengband/commits/373e190dba04c39be09da30f2046b288a5faa4d1
当方の改編でやった関数の未装備チェック漏れ申し訳ないです。マージしました。
release/3.0.0Alpha e2af5c4 を --enable-xft 付きでビルドして確認しました。 そのままでは特にメッセージなどは表示されず突然終了するだけですが、main.c 内の signals_init() をコメントアウトして調べたところ SIGSEGV が発生しているようでした。
gdb で追ってみたところ、player-status-flags.c 内の has_not_ninja_weapon() および has_not_monk_weapon() において、tval の値が 4294967277 (= 2**32 - 19) になっており、これを添字として w_max を参照した結果落ちているようです。 tval の値が変になるのは、inventory_list[INVEN_RARM + i].tval の値が 0 になっているのが原因と思います。
あまりコードを理解できていないのですが、インベントリの初期化漏れとかでしょうか?