2019年07月31日

JNetHack TNG Patch を当てた後に

JNetHack TNG (3.4.3 対応版, 最新安定版) で気になることがあったので, 少し変更してみました. パッチを当てた後に以下の変更を行い, コンパイルします.

1. 追加された属性武器が効果を発揮しない

ムーマクベーンは炎, ショッカーは電撃属性攻撃武器ですが, SPFX_ATTK フラグがついていません. これによりダメージ増加効果が発生しないことをショッカーで確認したので, これを解決します.

include/artilist.h

Mumakbane, Shocker に SPFX_ATTK flag を追加

2. ショッカーの攻撃時メッセージ

ショッカーで攻撃した際, 巨大なハンマーは, と形容されます. ミョルニール以外の電撃武器は考慮されていないようです. というわけで, ショッカー用のメッセージを追加します.

src/artifact.c

if (attacks(AD_ELEC, otmp)) {
if (realizes_damage)
の下のメッセージを



に変更する.

3. 力の杖

力の杖の効果は, コメントやコードを読むと, 他属性, 他クラスのアーティファクトに触れてもペナルティを受けずに使用できるようになる, という意図があるようですが, 実際にはうまく動いていないようです. そこで, 力の杖を wield 所持している場合, そういう風に動作するように変更しました.

include/prop.h

#define SECOND_CHANCE
の下に



を追加. その下の LAST_PROP の値を (ART_TOUCHABLE) に変更する.

include/youprop.h

#define Lifesaved
の下に



を追加

include/artilist.h

Wand of Might の
(SPFX_RESTR|SPFX_TOUCH), 0

SPFX_RESTR, SPFX_TOUCH
に置換

src/artifact.c

set_artifact_intrinsic の後半,
SPFX_REFLECT の on/off の下に



を追加. また,

if (oart->spfx & SPFX_TOUCH) return 1;

をコメントアウトし, その下に,



を追加.


間違いがある可能性があります. とりあえず, 期待したように動作することを, Wizard モードで確認しました.

19/08/08 追記
wield だと, 武器アーティファクトに効果が発揮されないため, 所持に修正.

19/08/09 追記
パッチ を作製しました.

19/08/22 追記
パッチ 1.20 を作製しました.
posted by Takenoko at 16:29| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年07月27日

JNetHack スクリーンショット

最近はネットハックばかり.
jnh-rq-tng-fig002.png
Geek の故郷へやってきた. ゲイツはマインドフレアと同じ吸い取り攻撃をしてきたと思うので, もっと武器が強くなるまで放っておくつもり.

jnh-rq-tng-fig003.png
願いを三回引いたであろうとわかる画像. ランプから二回, 泉から一回. 他クラスのクエストアーティファクトは, 後半になると手に入れづらくなるので, どうしても願ってしまう. 命の魔除けとかの方が安定するとは思う. PYEC は, 確か 3.2 から充填の効果が弱くなったが, 魔法のマーカは 50 まで充填できるし, まだ十分使える. アルゴルの太陽虎の歯は d20/d20 の威力がある. 3.4 では二刀流できるので, オリジナルの TNG よりも役に立つだろう.
ラベル:Roguelike nethack
posted by Takenoko at 14:11| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年07月20日

JNetHack 3.4.3-0.11 に複数のパッチを当ててコンパイル

JNetHack 3.4.3-0.11 に, Random Quest Patch, TNG Patch, Fighter Patch, UTF-8 Patch
を追加して, コンパイルしました. 未来の自分が読んでも理解できるように, 手順をなるべく丁寧に書きました. 必要ないことや余計なことをしている可能性があります. OS は Linux Mint 18.3 xfce です.

1. 必要なファイルを用意

nethack-343-src.tgz
jnethack-3.4.3-0.11.diff.gz
(url https://osdn.net/projects/jnethack/releases/)

Random_Quest-J343-v2.0.2_for_jnethack34311_diff.zip
Fighter-J343-v2.0.0.lzh
(url http://sakusha.s26.xrea.com/x/FHS/others.html)

jnethack-3.4.3-0.10-tng-0.7.9.5.patch.bz2
(url http://www.phys98.homeip.net/~ide/jnethack.html)

jnethack-3.4.3-0.10-utf8-2.patch.bz2
(url http://elbereth.seesaa.net/article/242387348.html)


以上のファイルを
/home/ユーザー名/
に用意する

2. 必要なものをインストール

$ sudo apt install build-essential flex bison libncurses-dev jlha-utils

3. パッチの展開および文字コード, 改行文字変換

$ cd $HOME
$ unzip Random_Quest-J343-v2.0.2_for_jnethack34311_diff.zip
$ nkf -e -Lu --overwrite Random_Quest-J343-v2.0.2_for_jnethack34311.diff
$ lha xi Fighter-J343-v2.0.0.lzh
$ nkf -e -Lu --overwrite Fighter-J343-v2.0.0-jnethack34310-080504[Release]-SJIS-LF.diff

4. ソースを展開

$ tar zxvf nethack-343-src.tgz
$ cd nethack-3.4.3

5. 日本語化

$ zcat ../jnethack-3.4.3-0.11.diff.gz | patch -p1

6. 差分用の元ディレクトリを作製

$ cd ..
$ cp -a -r nethack-3.4.3 nethack-3.4.3-orig
$ cd nethack-3.4.3

7. Random Quest, TNG, Fighter Patch を当てる. reject された場合, その都度 rej ファイルを参考に手動で当てる.

$ patch -p1 < ../Random_Quest-J343-v2.0.2_for_jnethack34311.diff

sys/winnt/Makefile.gcc
fighter.des を gnome.des に書き換え

$ bzcat ../jnethack-3.4.3-0.10-tng-0.7.9.5.patch.bz2 | patch -p1

src/role.c.rej は無視する

src/role.c
# ifdef TNG_ROLE で囲まれた 3 箇所を, healer の定義の上にカット & ペースト
PM_SOFTWARE_BUG を PM_GRID_BUG に書き換え
ART_NETHACK_SOURCE の末尾に S を追加
ifdef TNG_ROLE と, それに対応する endif を削除

include/you.h
#define Q_GEEK を #define Q_HEALER の上にカット & ペースト
Q_GEEK の値を (Q_FENCER+1) に, Q_HEALER の値を (Q_GEEK+1) にする
#define QR_GEEK を QR_HEALER の上にカット & ペースト

win/tty/wintty.c
630 行目 (healer の上) に
case 'g': flags.initrole = Q_GEEK; break;
を追加. 列を合わせる.

$ patch -p1 < ../Fighter-J343-v2.0.0-jnethack34310-080504[Release]-SJIS-LF.diff

src/role.c.rej は無視する

include/artifact.c.rej
copyright 表記の追加だけにする

include/artifact.c
artifact の生成数を抑制している部分 (260 行あたり),
#ifdef RANDOM_QUEST

#if defined(RANDOM_QUEST) || defined(FIGHTER)
に書き換える

win/share/objects.txt.rej, monsters.txt.rej はとりあえず無視.

src/u_init.c
Fighter のスキルに P_CHEMISTRY を P_SKILLED で追加.
他のクラスの, tng patch で追加された錬金術スキルと比較して, あってもいいと判断した.

include/qtext.h
N_HDR に上から +4, +2 する. これでいいか不安.

8. ここまでの差分を作製しておく.

$ cd ..
$ diff -urN nethack-3.4.3-orig nethack-3.4.3 > jnh3.4.3-0.11-rq-tng-fig.patch
$ bzip2 -f jnh3.4.3-0.11-rq-tng-fig.patch
$ cd nethack-3.4.3

9. utf-8 パッチを当てる

$ bzcat ../jnethack-3.4.3-0.10-utf8-2.patch.bz2 | patch -p1

sys/unix/unixmain.c の 22 行目に
#include <locale.h>
を追加.

10.インストール

$ sh sys/unix/setup.sh
$ python ../nhreplace.py
$ make all
$ sudo make install

11.設定ファイル

/home/ユーザー名/ に

OPTIONS=color
OPTIONS=windowtype:tty

を記述した .jnethackrc という名のテキストファイルを作成

12.起動

$ jnethack

jnh-rq-tng-fig001.png

utf-8 patch のおかげで, デフォルトの端末からでも文字化けせずに起動しました. 戦士とギークが追加されています.

13.補足

次にコンパイルする際は, 6, 7, 8 の過程を飛ばす代わりに,

$ bzcat ../jnh3.4.3-0.11-rq-tng-fig.patch.bz2 | patch -p1

と入力するだけで良いです.
posted by Takenoko at 13:33| Comment(0) | game | このブログの読者になる | 更新情報をチェックする

2019年07月15日

JNethack TNG をコンパイル

JSlash'EM に続いて, JNethack TNG もコンパイルしました. 初 Nethack は PC-98 の TNG だったので, もう一度やってみたくなったのです. 今回は, JNethack 3.4.3-0.11 のソースに TNG 最新安定版 のパッチを当てます. 少し対象バージョンが違いますが, 大丈夫だろうと判断しました.


nethack-343-src.tgz
jnethack-3.4.3-0.11.diff.gz

を,

jnethack-3.4.3-0.10-tng-0.7.9.5.patch.bz2


nhreplace.py

をダウンロードして,

/home/ユーザー名/

に用意し, 端末で下記を入力

$ cd $HOME
$ sudo apt install build-essential flex bison libncurses-dev
$ tar zxvf nethack-343-src.tgz
$ cd nethack-3.4.3
$ zcat ../jnethack-3.4.3-0.11.diff.gz | patch -p1
$ bzcat ../jnethack-3.4.3-0.10-tng-0.7.9.5.patch.bz2 | patch -p1

テキストエディタで, dat/jrumors.tru.rej の 7 行目 の 2 文字目から行末までコピーし, dat/jrumors.tru の 76 行目に挿入する.

$ sh sys/unix/setup.sh
$ python ../nhreplace.py
$ make all
$ sudo make install

ここまで入力.

/home/ユーザー名/ に

OPTIONS=color
OPTIONS=windowtype:tty
OPTIONS=kcode:jis

を記述した .jnethackrc という名のテキストファイルを作成

端末から, jnethack で起動. mlterm から起動すると, 文字化けしませんでした. mlterm のインストール方法 mlterm の設定

posted by Takenoko at 16:34| Comment(0) | game | このブログの読者になる | 更新情報をチェックする