------------------------------------------------------------ FHS patch (Funny-Honey-Spit patch) 蛇足メモ 作成者:Shiganai Sakusha ------------------------------------------------------------ ------------------------------------------------------------ 雑記 [にうきゃら掲示板(補助用)と連動している内容もあります。(こちらで書かれた内容が掲示板で解決とか)] ------------------------------------------------------------ -2018/02/03 (FHS patch 0.8.31(JNH343)) 現在抱えている課題を、箇条書きにしてみる。 ・タイル数の限界突破 現在は縦にvanillaの2倍の範囲を確保しほぼ埋まった状態。 このまま縦3倍にするとコンパイル時に「Fatal:」と出てコンパイル不能 (弊害: 怪物/アイテム/地形等をタイル版で増やせなくなる) ・3.6版(MINGWコンパイル)にてyacc、lexを有効化する方法 yacc/flex/bison等の導入に失敗している状態。 MINGW用のMSYSを導入すると冒頭からコンパイル不能になる (弊害: 追加地形等をクエスト等の特殊階ファイル(des)で扱えなくなる) ・Nax氏のDumplogパッチ(※外部リンク)のメッセージ履歴保管機能を、  So-Miya氏のhtmldumpパッチに組み込む方法 組み込めればタイル版でもメッセージ履歴の出力が可能になる →3.6版(タイル版とテキスト版をコンパイル時に切り分けられない)でもメッセージ履歴の出力が可能に どれも自力で解決するあては無いです。少なくとも今の所は。 とっかかりを探して手探りをはじめた状態…でしょうか。 ああ、今回、魔除けの不確定名用アイテム(正式名が空で不確定名だけ設定されているもの)を o_init.cで設定するように変更したのも、一応はタイル数対策です。 これでもう40個分位は空きができたのかな。  #元々Funny-Burstは、不確定名登録で「無駄に」増えるアイテム総数を  #減らす目的で作ったものですしね。  #タイル数も減らせるという副次効果は予想外でしたが。  #他の種別のアイテムは全て移動済み、魔除けだけ残ってました。 閑話休題。 ---- 前回のVerUp前後にも色々いじったり移植していたり。 SLASH'EM Extendedから、芳香の罠の効果とか。  #Chanel No. 5 。  #以前にコード内に案だけ書き込んでたけど、まさか実際に実装されてるとは。 まあ、remove_worn_item() やdonning() を参考に色々コードをいじって 専用処理の remove_worn_all_armor() なぞ作ったりしてますが。 で、武器とあわせて「自然体の薬」も実装。 こちらもjtrnsobj.cに案だけ記述していたものですね。  #武器の方の処理は以前に組んだ unwield_weapons_silently() を流用。 ---- と、のんびりやっている最中にバグ発見。 --bug 0830-N002: 一部のクエストにて、クエスト聖器ではなく「(クエスト聖器の名前)と 名づけられた」 通常アイテムが生成される (対象: 吟遊詩人Type1/Type2、ドワーフType2) …VerUp版公開しました(_ _;)。 ------------------------------------------------------------ -2018/01/28 (FHS patch 0.8.30a(JNH343)) はう(> <:) > -[JEDI2] クエストType2における怪物同士の敵対設定を調整 済みません、先日のver0.8.30だと ジェダイType2での敵味方設定が通常のジェダイ(Type1)と同様のままだったので 味方同士で同士討ちしたりと滅茶苦茶になってしまうかもしれません。 その箇所だけ集中的に直したver0.8.30aをUp。 お手数おかけしますがもう一度DLお願いします(_ _;)。  #実質、変更点はmon.c(とVerUp履歴)だけなので  #ソースの方はそれらのファイルだけを単独でUpしました。  #ver0.8.30に上書きする形でご利用下さい。 ------------------------------------------------------------ -2018/01/18 (FHS patch 0.8.30(JNH343)) お久しぶりです。 343版のver0.8.30公開。 360版の新職業やら何やら、今回で343版にほぼ移植できたと思います。 移植以外でも幾つか追加がありまして…  ■[ENGR_DOOR] 扉に直接文字を刻む処理(仮設定)    ・(仮設定) 扉の位置に刻まれた文字は,「扉に直接刻まれている」ものとして扱うようにした    ・扉の位置に刻まれた文字は,マップ上でも「/」等で確認できるようにした 以前に書いた >   扉の位置に刻まれている文字を、扉が閉まった状態で >   どうやって読めるようにしたものか orz ですね。曲がりなりにも成功しました。 これでドワーフType3の実装を…あー、Artifact Doorも実装する必要があるか。 今回はlock.cの差し替えをしてなかったと思うので、次回の課題に。  ■[PLOT_WEAP] 武器の詳細性能を表示する処理を分離 (FHS 360版から逆移植)    ・「Ctrl+c」でいつでも確認できるようになります    ・(追加変更)「強化値が不明」であるのか「判明していて+0」であるのかも表示するようにした 追加変更の部分がないと、判明済みなのかどうか表示されていなかったので。  ■[CLOISTER_MAIN] ver1.0.1〜ver1.0.2 のVerUp内容を反映    ・[CLOISTER_ISLAND] 追加:十字路の遊歩道    ・[CLOISTER_ISLAND] 追加:四隅を1マスだけ削った形の島 新たに水上の十字路タイプを追加。 最初は庭園のバリエーション(WATER_GARDEN)で組んでみたけど、 それだと部屋の出入口が中央固定にならず、十字路と接続できないという問題が判明。 花の庭園(FLOWER_GARDEN)と違って、十字路の外が地面になってないからなあ…。 なので、壁を全消去した後に床を再設置できる、遊歩道のバリエーションとして組み直し。 十字というより田型になるけど、まあいいか。  ■[LIGHTSABERS] 虹のライトセイバーの,虹モードにおけるエネルギー消費量を低減(通常品の6倍->3倍) さすがに燃費が悪すぎるかと思い、再設定。  ■[NH36_TO_34] 様々なアイテムを読む処理(doread())関係を vanilla 3.6から丸ごと移植
vanilla 360の内容も含め丸ごと移植。 読めるアイテムやシャツの内容などが、ごっそり増えてます。 (そして、それらに加えFHSパッチで更に追加していくスタイル) ---- そして、新職業と新クエストですが…  ■職業追加    ・[職業] 吟遊詩人(Bard)    ・関連処理: 魔法音楽(musicalize spell)  ■各種クエスト追加    ・[種族quest] ドワーフ Type2 : dNetHackから移植    ・関連処理: ダメージ属性: AD_STDY *一時的に,受けるダメージが増加する    ・[職業quest] 戦士 Type3(Fighter Type3) (中立) : Slash'EM Extended版 "Mahou Shoujo" をベースに改変    ・(追加変更)クエスト最下層を差し替え    ・[職業quest] ジェダイ Type2(Jedi Type2)(混沌) : オリジナル(Dark-Jedi)    ・[職業quest] 巫女 Type1B(Medium Type1B) : Slash'EM Extended から移植  ■[RANDOM_QUEST] 特定の種族と職業の組み合わせで,必ず種族クエストを受けられるようにした(FHS 360版から逆移植) 360版で新規実装したものを全部反映。 戦士 Type3についてはクエスト最下層を差し替え。  #Mahou Shoujoの最下層、なんか無茶苦茶な地形だと思ってたら  #desファイル内にしっかりと「クラッシュしたマップを再現してみた」なんて記述が… そして、360版にも無かった新規クエストが、ジェダイ Type2。 Dark-Jedi(混沌のジェダイ)となります。 シス…ではありません。理由は、実際に確かめてみて下さい。 ---- で、ジェダイに関して色々試験していたらバグ発見。  ■bug 0829-N001:  [1] Jedi.desにて、ジェダイのクエスト開始階における魔法の入口の  位置指定が間違っており建物の外に生成されることがある  [2] [343版] [1]が原因で、ジェダイのクエスト開始階が生成される際に  「rn1(-16,20) attempted」「rn1(-2,3) attempted」のエラーが出る 最初に見つかったのは[2]ですが、 「怪物の装備を全て生成した後に起きている」という以外には手がかりも無く 途方にくれました。 結局は、wizardモード専用のデバッグ用出力を片端からコード内に挟み込んで 怪しい箇所を絞り込むという力技に。 でもって原因となった箇所は、怪物生成よりもかなり離れた位置にあったという… ちなみに[1]は元パッチ(Jedi patch 0.5)の記述そのままです。英語版も日本語版も。  #Slash'EM Extendedは? と思い確認してみたら、そちらでは修正されてました。 なんとかこれらも修正完了。公開までこぎつけました。 今年も宜しくお願いします。 ------------------------------------------------------------ -2017/09/17 (FHS patch 0.8.29(JNH343)、 FHS patch 0.8.30__JNH36008_20170917) メモ書き。 343版のタイル版コンパイルの際に、以下のようなエラーが何行も出る理由判明。  #但し通常のコンパイルメッセージを、画面表示ではなく別ファイル書き出しに  #しないと表示されない? warning: for tile 107 (numbered 103) of other.txt, found 'cmap 102' while expecting 'cmap 107' 何の事はない、タイル名の「(cmap ***)」の番号「***」を ファイル内の画像番号と揃える必要があっただけでした。  #正確には、「tile ***」の方だと番号がずれても特に何も表示されないが、  #「(cmap ***)」の方はきちんと合わせないと上記エラー文が。 あ、そうそう。 343版では今まで唯一表示がうまくいっていなかった「彫像」のタイルですが、 ようやくきちんと表示できるようになりました。 360版の処理を移植しようにも、マテリアルパッチと怪物シンボル化表示が絡み合ってて なかなかうまくいかなかったのですが…どうにか画像適用のコードを読み解けました。 まあ、付け焼刃もいいところで、他の箇所に応用できるような技術は持ち合わせていませんが。 閑話休題。 ---- FHS360版の各種新規要素を、あれやこれやとFHS343版に逆移植。 それと共に、新地形を追加。 --[Map] ★>> \ (桃色) 花畑(flowerland) --[Map] ★>> \ (緑) 茂み(shrub) --[Map] ★>> \ (赤) 茨の茂み(bramble) あわせて草地も\表示にしました。 現在のところは採集物以外、まるっきり床と同じ扱いですが。 果物やハーブの採集についても、新分類の「茂み」を追加し色々と調整。 茂みから採れるのは、大抵は野いちご、稀にハーブ等。 今までも一応、木と低木とで採集物の分類分けはしていたので、調整は楽でした。  #ただ低木に分類していた植物が思ったより少なかったため、  #茶葉などを茂みに再分類。 ああ、各種のベリー類の名前も、ハーブや薬の不確定名だったものを 野いちごの通称名に移動させてます。  #それ以外にも通称名を幾つか追加。 表示も、他の菓子類と同様に「通称名(正式名)」式に。 そして、343版では上記の表記はインベントリ内に限定するようにしました。 祝呪表示などと同じで、例えば以下のようになります。  ・拾う時や食べる時などは「祝福されたこけもも」  ・インベントリ内では「{祝福}こけもも(野いちご)」 こうした実装のついでに、Dungein Growthやら庭園やらの周辺部分も 全面書き換えせんばかりの勢いで色々と整備。 目に付いた箇所を整備していく、気まぐれ作業ですけど。 ---- まだ怪物の選択処理を一新しきれていないけど、区切りもいいしバグ修正もあるので 新ver公開。 うーむ、360版のverを0.8.30(tes)にしていたけど 343版が追いついてしまいそうだ。 0.9.**にでもした方がいいかなあ。 ------------------------------------------------------------ -2017/09/04 (--) あー、そういうことか! 今更ながらにわかったことが1つ。 FHSの343版でも、utilフォルダ内のファイルに少しでも手を加えると コンパイル時に追加地形の読み込みに失敗して止まってたけど (bigroom,desの200行目でsyntax error -> fatal error b!) 今回はlev_comp.lを何も書き換えずに上書きしただけでもエラーが起こり、 しかもDO_YACCとかDO_LEXとか有効にしていないのに lev_flex.cが新規生成(上書き)されていて、更にそのサイズが妙に小さくなっていた (正常時80kB->書き換え後76kB) 生成されたlev_flex.cを確認すると、やはり追加地形等の処理が抜けている。 でもvanillaの処理はきちんと含まれている。 ->lev_comp.lの書式やファイル形式の類を壊したとかいう話ではないらしい。 ということは、これらが抜けた状態の元内容がどこかに保管されているはず… 結論:   コンパイル時にutil/lev_flex.cが必要になった時には   sys/share/lev_flex.c 「ではなく」   sys/share/lev_lex.c からコピーして生成している sys/share/lev_lex.c に、FHSパッチ用のlev_flex.cをリネームして上書きしたら きちんとコンパイルできるようになりました。 忘れないうちにメモ書き。 ------------------------------------------------------------ -2017/09/03(続) (FHS patch 0.8.28c(JNH343)) ぎゃあ(> <;) --bug 0828b-N015 [343版] 怪物の装備の一部が生成されない.特にノーム族やノール族(G)は 何も装備せずに生成される ( include/config.h にて,FHS_M_INIT と HONEY_WEAP を定義する必要あり) とりあえず手元で庭師ノームとかを有効にしてみて気づきました(T T)。 360から逆移植した際に、向こう限定で使ってた定義が残ってたか… 修正して0.8.28cをUp。 まだ誰もDLしてないうちに気づいて良かった… ところで、昨日Upしたうち Special Hallucination の360版だけ DL数が1になっているのですが… 自分で間違えてクリックしたのだろうか、覚えてない(- -;)。 ------------------------------------------------------------ -2017/09/03 (--) …むむむ、思ったより消耗が激しい。 活力を充填した方が良さそうだ… 再開する時のために、突破口になりそうなメモだけ置いておきますね。 まずは気力充填に勤めます… ---- [HTMLDUMP] [cmd.c] output_html_last_message(fp) ↑が360版では機能していない # struct WinDesc *cw = wins[WIN_MESSAGE]; をタイル版で使おうとするとエラー  # ->343版では ifdef TTY_GRAPHICS でテキスト版限定に分離していたが、  #  360版ではこの方法が使えないため暫定的に中味を無効化している ---- [DUMPLOG] [pline.c] #ifdef DUMPLOG char* saved_plines[DUMPLOG_MSG_COUNT] = {0}; #endif ↑で文章履歴を先行保存している [end.c] dump_plines() ↑読み取り用はこちら saved_plines[]から読み取り ---- ------------------------------------------------------------ -2017/09/02 (FHS patch 0.8.28b(JNH343)、 Special Hallucination patch 1.0.6-JNH36008/JNH34311) ようやく移植と修正と改良完了。 3.4.3版、Upしました。 …あ、更新履歴を試験版用のファイル(history_test.txt)から正式版用の(history.txt)に移してなかった。 まあいいや。 ---- 同時に、Special Hallucination patchもVerUp。 主な改定は、  ■墓石の文字に,神名を含むパターンを追加 FHSパッチで実装済みだったのですが、こちらでも使えるようにしました。 あと、3.4.3版には前回入れてなかった機能も実装。  ■「幻覚中は画面上に表示されるもの全てが神名を冠するように」する機能  ■啓蒙時,3.4.3版でも常に幻覚状態について表示する機能(v1.0.5時点で削除されていたものを再実装) ---- さーてと、基礎固めも一段落したので また新しいことにとりかかれます。 近頃は3.6と3.4のすり合わせにかなり労力とられてたから(^^;)。 まあ、これはこれで双方間の移植のコツもつかめるので悪くないですけど。 ゲヘナの分岐とか、3.6版で追加した新要素を3.4に逆移植とか 思いつくものは色々とありますが、 とりあえずやってみたいのは、NetHack Patch Databaseで見かけたパッチの試験。 どうやら、3.6版でメッセージ履歴を出力できるっぽい。 私の方は、当メモでも幾度か触れているとおり HTMLdumpで該当機能だけ失敗しまくってるので… 何とか導入してみたいところ。 ------------------------------------------------------------ -2017/08/21 (--) 前回公開した小隊設定(platoon)や幻覚関係(Special Hallucination)の辺りの改良を FHS 3.4版にも移植中。 その過程で   FHS 3.4版のmcastu.c追加箇所を全面的に書き換え しておりました(^^;)。 3.6ともすり合わせしつつ、ちょこまか改良もしつつといった感じ。 その過程で、あれやこれやとちょこちょこバグの見つかること見つかること(^^;);;; …や、笑い事ではないですが。 とりあえず、mcastu.cの分も一段落したので、残りの部分の移植も再開。 まずは、これら全体をきっちり移植するのが最優先かな。 それが出来たら一旦テスト版として出した方が良いのかも。 バージョンを上げるなら、もう一ひねり欲しいところだけど 今のところは形になっていないどころかイメージも掴みきれてないような 素案ばかりという状況なので…  #それらの案を実現するためには試行錯誤が必要。  #なので、結局は基礎部分を先に固めてから、ということに。 ------------------------------------------------------------ -2017/08/10 (FHS patch 0.8.30_JNH36008_20170810、 Special Hallucination patch 1.0.5-JNH36008/JNH34311) アイデアメモ書き。 防具: 棘つき肩アーマー(spiked shoulder guard) 胴体防具。防御力は未定。 最大の特徴は「体格がMZ_LARGEであっても着用可」であること。  #確かMZ_LARGEだと鎧が着られなかったはず。 欠点は、魔法を失敗する可能性があること。 下手に身振りが大きい呪文を詠唱すると、頬に刺さるからね… (ス○イヤーズすぺしゃるの何話だっけ) 閑話休題。 ---- 以前にさんざん悩まされたHTML dump patchの不具合 [dasoku_FHS_patch16.txtより] > 「cmd.cにあるset_last_message_to_html()の内容を(再び)無効化した」 タイル版のせいで、テキスト版まで終盤のメッセージ出力を無効化せざるを得ない状態なのを どうにか直せないかとあがいてみたのですが… タイル用の処理として #ifdef USE_TILES が使われているようなので #ifndef 〜 を使って該当箇所を分離した上で再挑戦したものの、 HTML出力時に落ちるように。 三たび無効化しました。 何なんだ一体… 閑話休題。 ---- 前回のメモの後、何やかやと色々あって(一気に改良したりバグ等があれこれ見つかったり) 今までかかってしまいましたが、何とかFHS360試験版を更新。 ・新規改良箇所の例 まだ一部ですが、特定の怪物選択用の処理を改良。 今までも絶滅対策は組み込んでいたのですが、今回は3.6の処理も踏まえて 更に色々手を加えました。 また、参照用テーブルをis_**() (特定の怪物達を表す処理)とも共用するように。 ・バグ等の例 --bug 0830-014: [SP_HALLU] 20170710版で幻覚を受けた時に幻覚が治ったり, マイナスの幻覚値が設定されエラーメッセージが出たりする …うん、洒落にならんですなこのバグは。 それと共に、Special Hallucination patchも更新しました。360用と343用あわせて。 今回は360用のパッチを343用に逆移植した訳ですが、打ち間違いも出てくるし 細かい処理の違いも続出するしで、それらを切り分け振り分け… まあ、両方とも何とかなりました。 ---- 最後に1つ気になったことを。 書いておかないと忘れちゃうしね。 現在、343版はBCCで、360版はGCC (MinGW) でコンパイルしています。 このうちGCCの方が、どうもflex等の導入がうまくいってないっぽい。  *(BCCで導入しているものと思しき)yaccとflexをbinフォルダに放り込む->機能せず(?)  *GCC用と思しきbisonとflexを探して導入->機能せず(?) desファイルの地形図にvanillaで使われていない記号を書き込むと、その行がエラーを 起こしてコンパイルに失敗します。  #例え新規地形が導入されていなくとも、床などの従来地形として読み込むよう  #設定してあるのですが、それも機能しない。 で、flex等の導入方法が悪かったのかと思い、MinGWに付随するMSYSというものを 初めて導入。(中にbisonやflexも含まれている模様) …MSYSのファイルが、のっけから1行目でエラー吐いて即停止 orz 即座にアンインストールしましたよ、ええ。 以前にdesファイル用の新規フラグ関係を実装できなかったのも、これが原因かなあ。 となると、解決するまではこれらの要素は343版限定で実装していくことになりそう。 むう。 ------------------------------------------------------------ -2017/08/03 (--) 怪物が武器を振るうメッセージをFHS360版にも移植してみたのですが、 wizardモードで確認しようとしたら、何故か召還した兵士達が どいつもこいつも短剣だのナイフだのばかり装備したり投げたりする。 小剣や槍を持っていればそちらを優先的に使うけど…長柄武器どうした。 武器の選択処理を変えた時に何か変な事をしたのかとばかり思って焦ったけど、 よく見たら兵士の装備に小さい盾が。 …あー、兵士はドワーフと違って、初期装備に両手武器があってもお構いなしに 盾が追加され得るのか。 武器はm_initweap()で、防具や道具はm_initinv()で別々に装備選んでるからなあ。 (ドワーフはm_initweap()内で防具も一緒に選択している) 根本的に直すには、FHSパッチの処理を丸ごと移植する必要があるかなあ。  #FHSパッチでは、こうした食い違いを無くすために  #m_initweap()を丸ごと消去しm_initinv()に統合。  #確か元コードをばっさり大量に削除している唯一の箇所。 …と思ったら、FHSパッチでもこの辺考慮してなかった。修正修正。 それか、FHSパッチの追加兵士達も全部実装して、その上で役割分担をさせるとか。  ・兵士(soldier): 現在の通り  ・兵卒(private): 槍や投げ槍と大きな盾で重装歩兵化?  ・歩哨(sentinel): FHSパッチ3.4でも弓を持つことがあるが、完全弓兵化? …新たに重装歩兵(phalanx)を追加した方が良いのだろうか。 閑話休題。 ---- ドワーフType2 (Dwarf Knight: from dNetHack) ですが、 次回版では、現在の公開版で抜けている箇所を実装します。 内容はこんな感じ。 ---- **[DWARF2] -ドワーフ Type2(Dwarf Type2)クエストの後半〜最下層の地形をdNetHack準拠に変更 --階段が無くなります **[DWARF2_ATTK] -dNetHackから以下を移植 --新規ダメージ属性: AD_STDY ---*一時的に,受けるダメージが増加する ---*使用怪物: オークの隊長,ボルグ ---- その一方で、 >  ・ドワーフ Type3 (Dwarf Noble: from dNetHack) について、クエスト文の翻訳は一応完了しました。 内容は指輪物語をベースにしているため、再度図書館から借りてきて そこかしこの台詞や文章を原典とすり合わせてみたり。 地図(desファイル)の調整はこれからになります。 アイテムとして未精錬のミスリル鉱石(灰色の石)が追加されているけど、 現在の所は特に材料になるわけでも聖器の素アイテムになるわけでもない、 単なる高価な石…実装どうしようかなあ。 …ですが、そうしたもの以上に1つ大きな問題が。   扉の位置に刻まれている文字を、扉が閉まった状態で   どうやって読めるようにしたものか orz ぐぬぬぬぬ。 '/'コマンド等でマップ上からでも読み取れるように出来ればよいのですが、 とりあえず、vanilla 3.6にはその機能が無さそう。 無論、FHSパッチにもありません。 …一応、brassから移植したコードの中に「店の扉に刻まれた文字」用の処理が 見つかったのですが、値の指定だけはしてあるものの、brassでも実際の中味が 無い(機能していない)っぽい? 折角の原典準拠ギミックなので、何としてでも上記の懸案を解決して 公開に持ち込みたいのですが…むむむ。 処理の流れはおぼろげに想像つくから、自力で組まないと駄目かな… ---- その後、最初に述べた兵士の盾装備の調整に始まり、 怪物に初期装備を持たせる処理を色々といじっておりました。 なんかFHSパッチで追加したものが、種類が複数ある上に内容がごちゃついてたので。 [vanilla343] mongets(): return (spe) :speはis_mercenary()の鎧選択でのみ使用 [FHS343] mongets2(): return (AC + spe) :AC + speはis_mercenary()の鎧選択でのみ使用 :MATERIALS時はmaterial設定有効 :adjust_mongetsobj()使用 adjust_mongetsobj(): void(no return) : void(no return) :mongets()から祝呪調節etcを分離したもの :MATERIALS時はmaterial設定有効 mongets_initinv(): return(obj) :return(obj) は幾つか使用 (後に聖器化、PM_NAZGULや僧侶やis_hobbit()の祝呪、 S_LEPRECHAUNの金貨枚数、PM_SHAKY_GOBLINのspe、 oniの皮の種類、S_ZOMBIEの痛んだ武具、 S_RODENTのシャツ設定、etc.) :ランダム聖器生成可 :一方、material設定がない (UNDEF_MATERIAL[指定なし] で固定) :灯火の自動点灯 :矢の自動生成 :adjust_mongetsobj()使用 ---- 問題なのは、mongets_initinv()を使っている箇所が思いのほか多く、 普遍的な生成の際に材質設定が上手くいっていなかったこと。 本来なら「鉄や銅などの高価でない材質に限定」とか 「金銀含むけどミスリル等の魔法金属は含まない」といった指定も おおざっぱに可能なはずなのですが、この辺りがうまく処理できていなかった。  # mongets_initinv()を通した場合、  #材質指定は必ず UNDEF_MATERIAL[指定なし] に… 普通のゴブリンの装備に銀製やらオリハルコン製やらが混ざっていたのは これが原因ぽい(- -;)。 …これらを以下のように変更。 処理が複数あるのは変わらないけど、使用目的を明確にして分担させました。 [vanilla343] mongets(): return (spe) :機能としては従来どおり :内部処理は主に mongets_core()[生成] + mpickobj()[怪物に拾わせる] :mongets2()やmongets_ac()とは違い材質指定はできません [FHS343] mongets2(): return (spe) :下記のmongets_ac()からAC関係の処理を省いたもの :材質指定が可能 以下のものでも全て可能だが、こちらは最も単純単機能 mongets_ac(): return (AC + spe) :(機能は旧mongets2とほぼ同様) :戻り値(AC + spe)はis_mercenary()等の防具生成の際に集中的に使用 mongets_core(): return(obj) :mongets()の生成部分だけを独立化させたもの :なので単独使用の時は mpickobj()[怪物に拾わせる]を別口追加する必要あり :戻り値がobj[アイテム]なので、単独使用すれば 生成後のアイテムに更に特別処理を重ねることが可能 :もう1つの特徴は「聖器が自然生成され得る」かどうかも設定可能なこと :ちなみに通常使われるアイテム生成(mksobj())と違い、 これ自体にも生成後の基本的な処理がある程度含まれています :灯火の自動点灯や、怪物の種類によっては祝呪や強化値などの調整etc. :materialに関しては、吸血鬼に銀製の武器を持たせない等の処理も含まれている ---- …で、本日(08/03)の時点ではFHS360にも小隊設定(platoon)関係を実装中。 兵士類の追加は終わったのですが、やはり指揮官や将軍を単独で登場させるというのは 何か物足りなくて。 これがうまくいけば、一部の怪物は別種の部下を引き連れて登場するようになります。  #vanillaでは「単独出現」か「同種の群れ」のいずれかに限定されている それと共に、色々書き換え実装中。  ・is_**(ptr): 特定種類の怪物郡の指定 [include/mondata.h] is_bat()とかis_elf()とか。  ・**_num() 等 : 特定種類の怪物郡からランダムに1種類選択 [makemon.c等]  ・platoon用の部下選択処理 [makemon.c] 指定1種類、指定シンボルからランダム、特定郡からランダム等。 ランダム選択の場合「隊長より高Lvのものは除外」等の制約あり この辺まとめて、全面書き換えになりそうな勢いで再構築中。 今しばらくお待ち下さい。 ------------------------------------------------------------ -2017/07/10 (FHS patch 0.8.30_JNH36008_20170710) FHSパッチ360、VerUpしました。 内容は、前々回(02/18)や前回(07/02)で触れたものに加え、以下を追加。  ・[DWARF2][RANDOM_QUEST] クエスト追加: [種族] ドワーフ Type2(Dwarf Type2)  ・[RANDOM_QUEST] 特定種族と職業の組み合わせで、特定の種族クエストを必ず受けられるようにした 新クエストは、 dNetHack の Dwarf Knight quest から。 従来のドワーフクエストとは、一味違った内容になっています。 また今回から、特定の種族クエストを指定して攻略できるようになりました。 上記の2番目の要素ですね。 なおこれらは「本来その職業では選択できないはずの組み合わせ」となっているため、 その種族で職業クエストを受けることは出来ません。 |種族/職業 |クエスト | -------------------------------- |エルフ/盗賊 |ドロウ | -------------------------------- |エルフ/戦士 |エルフ | |ノーム/戦士 |ノーム | |ドワーフ/戦士 |ドワーフ | |オーク/戦士 |オーク | -------------------------------- |ドワーフ/騎士 |ドワーフ Type2| -------------------------------- なお、上記のうちドロウクエストに関しては仮設定です。 dNetHackのドロウ(プレイヤー用種族)が、ぱっと見たところ結構よさげなので、 そちらを移植できたら当クエストもドロウ用に切り替えます。  #…ただ、Drow General questは移植できそうもないけど。  #通常はクエストメッセージは番号100以内に収まっているのに、  #これだけ200近くまであるし(汗)。  #どういうからくりなんだろう。 ---- で、これからの予定…のうち、とりあえずクエスト関係について。 次に控えているのは幾つかあるのですが:  ・海賊 Type1 (Pirate: from Slash'EM Extended) とりあえずメッセージ類は翻訳済み。 マップファイルは3.6に合わせて色々と手を加える必要がありそう。  ・海賊 Type2 (Korsair: from Slash'EM Extended) とりあえずクエスト最下層は描き変え中。 クエスト内容は総入れ替えになりそう…だけど案が思い浮かばない。  ・戦士 Type3(再) こちらもクエスト内容を再整備したい…けど案が(略)。  ・ドワーフ Type3 (Dwarf Noble: from dNetHack) また別内容のクエスト。鋭意翻訳中。  ・ジェダイ Type2 (オリジナル) 粗案は固まっており、クエスト用の文章作成中。 いざ文字に起こすとなるとなかなか難しい。 まあ、そう簡単に出来るものじゃないです。 それにしても、特に 海賊 Type2 と 戦士 Type3 のクエスト内容をどうしたものか。 現在決めている条件は以下の通り:  ・海賊 Type2クエスト改案 * 属性は秩序 * リーダーおよび宿敵などは、特に変更しない場合はKorsairクエストのものを使用 * クエストガーディアンについては、海賊Type1と共用にする * 最下層のMapは描きなおし中    …トカゲ王の島でも参考にしてみるかなあ(ぼそり)  ・戦士 Type3(再)クエスト改案 * 属性は中立 * リーダー等の各種設定は、現在公開中のクエストから流用して可    現在公開中のものは、一応基にしたのが「Mahou Shoujo」なので、    ○リキュアとかの魔法少女ものにするのも手です。 #但し○ー○ー○ーンは避けた方がよいかも(Type1の元ネタとして既出)。    もし○リキュアネタを用いるのであれば、確かyzhackに一般聖器(反射の盾)が    あったような。    とはいえ私は○リキュア等に関しては詳しくないので…    どなたかクエスト作成に挑戦してみます? ------------------------------------------------------------ -2017/07/02 (FGS patch 0.8.28a_JNH34311) お久しぶりです。 FHSパッチ360の方は、以下の要素をちょこまか移植中。  ・[HONEY_WEAP] : 武器関係の処理をデータ構造含め大幅に変更、武器多数追加  ・[CALC_MULTISHOT] : multishotの処理の調整  ・[HONEY_HELM_ALIGN] : アイテム追加 : 秩序/中立/混沌の兜  ・[PLOT_WEAP] : 武器の詳細性能を表示する処理 特に最後の武器性能表示についてですが、大きな変更がありまして。 > --#(現在は「武器識別の魔法」「店での確認サービス」は未実装) > > -※3.6版での大きな変更: > --「Ctrl-C」又は「check」コマンドで,選択した武器の詳細性能を確認可能にした 今までも「武器識別の魔法」「店での確認サービス」にて 以下のような感じで表示できるようにしていたのですが、 これを普段から表示可能にする(予定)というもの。 ----ここから---- オークの短剣の特性(装備中): 武器スキル:短剣類 片手持ち 投擲可能 小型の敵に対し: 1d3 (+強化分: +1) 大型の敵に対し: 1d3 (+強化分: +1) 命中ボーナス: +2 (+強化分: +1) ----ここまで---- さすがに今どき、武器性能を非表示にしておく必要もないでしょうし。 …「武器識別の魔法」や「店での確認サービス」には、識別効果は付随してたっけ? 無ければその効果を追加して差別化したいところ。 ---- ただ、今回の移植は前回の蛇足メモの頃前後に作業を終えていたものがほとんどで、 その際にペースとなるJNetHackを0.8にVerUpしたか覚えてない(- -;)。 なので、それらの確認等もありこちらの公開は様子見。 代わりに… 3.4版の方を 0.8.28aにVetrUpしました。 今回「は」3.6版への移植中に気づいたバグのbugfixが主ですけどね。  #但しこれだけは直せませんでした。  #小手先の修正だけで済むものではなさそう。  #  #> --bug 0828-N007: [343版] 点灯しているアイテムを投げた時に命中率が極端に低くなる そして、これからの作業予定も一部変更。 3.6版への移植を進めていくのは勿論ですが、 「それでは間に合いそうも無い新規要素」を実装するために 3.4版の方のVerUpも当分続けていこうと思います。 例えば、「ゲヘナに分岐階層を作る」「新規方式の自動生成式マップ構築」などといったものは、 追加地形や階層処理の変更が充実している3.4版の方が圧倒的にやり易いです。 3.6版でやろうとすると、先にこれらを全部3.6版に移植しておく必要がありますからね。 勿論、実装するもののスケールによっては関係処理ごと3.6版に直接実装するのもありです。 なので、どちらに実装するかはケースバイケースで。 ------------------------------------------------------------ -2017/02/19 (--) 前回の文章に一部追記。 私も構造をよく理解している訳ではないので 何かしら思い違いしている可能性もありますが、少なくとも何もしないよりはマシでしょう。 それにしても、毎度の事ながら報告というものは神経磨り減るし気が重い… なるべく的確に、正確に相手に伝えるように(伝わるように)まとめなきゃなりませんからね。 自分がどれだけ的確で正確に理解しているかも問われるし、 相手がどこまで理解可能かも判らないというのに。 なのでバグ報告なんかも、そのたびに七転八倒しながら行っています。 ------------------------------------------------------------ -2017/02/18 (--) JNetHack 3.6.0-0.8 リリース。 いつもお疲れ様です。 しかし私の方ではFHSパッチからちと目を離していたという。 で、何をしていたかというと… ---- FHSパッチの移植、前回からあまり進んではいません。 厳密に言うと、進めたのは主に:  ・前回の試行錯誤時の残骸コード削除  ・乱数にメルセンヌツイスタ導入  ・オーバーフロー対策関係。 …ゲーム内容に関わるものが禄に無いという(- -;)。 で、最後のオーバーフロー対策ですが、今回構築したのは3つ。 > **[HONEY_OVERFLOWED_ARTIFACT] > **[HONEY_OVERFLOWED_TRAP] > -FHSパッチ(FHS patch 3.4)より以下を移植 > --聖器の種類のオーバーフロー対処 (128以上) > --怪物が記憶できる罠の種類のオーバーフロー対処 (longのビット数以上) > > **[HONEY_OVERFLOWED_LOCATION] > --地形の種類のオーバーフロー対処 (128以上) 地形に関しては必要ないかもしれませんが、途中まで進めていたので一気に仕上げました。 ---- …とか何とかしている時に、ふと気になったこと。   HONEY_OVERFLOWED_TRAPで怪物が記憶できる罠の種類のオーバーフロー対処をしているけど、   この部分、Slash'EM Extended ではどうなっているんだろう。   (確か、罠の種類が200個以上あったような…) で、確認してみたのですが、   該当箇所(mtmp->mtrapseen 関係)がvanillaのまま、手付かず(汗)。 …これ、かなりまずいのでは。 というのも、怪物が罠にかかったとき、以下のような処理をしてその罠の種類を記憶させる(多分)のです。 > [trap.c] > mtmp->mtrapseen |= (1 << (tt - 1)); ですが、記憶場所であるmtrapseenがどのようなものかというと、 > [monst.h] > long mtrapseen; /* bitmap of traps we've been trapped in */ …これ、 "sizeof(long)" (longのデータサイズ)以上の種類(番号)の罠が存在する場合、 怪物がそれらの罠にかかった時に、 オーバーフローした先にあるデータ(何があるかは知らない)を書き換えてぶち壊しますよね? (汗) ちなみにHONEY_OVERFLOWED_TRAPでは、新たに mtrapseen2 を設定し mtrapseenに入りきらない分はそちらで記憶させるようにしています。  #(02/19追記):構造をよく理解している訳ではないので  #何かしら思い違いしている可能性もありますが、少なくとも何もしないよりはマシでしょう。 但しこれも、今のところFHSパッチの罠が64種類以下だから通用するのであって、 Slash'EM Extended で同じ事をしようとすると… mtrapseen 幾つまで用意する必要あるんだろか(- -;;;) さすがに見てみぬふりともいかないので、報告用に GitHub アカウントも作って つたない英語で Slash'EM Extended のダウンロード場所の issue に報告しておきました。 ------------------------------------------------------------ -2017/02/08 (Special Hallucination patch 1.0.4) Special Hallucination patch も更新。 FHSパッチの方で追加調整していた要素も反映させました。 あとはFHSパッチ3.6版の要素追加状況を軽く一覧にしてみたり。 今はとりあえず職業と聖器関係だけだけど。 こうしてみると3.6版での新規要素もちょこちょこ有るんだなあ。 ------------------------------------------------------------ -2017/02/07 (FHS patch 0.8.30_JNH360_20170207) 最初に配布の告知を。 FHS patch 0.8.30_JNH360_20170207版を公開。 この状態にもってくるまでにも色々ありまして… 閑話休題。 --- 3.6改造用の覚え書き。 ・地形 追加方法(3.6): dasoku_FHS_patch15.txt 参照   #忘れた時にいちいちGrep検索繰り返すのも何なので。  ソースを見たところ、3.6でも通用しそうです。多分。 ・怪物 追加方法(3.6): ほぼ3.4と同じですが、注意点が1つ。 SIZ(30, 10, 0, MS_SILENT, MZ_TINY),  の項目のうち、中央の "0," は廃止されました。   #元々3.4でも使用されておらず、全ての怪物で0になっている  ここを削除かコメントアウトすれば大体通用すると思います。 ・アイテム 追加方法(3.6): ほぼ3.4と同じでいけそう。 ・聖器 追加方法(3.6): これも同じく。 ・特性など 追加方法(3.6): これも3.4の手法が通用する…かな? ・特殊階 追加方法(3.6): 幾つか仕様が変わっているので注意。詳細は後述。 ・特殊階の記述コード 追加方法(3.6): 一部失敗。 罠の追加など、大体は上手くいきそうですが、 アイテムの特殊な位置設定の追加はことごとく失敗。    ×ランダムな怪物のインベントリに最初から入れておくコード    ×特定の怪物のインベントリに最初から入れておくコード    ×水上/水中へも配置可能にするコード brassからの移植だけでなく、今回欲しくなって追加しようとしたものも含めてです。 util/内のファイルにおける該当箇所の記述がまるっきり変わっていて、 全くもってちんぷんかんぷん、取り付く島も無い状態 (T T)。 ---- さて、特殊階のdesファイルの記述方法ですが、 色々と新しい仕様が組み込まれています。 3.4までの書式だとエラーが続出するので、細かく手直ししていきましょう。 以下、変更点の一部。 ・怪物やアイテムは、シンボルと具体名を1まとめに()で括って扱うようになりました。 MONSTER: ('G', "gnome"), random <- ランダムな位置にノーム配置 MONSTER: ('G', "gnome"), (03, 15) <- 従来どおりの位置指定方法 MONSTER: 'G', random <- ランダムな種類の'G'を配置する場合はこうなります  (従来より random の記述数が少なくなる) ・容器にアイテムを収めておく場合も {} で括るようになりました。 CONTAINER:('(',"chest"),(13,10) { OBJECT:'?' } ・あとはランダム位置の指定方法が変わったり、 $place = { (04,02),(58,02),(04,14),(58,14) } SHUFFLE: $place ・こんな繰り返し指定も出来るようになったり。 LOOP [9 + 2d5] { [90%]: OBJECT:('`',"boulder"),random OBJECT:('*',"rock"),random } ・ランダム範囲を一定範囲内に収めることも可能になっています。  以下は mines.des から引用。 # the Orcish Army $inside = selection: floodfill(18,8) $near_temple = selection: filter(fillrect(17,8, 23,14), $inside) LOOP [5 + 1d10] { IF [50%] { MONSTER: ('o', "orc-captain"), rndcoord($inside), hostile } ELSE { IF [80%] { MONSTER: ('o', "Uruk-hai"), rndcoord($inside), hostile } ELSE { MONSTER: ('o', "Mordor orc"), rndcoord($inside), hostile } } } # shamans can be hanging out in/near the temple LOOP [2d3] { MONSTER: ('o', "orc shaman"), rndcoord($near_temple), hostile } ・他にも細かい点で色々違いがあるようなので、 既存のdesファイルを参考にするとよいでしょう。 ---- そうそう、ライトセイバー用に扉の#force等を移植する際、 lock.cの変更点があまりにも多すぎて #ifdef 方式の移植だとぐちゃぐちゃになってしまったんですよね。 なので、折角だからとページごとSLASH'EMベースに差し替えて、 3.6のコードを参考に可能な限り改造。 なお今の所はArtifact Door関係だけコメントアウトしています。 ---- 3.6やSlash'EM Extended等のコードは、 まだまだ移植の際に関係する箇所や興味の有る箇所を拾い読みしている程度ですが 学べることは多いです。 例えばantholemon()。 蟻の巣に出る蟻の種類を決めるための処理で、表には出ない箇所ですが、 3.6では地味に絶滅対策の改良がなされています。 しかも私が組んでいたもの(beenumとか使っているもの)よりもスマートに処理できていそう。 Slash'EM Extendedだと、例えば反射関係とか。 FHS patchでは分光の魔除け(amulet of prism)や歪曲の魔除け(amulet of warp dimention)を 追加していますが、この効果を判り易く調整している模様。 prism reflection/warp reflectionとして扱い、通常の反射能力に上書きするものになっています。  #実はこれらはランダム方向に反射する代物で、  #着用者に向けて反射(=直撃)することもありちょっと危険。 うーむ、私も頑張らないと。 ---- ジェダイ関係の移植、ようやく一段落しました。 #jumpについても3.6では新たに「飛べる位置の可視化表示」が可能になっていたので それに合わせて色々と調整。 また、ライトセイバーだけでなくROBE_ARMOR関係も移植しなくてはまずいと判明し、 ローブ類の仕様も移植。  #ローブを外套ではなく胴体防具として扱うようにし、各種の特殊ローブを追加するもの。  #ジェダイはローブ以外の胴体防具を着るとライトセイバーの命中率ががた落ちする。  #FHSパッチでは「布製の服or革の服(レザージャケット)」ならば多少はマシになるよう  #調整していたが、今のFHS3.6版だと革の服とセーラー服しか該当するものが無い。  #(まあ、未移植の服も↓のようなラインナップですけどね(^^;)。  # > 迷彩服・学生服・看護服・メイド服と不思議なことに  # (dasoku_FHS_patch15.txt参照)) むう、やはり元々はSLASH'EM用の追加職業だけあって、 3.6ベースだと不足する要素が多いなあ。 で、3.4版から追加ローブを移植すると同時に、更に新たなローブも追加。 これも他ヴァリアントから移植しようとしたけど、 dNetHackはそもそもvanilla準拠なので新規ローブ無し、 SlashTHEMでは Slash'EMと同様のラインナップ。 Slash'EM Extendedには色々と追加されていたけど… 興味を引いたのは魔力回復速度が上がる「魔力確保のローブ(robe of fast casting)」位。 なので頭をひねって幾つか自作しました。  ・フォースのローブ(robe of channeling force)    ジェダイと同様に、フォースを用いた#jumpが可能になります。     #正確には、FHSパッチ仕様なので     #「#jump時にフォースによる飛距離補助が可能になる」です。     #跳躍能力の有無に関わらず、     #「通常は届かないがフォースでなら届く」位置に飛ぼうとした場合に     #魔力を消費してそこまで跳躍することが可能になります。(選択式)  ・土のローブ(robe of stones) / 水のローブ(robe of waters) /   金のローブ(robe of metals) / 風のローブ(robe of winds) /   火のローブ(robe of fire) /    はい、五行のローブです。    各属性に耐火などの耐性を割り振っています。    ROBE_ARMORだと武闘家や僧侶の初期装備のローブには特殊能力がつかなくなるので    その代わりにこれらの1つをランダムに支給。     #ジェダイおよび巫女のローブは今のところ変更なし。     #ジェダイにはライトセイバーがあるし、     #巫女には弓がある上にペットがユニコーンの仔なので。    ちなみに英語名は、武闘家の職業ランク名そのまま。  ・仙人のローブ(robe of hermit)    霞を食って…とまではいかないものの、遅消化の効果つき。 --- さてと… 他に手がけてみたものは、まだ形になってないなあ。 ・ジェダイ Type2   別バージョンのクエストですね。   今の所はほぼ案だけ。   一連のクエスト文を整備すればいけると思うのですが… ・海賊(Pirate)/私掠海賊(Korsair)   一応、2バージョン訳しました。   …が、色々あって停滞中。   詳細は長くなるので後述。 ・HONEY_FUNNY_BURST   o_init.c内の処理がまだまだ半端。   試験も必要になるだろうし。   未識別名による特殊効果の処理を扱い易くなるから、早めに導入したくはあるのですが。 ・追加地形   こちらは手がかかりそう。今のところ手付かず。   これらを追加しないと、ゲヘナ等の追加マップや追加の特殊部屋などの処理が片手落ちに。 むう、即効性のありそうなものはなかなか無いなあ。当たり前か。 --- さて、海賊(Pirate)/私掠海賊(Korsair)についてですが、    ・Nethack Patch DatabaseにあったPirate patch 0.13 未完成状態。そもそも地形ファイル(.des)が無いし。 クエストも訳してはみたけど…これってもしかして、観光客のクエストそのまま?    ・Slash'EM Extended の職業 Pirate こちらは独自のクエスト内容。 どうやらThe Princess Brideという小説/映画(非18禁)を元ネタにしている模様。 desファイルに関しても、3.6仕様で色々改良などしてみました。    ・Slash'EM Extended の職業 Korsair クエスト内容は…Pirateと一字一句同じ。 なのでこちらでは矛盾しまくり。  #会話中に出てくる「敵対していた海賊」の名前が  #クエストリーダーそのものだったり、  #宿敵が水棲生物なのにぺらぺらしゃべりまくっていたり。 desファイルも、地形は全く同じ。…水の無い階で水棲生物戦わせてどうするのかと。   現在の問題:   ・クエスト聖器をどうしたものか。 Pirate patch版だと「マローダーの地図(The Marauder's Map)」 #invokeでアイテム感知も可能な、魔法の地図の巻物。 読んでも消費しません。 (なおSlash'EM Extendedでは一般聖器扱い。海賊の優先聖器になっています) Slash'EM Extended版だと「プロテウスの宝物庫(The Treasury of Proteus)」 中の物が時間経過で自動的に変化する宝箱。 自動ポリパイル機能つきといったところです。 Korsairのクエスト聖器は「智の真珠(The Pearl of Wisdom)」 HPダメージ半減効果のある…何故かフェドーラ(帽子)。 うーむ、Slash'EM Extended版のクエスト内容は宝物庫でないと合わないように なっているけど、無限ポリパイル可能な聖器というのもどうかと。 その一方で、元が宝箱なのでかなり重く、逆に役立たずという評価に なりかねないという懸念も。 それに他のもどうしたものか。 宝物庫1種類だけで済ませてしまうのも可能だし、全部実装してしまうのも手ですけどね。   ・メッセージの変化を反映させるか 実はSlash'EM Extended版だと、"You"を"Ye"とするなど、 訛りの有る文章になっています。 和訳では特に反映していませんが…  #村上水軍のあった四国地方の方言にでもしてみる?  #…出来そうな人お願い(マッテ)。 また、これが通常メッセージ等全てに適用されるのですが、 そこまでする気はさすがに無いです…   ・Korsairをどうするか 当初は海賊 Type3(秩序)として実装するつもりだったのですが、内容がこれでは… うーむ、なかなか難しい。 ---- と、いつまで先延ばしにしていても埒が明かないので 一念発起し、移植範囲が狭そうなものを一気に移植。 ・食料品関係 果物だの菓子類だのパンだの色々と、ごっそり移植。 逆に今回移植しなかったのは:   ・ハーブ類(雑草以外): 薬関係に丸ごと影響する   ・仙豆/仙桃: 特殊処理が必要そうなので   ・どんぐり/椰子の実/こげぱん: 武器関係の設定(ダメージ)改善が必要になる   ・ケーキ類/蜜類/飴類/クッキー類: 食料品の不確定名を設定できるようにしないと   ・パフェ: クリームパイと同様の扱いになるが、毒液関係と一緒にした方が実装し易い …まだ結構残ってるなあ(汗)。 一応、新規アイテムも増えてます。   ・野いちご(berry): ハーブに含まれていたberry類を分離。 ラズベリーだのクランベリーだのといった分類はまだしていません。   #将来的にはチョコレート/チョコエッグのように、   #冒険ごとに特定の名称と色を割り振る形式にするかも。   ・黄色いお菓子(yellow sweets): 今までは(危険だからと)コメントアウトしていたもの。 他の○色のお菓子と同様に、冒険ごとに通称が変わります。 それと共に、全職業の初期装備に食料品を追加しました。   #大まかな内訳は dasoku_FHS_patch12.txt の頃とほぼ一緒。   #その後も新職業等に3.4版の時点で色々と追加していたので今回反映。   #3.6版で今回変更したのは、ワルキューレの食糧を野いちごにした事位。   #(それと、雑草以外のハーブ類が未実装なので持たせていない) あと、菓子類の表示も変更しました。 --3.4版では「通称名」だけを表示していたものが,「通称名(正式名)」表示となります ---該当品: ○色のお菓子 --3.4版では侍と巫女に限り「季節名」だけを表示していたものが, 職業に関わらず「季節名(正式名)」表示となります ---該当品: ぼたもち …当初は通称名/季節名でも願えるようにしようと考えていたのですが、 それをやるとデータ量も増えそうだし、 jtrns_obj()を通して和英両方に対処する必要も出てきそうだったので 代わりに正式名も併記するようにしました。  #願う時には正式名の方を使って下さい。 ・祝呪表示関係 FHS patch仕様だと、インベントリ内と通常のメッセージ内とで表記が変わります。    j - {祝福}+0 短剣 (10 aum).    どれを置きますか?[$a-l or ?*]    あなたは祝福された+0 短剣 (10 aum)を置いた. インベントリ内では表記が短くなるよう、色々と調整して今の形になりました。 オプション設定で従来表示などに切り替えることも出来ます。 ---- それにしても、今回移植したのはFHS patch 3.4版のほんの一部ですが、 それでもコンパイルの際に、あれが足りない/これがエラー…と大変でした。 配布しようとした矢先に、配布用ファイル側でのmakefile.c更新漏れやら 新たなSP_HALLUのバグも見つかるし。 …おかけで他のパッチの修正版はUpするための準備が全然出来てないです(_ _;)。 これからのことを考えると、これ以上に大掛かりなものも沢山あるし、 全て移植し終えるのはいつになるやら。 まあ、ゆっくりやっていきます。 ------------------------------------------------------------ -2017/01/26 (FHS patch 0.8.30_JNH360_201701**) うーむ、幻覚時の彫像の表示名に手を加えてみたけど、 3.6では幻覚時には「彫像が怪物として表示される」んで意味を成してないなあ。 それに、/で調査した際には 幻覚時の彫像は種族名だけ表示して怪物名は表示しないのね。  #英語版の本家で既にこの状態。 閑話休題。 ---- ライトセイバーの移植、継続中。 当初は該当箇所を拾い上げて移植していましたが、 点灯させるだの扉を焼き切るだのと、影響範囲がそれなりに広いので 現在は方針を変えて、該当ページほぼ丸ごと移植していくようにしています。 とりあえず現在は機能しないコードが多量に混ざっていますが、 中味は一応3.6に合わせて整備しています。 とはいえ、有効化した場合にコンパイルが通るかどうかは不明。   #今は「無効化しているからコンパイル時に問題にならない」ということしか   #確認していない。 例えば、大地の巻物の処理について、 3.6ではdrop_boulder_**()という分割処理がされているので 3.4の時に導入していたdrop_earth()関係はほぼ不要になっている、とか。 この場合、改造加えるにしてもdrop_boulder_**()の方に手を加える事になるでしょう。 まあ、今は大雑把な組み込みだけしておいて、 実際に使う時に再度整備するつもり。 ---- で、その影響でTシャツの文字類を移植して有効化。 移植したり追加したりしていて気づいたのですが、 3.6では読めるアイテムが増えてるだけでなく、シャツの文字自体も大幅に増えてたんですね。 しかしここで問題発覚。 コードの構造が変わってて、「読まなくて良い」Tシャツが追加できない(泣)。  #文字が見えないのが2種類、音が出るのが1種類。 ・3.4の場合:  「オブジェクトのIDをもとにシャツの文字を決める処理」も  「『文字を読んでいない』挑戦の処理」も  doread()内で全て処理している。  なので、前者で決めた文字が特定のものだった場合に  後者の処理を変えるのは比較的楽。 ・3.6の場合  前者がtshirt_text()に分離されている。後者はdoread()内のまま。  なので、選ばれた文字が何であるかの判定がやりにくくなってしまった。   #そのまま組み込もうとすると、前者から後者に本来送られる文章以外にも   #何らかの判定を送る必要がある。 doread()内で直接に別口処理すれば実装可能だとは思うけど… ちょっとそれもスマートではなさそうなので一旦放置。 もしくはプリントシャツ実装時にそちらに組み込む? んー、でもプリントシャツの方はそもそも「読まない」かあ…   #アイテム名で「○○柄のプリントシャツ」等になるため読む必要が無い。 ---- その他、覚え書き。 書いておかないと自分でも忘れそうですし。 [STICKY_FIRE] Crawlの焼夷の炎をNetHakに実装…しようとしたもの。 今の所、timeout.cに多少のコードがある程度。 勿論これだけでは機能しません。 装備に塗られた脂が燃えて蓄積ダメージが増えるとか 案だけはあったけど、すっかり忘れてた。 [HONEY_D_JAMMED] くさびの本来の使い道として考えていたもの。 効果は「扉の開閉状態をそのまま固定する」。 今の所、lock.cの開錠/施錠周りにコードがある程度。 勿論これだけでは(略) [Cocytus / Sheol] コキュートス、もしくはシェオル UnNetHack 5.1.0 にもSheolという階層が追加されていたけど、それとは違います。 焦熱地獄のゲヘナに対し、こちらは酷寒地獄。 最下層にはヴラドの塔…という案。 FHSパッチだと大悪魔の特殊階が増えてゲヘナが手狭になっているので、 追加した特殊階も含めて一部をこちらに移動させようかなと。 さすがにSlash'EM Extended等から導入した追加大悪魔の階層まで 作る気は無いですけどね。   #そちらは専ら、祭壇等での召喚によって   #特殊階の主が不在になることを避ける為の措置なので。 ちなみに案自体はFHS patch 0.8.28のファイルに入っています。 dat/dungeon(sheol_tmp).def がそう。 このまま導入するかどうかは検討の余地がありますが。   #Geryonのレベルはゲヘナ側に戻しても良いかもしれない。   #…と思ったら、これゲヘナとコキュートスで階層数がほぼ同じになるようにしてるのか。 ---- もう一つ覚え書き。バグ。 タイル版での試験中に、床が縦の壁のタイルで埋め尽くされるという事態が発生。 よく調べてみると、どうやら「明るい場所の床表示」がうまくいっていない模様。 (暗くなれば自分の周囲以外は普通の表示になる) テキスト版では表示に問題なし。 タイル番号がずれている訳でもないのは確認。   #他の地形(壁タイルより後)も、アイテム類(壁タイルより前)も、   #爆発の表示(地形類のタイルより後)も表示ずれが見当たらず。 見栄えだけの問題ならともかく、 扉のない出入り口まで壁として表示されてしまうので放置するわけにも行きません。 表示に関係しそうなファイル(mapglyph.c等)の変更点を調べてみてもらちが明かなかったので 配布中のものをベースに、新たに変更した箇所を順次追加していくという荒業を断行。 まずはinclude関係をconfig.h以外全て入れてみたものの異常は見られず。 その次にobjnam.cを差し替える等して、JITEMNAME (和風表示関係)を投入。   なんでここでバグが再現されるんだよorz という訳で、objnam.cが怪しいと判断。 次はobjnam.cを配布中のものに一旦差し戻し、新たなコードを上方から順次 手作業で移植していくことに。 但し手を抜いて、決まった箇所まで丸ごとコピー上書きを繰り返してみる。   …ほぼ全部ごっそり移植しても、今度はバグが起きないんですが =□○_ 結局、残りの部分もコピペで移植したもののバグは再現できず。 これで新たに作成したobjnam.cを、作業フォルダの方にコピーすると、こちらもバグは見られず。 以降、バグの再発はみられず。 何だったんだ一体… 後で再発する可能性もあるので、一応記録は残しておきます。 ---- とか何とかしているうちに、 ライトセイバーをほぼ実装できました。   #肝心のmkobj.cに手をつけずに他の部分ばかり整備してたけど   #いざ手をつけたらあっさりと作業が終わったという。   #まあ、きちんとコンパイル通るようにするには更に時間がかかりましたが。 個別の光刃の色に関しても、なんとか成功。 ・とりあえず色は、obj->madeofと同じ場所に記憶させる   #本来はマテリアルパッチで、個別の材質名を記憶させる箇所。   #(ライトセイバーはプラチナ製なので、マテリアルパッチでも材質変化はしない) ・PCがその色を知っているかどうかは、o->otrappedと同じ場所に記憶させる   #実は武器の場合はHONEY_VENOM_WEAPで、塗られた毒の種類を知っているかどうかの   #判定に使用しています…が、そもそもライトセイバーに毒を塗るというもの変ですし(w)。 ・色を知るタイミングは、「(PC/怪物問わず)光刃を点灯させる場面を目にした時」か、  もしくは「盲目で無い状態で、点灯中のアイテム名を表示した時」。   #後者は具体的には「(該当の)状態でdoname_base()を用いてアイテム名を表示した時」   #になります。   #インベントリ内で「ライトセイバー(点灯中)」等と表示される状態です。   #このように表示するからには、(盲目でなければ)光刃も目にしていることでしょうから。   #wizardモードでも確認しましたよ!   # ライトセイバーを願う(色未判明)   # ->盲目の薬を飲み、ライトセイバー点灯(色未判明のまま)   #  ->盲目のままでインベントリ確認(色未判明のまま)   #   ->そのまま盲目を治療しインベントリ確認(ここで色判明) ・色が判明したライトセイバーは「青いライトセイバー」等と表示される。 まあ、色名表示でもあれこれトラブル続き。 3.6ではclr2colorname()というものが追加されてたので それを使ってみたのですが、     #(聖器の刃が光る時に聖器の固有色を反映させる為、     # データ上で読み取った色番号から文字で色名を出力する処理。     #     # options.cに置かれており何かのリスト表示の際にも使っているようなので     # 本来はそちら用の処理なのでしょうけど)   +0 yellowライトセイバー とか、     #clr2colorname()の内容が和訳されていなかった。   +0 黄色くライトセイバー などと、     #jconj_adj()まで通してはまずかったか… おかしな表示を続出させつつもなんとか修正しました。 これにより、従来は色別に用意されていたライトセイバーは 3種類に統合されています。  ・ライトセイバー  ・両刃のライトセイバー  ・○のライトセイバー(伏字) え、最後のは何かって? 今の所は一般聖器専用の、特製ライトセイバーです。 機能としては両刃のライトセイバーに近いのですが、 両刃のような段階を踏むモード変更(片刃->両刃)では無く いきなり全ての光刃を展開します。 但し燃費は極悪。 正式名は、実際に公開してからのお楽しみということで。 それにしても、FHS patch 3.6版での初の追加一般聖器が、こんなんで良いのか…(w;) ------------------------------------------------------------ -2017/01/12 (FHS patch 0.8.30_JNH360_20170111_21, Random Quest patch 3.1.0) FHSパッチ3.6版、少しずつ進めてます。 その過程で Random Quest のバグに気づき、そちらもVerUpすることになりましたが。 一番まずかったのがこれ。   --bug 0830-005: [RANDOM_QUEST]オークのクエストをリーダーから受けた時に    メッセージエラーが生じる 3.6ではquest.txtの%Cc(複数行一括表示)メッセージには 行末の%Eに一行表示用のメッセージを追加する必要があるのですが, %Cc Orc 00021で設定漏れしていました。 他にもクラス呼称の処理[RANDOM_QUEST2]に関しても色々まずい点があったため、それらも修正。 同時に改善も兼ねてqdatas[]の中に称号の設定も含むようにしました。 ---- 追加職業の方は、まずは巫女を使えるようにしました。 その際に、みそぎ(#purify)のコマンドを テクニック用の「Ctrl+s」キーでも使用できるようにしています。 また、Slash'EM Extendedではクエストの文章が日本語版とは違っていたため 訳してみましたが…実は大部分が武闘家クエストそのままだったという。  #女性を対象にhimと呼んでいたり、  #聖器を拾った時のメッセージが超世界の目のメッセージそのものだったり。 おかしい箇所は適当にアレンジしつつ、巫女クエストType1Bとして導入。 クエストのメッセージや台詞が変わるだけで、他の要素は全て一緒です。  #この為に RANDOM_QUEST3 の処理を追加。  #マップ名やファイル名の要素はそのままに、クエストメッセージのファイル名だけを  #独自に指定できます。 実はSlash'EM Extendedでは祭式も差し替えられていたけど…うん、元のままでいいや。 ---- で、残っている職業はジェダイなのですが、  #Type2のクエスト(洞窟人)を除く ライトセイバーの移植も必要になるんですよね。 また、移植の際にはライトセイバーの色を個別に設定可能にすることを目論んでいます。 そうなるとアイテムの設定項目を根元からいじり倒すことになるので、 オブジェクト関係全般をまとめて移植し反映してからの方がやり易いのです。 まだ3.6の仕様に慣れているとはいえないですし、 大掛かりな移植が必要になるものはちと躊躇してしまいます。 ---- と言いつつ、新職業「吟遊詩人」を実装(マッテ)。 元はBard patch v0.3[Andre Bertelli氏]。 以前にクエストの文章だけ訳し、そのまま放置していたものです。 当時は魔法音楽スキルを実装できる自信が無かったもので。 で、現在ならこれらを導入しているヴァリアントもあるかと思い 探してみたら、ありました。 ・dNetHack ・Slash'EM Extended v1** (…とりあえずver番号3桁) ・SlashTHEM (Slash'EM Extended v65のヴァリアント) このうち Slash'EM Extended には魔法音楽は未実装。 なので、dNetHackを参考にしようと確認していたら、 どうやらBard patch自体がVerUpして、クエスト内容も変わっていた模様。 折角なので両方のクエストを収録することにしました。  #こうした同時収録が(比較的)楽に出来るのが Random Quest の利点の1つよ。 魔法音楽の方もなんとか実装しましたが、 二番目に手間がかかったのは「ペットが一緒に歌う」「怪物が対抗して歌う」処理。 あれこれ手を加え、最終的には原形を留めない独自の処理に。 まあ、段階を踏んでまとめ上げていった為、あまり苦労はしませんでした。 一番手間がかかり苦労したのは、「友愛の歌」関係。 怪物が「friendly」状態になるもの。  #「友好的な」は既に tamed の和訳として定着しているので、  # friendly の方は「懐柔された」と訳しています。 ですが、friendly関係のフラグ類を追加するのにひと騒動、 歌のコードの中にvanillaでは用いられないフラグ類が含まれているのでそれらを除去 …がうまくいかなかったので、最終的には該当箇所丸ごとSlashTHEMから導入して差し替え。 で、一段落したと思っていたら、 何故か手もつけていない sys\share\cppregex.cpp でコンパイルエラーが勃発し、 にっちもさっちもいかない状態に。何故だー!! …最終的には、フラグ名の friend が(sakuraエディタ上で)青文字になっている事に気づき、 何らかのコード文とかち合っているのではないかと推測。 フラグ名を friend から mfriend に変更して切り抜けました。 ---- 上記の作業中に思いついた、戦士クエスト Type3も導入。 元ネタはSlash'EM Extended の"Mahou Shoujo"。 これに伴い「中立の戦士」を解禁。 戦士は全属性(秩序/中立/混沌)、および全性別(男性/女性)から選べるようになりました。  #勿論これも Random Quest が前提。単にランダムにするだけでなく、  #属性/性別/種族による振り分けを設定可能なのも利点の1つ。 マップデータを3.6用に調整したり、 メッセージに関してはRANDOM_QUEST3 の処理を逆用したりして、 一応形にはしてあります。 …が、バランスに関してはノーコメント。 むう、最下層の地形だけでも差し替えた方が良いのかなあ。  #wizardモードでの試験?  #宿敵が溶岩に落ちてクエスト聖器がどこ行ったか分からなくなったよHAHAHAHA。  #(溶岩を固めてから掘り返してみたが見つからず) ちなみにSlash'EM Extended の"Mahou Shoujo"はこんな感じの職業です。 Mahou Shoujo *魔法は消費魔力減、満腹でない場合栄養消費なし *毎回魔法名を叫ぶため敵に気づかれる *特性も幾つか得る(Lv15で変化制御) *能力値は激低 *クエストのメッセージ類は侍とほぼ同 *クエスト聖器は「聖サムシング・フォーの水晶」(中立:ディリジウムの結晶) …もしかしたら、Mahou Shoujo最下層のマップって 「魔法を使って騒がしくして宿敵が瞬間移動してくるのを待つ」のを 前提にしているんじゃなかろうか。 ---- という訳で、FHSパッチ360とRandom Quest改訂版、Upしました。 それにしても、他の方の作成されたソースを眺めるのも色々と面白いですね。 今回は主に上記の関連箇所をざっと眺めるだけでしたが、 時間があったらもう少し精査したいところ。  #早めにbugfixしたかったので今回は見送りましたが、  #dNetHackのドワーフ関連クエストも翻訳導入してみたいものです。 それにしても、Slash'EM Extendedの分量の多さときたら…(w;) 以前拝見した時よりverも上がっていて色々と追加されていますが、 職業やら怪物やら聖器の素武器やら(のデータ)をざっと眺めただけで爆笑続き。  #職業名とランク呼称を確認していくとか、 #monst.cをFHSで検索するとか、  #artilist.cで素武器だけでも眺めていくとか。 #(いやちょっと待て、ソレまで実装するか?! という感じ) さすがに確認できたのはごく一部ですけど、それでも分量と内容の両方で笑わせてもらいました。  #いやまあ、もう少しこう何というか手心というか…  #それと、もう少し軽量化の努力もしたほうがいいというか… ------------------------------------------------------------ -2017/01/01 (FHS patch 0.8.30_JNH360_20170101_20) 明けましておめでとうございます。 太陰暦の方々ごめんなさい。 さて… JNetHack3.6.0対応のFHSパッチ、作業開始しました。 今の所は3.4との相違点を読み解きながらの移植がメインで、 内容も公開中の単体パッチ類の統合+αといったところです。  #そう言いつつ、細かい変更もちょこちょこと。 今回含まれているのは主に以下の通り。  ・3.6用の単体パッチ類全て    ・jtrnsmon.dat、jtrnsobj.datを用いた日本語化処理(開発用)    ・ランダムクエストパッチ(Random Quest patch)    ・戦士パッチ(Fighter patch)    ・Special Hallucination patch    ・回廊生成パッチ(Cloister generator patch)    ・HTML出力機能追加パッチ(HTML dump patch)(改変)  ・職業「剣士」(Fencer)  ・職業「戦士(男性)」(Fighter Type2)  ・以下の翻訳を追加    ・bogusmon.txt    ・data.base    ・engrave.txt    ・epitaph.txt  ・冒険開始時に季節/曜日メッセージを表示  ・一部のアイテム名を変更  ・正式名と未識別名とでアイテムの和訳の総称を変える処理  ・防具カテゴリ内の各防具の生成率を浮動式に変更(合計1000にする必要が無くなる) それにしても、職業ひとつ追加するだけでも結構大変です。 基本部分はRandom Questで対応できるよう整理済みなので多少は楽ですが、 いざファイルを揃えても、タイル類の方を登録し忘れてたり、  #3.6ではテキスト版とタイル版の両方を一度にコンパイルするため、  #「タイル無しでとりあえず公開」もやりにくい Makefileの方にdesファイルの記述を追加し忘れてたりと、 なかなか難儀です。  #地形とかmonsteed(from brass)とか怪物の幻影処理(from GrundHack)とか、移植は更に大変だろうなあ。 まあ、そんなこんなで 分量としてはまだまだですが、まずは初めの一歩を。 FHSパッチ、開発再開です。 ------------------------------------------------------------ →これ以前は別Fileにて。