------------------------------------------------------------ spit patch (JNetHack3.4.3-0.2用) 蛇足メモ File:honey**.diff honey_venom**.diff 対応variant:JNetHack3.4.3-0.2用 作成者:Sakusha Shiganai ------------------------------------------------------------ ------------------------------------------------------------ 雑記 過去ログ01 これ以降は別ファイルに。 ------------------------------------------------------------ 04.03.19-20(ver0.92-0)[未公開] 閑話。 今回の実装で、主要な攻撃方法にはほぼ対応できたと思います。 で、これを読まれてる方に1つアンケートをば。 実は以前から目論んでた事の1つに、   毒液を吐くyoung dragonを各色実装したい というものがあるのです。 しかし調べてみると、生まれたばかりの幼龍はLV12、成龍はLV15。 …LV差が3しか無いやん(T T)。 となると…ゲームバランスという観点から見た場合、以下のどれが良いと思いますか? (現在の毒液は基本的にダメージだけのものが7割・アイテム破壊の可能性があるものが2割・爆発が1割だと考えて下さい) a)幼龍に毒液を吐かせる   #そんなに早くから吐かせていいものかどうか。 b)幼龍のLVを下げて若龍を実装 (幼龍LV9-10、若龍LV12、成龍LV15)   #幼龍が案外初期に迷宮に登場するかも。 c)成龍のLVを上げて若龍を実装 (幼龍LV12、若龍LV15、成龍LV17-18)   #城などで指定されているのは、今は成龍ですよね…LVを上げるのは妥当か否か。 d)成龍相当の、全く別種の龍を実装 (LV15の火龍とか氷龍とか)   #無駄が多いような気が。確かに龍の種類は増やせますが。 e)毒液の構成を凶悪にした老龍を実装 (幼龍LV12、成龍LV15、老龍LV18以上(未定))   #やろうと思えば龍に限り全て特殊型や爆発型にする事も、   #ダメージやアイテム破壊率を上げる事も、ブレスを織り交ぜる事も出来ますし。   #気は進まないですが…。  #普通のプレイではそこまで生き残った事がほとんど無いので見当がつかないのです。  #こういう質問こそ、にうきゃら掲示板向きだと思うんだけどなあ… 閑話休題。 --- まずは、ご免なさい(_ _)。 > 能力減少関係の毒液 > ->で、実装し直しました。 怪物が吐くのを直してないやん!(- -;) -->今度こそ実装しました(_ _;)。 --- 状態異常の毒液類について、通常型(従来のと同様の命中判定)の実装に挑戦。 この際だからと移植できそうなものをがっぽり移植。 でも、コンパイル時にhurtmarmor()とitimeout_incr()が引っかかってしまった。 hurtmarmor()は腐食系の毒液の処理。どうやら処理時に不都合を起こさないようにhitmu()から独立させたものらしい(対象となる防具を探してループする箇所がある模様)。あまり深くいじりたく無いし、それほど欲しい毒液でもないので一時凍結。  #もし欲しくなったら、全くの別の処理で代用。ランダムに防具1種類を(材質とは無関係に)傷めつけるとか。  #怪物の魔法を参考にすれば良いだろうか。 itimeout_incr()は、幻覚の毒液の処理。元は幻覚の薬の構文なんだけど、どのような数値を入れれば代用できるか分からないので今はおあずけ。 ->その後、黒い光の爆発を参考にして実装できました。 なので、実装予定だった7種類のうち4種類(錆/腐食/溶解/幻覚)が没に(苦笑)。 でも眠り/麻痺/混乱は成功したので、まあ良しとしましょうか。 そうそう、幻覚の薬をぶつけられた場合、PCは短時間幻覚に陥るようにしました。怪物に対しては混乱の効果。  #実はver0.91で既に実装されてたり(前回書き忘れ)。 --- そういえば、病気の薬はPCにぶつけられた場合、単なる5のダメージなんですね。しかも死なないようになってるし。 なので、呪われていた場合には最大HPも多少下がる事があるようにしました。 同時に、瘴気についても生成時に1/3の確率で呪われるように変更。 騎士で試してみる。…HPが0になっても生きてるんですが(; ^)。 処理がまずかった為だと思うので(ダメージ与えた後に最大HPを下げていた)組み直し。もう大丈夫だと思います…多分。 最大HPが下がった時にはメッセージが出るので(「瘴気をまともに吸い込んだ!(略)」)気づく人は気づくでしょう。 ついでに、他の毒霧も1/3の確率で呪われるように変更。 これで呪われた薬の効果も自由に発揮させられるな。うんうん。 と、思ってたら。   朱色ナーガが投げようとした途端に眠りの毒霧がすべった! -more- …しまった(- -;)。やはり手抜きはいかんか。 という訳で、慌てて毒霧を呪われない仕様に戻しました。瘴気がPCの最大HPを下げるかどうかは命中時に確率で決める事に。 あと、幻覚系毒液が成功したので、朱色ナーガの吐く毒液を幻覚系に変更。  #眠りなら後から実装した砂男の方が合ってそうだし。 直接攻撃は眠りのままですが(^^;)  #そういえば、幻覚の直接攻撃って設定されてないんですね。使う怪物も黒い光だけだし。 ------------------------------------------------------------ 04.03.17-18(ver0.91[続き]) 話は違うけど、能力減少関係の毒液に特色を持たせる為に、それぞれ特殊型を割り振った方が良いのかもと思い始めています。毒については特殊効果のバリエーション多いし、力以外の毒液は似たような効果だし。 AD_DRST(毒)----->毒の爆発 AD_DRDX(器用減)->毒の雲(悪臭の雲(小型)の効果) AD_DRCO(耐久減)->瘴気(病気の薬の効果) ->で、実装し直しました。 AD_DRIN(知能減)だけが無いですが。  #知力基準で回避する(でも18でもそれなりに喰らう)  #「マインドブラスト」でも実装しようかしらん。  #…おっと、知性の兜を装備するとINTもWISも最高25になるのか。  #spell_damage_bonus()の下式を参考にして…基準値を30にすればいいかな?  # int tmp, intell = ACURR(A_INT);  # if (intell < 10)  # tmp = -3;  # ... ボス蜂類にはこれらの毒液を吐かせようかなあ。火や水はちょっと別の案もあるし。 ->と思ったら、baby dragonと大人のドラゴンのLV差って3しか無いのか(T T)。 閑話休題。 --- 次は薬系の効果を発揮させる毒液。 うーん、これは毒液より霧にした方が合うかな。それと、薬って効果を受け易かったような気が。PCのACに関わらず効果受けるんでしたっけ? 呼吸している限り。 ->という訳で特殊型という位置付けに。 酸以外で効果を流用できそうな物は全て流用。もしかしたら、酸も実装してしまっても良いかもしれない。さて、うまく動くかどうか… …と思ったら、自分が投げた途端に迷宮崩壊(- -;) う−ん、この箇所は一番心配だった所だけど、やはりまずかったか。手抜きしてはいけませんな。しかしどう直したものか。  #にうきゃら掲示板は未だ復帰していないしなあ… 結局、毒液はfreeinv()の処理を飛ばす事で一応の解決。  #VENOM_CLASSはinventryに入らないのだから、その処理をしてしまってはエラーになる。 …と思ったら今度は不正落ち(T T) 調べてみた所、どうやら素手で攻撃すると強制的に落ちる模様。どうやらver0.90より後に実装した能力毒(毒武器として扱う箇所)が悪さをしているらしい。この辺り、不名誉とか武器の毒がぬぐわれるかとか、色々と処理あるからなあ… 色々いじってみたけど、結局は独立させる事にしました。PCが使った場合、不名誉とか即死の効果の判定は無し。 対PC用の処理と対怪物用の処理が違ってて、本当にやりにくいよ… ------------------------------------------------------------ 04.03.14-16(ver0.91[未up]) うーん、PCを怪物の隣に引き寄せるにはどうしたらいいんだろう。 怪物をPCの隣に引き寄せる(再配置する)にはmnexto()を活用すれば良いようだけど… enexto()を活用するのかなあ。もっと勉強せんと。 先にpoison cloudを実装。とは言っても巻物を参考に範囲と威力だけ調整すればいいので楽な物。 む。でもそれなりに長い時間留まるんだな。ダメージも少なめにしておこうかなあ。 ->ついでにダメージも(毒雲生成時に)変動させたり。 続けて錆や混乱などの特殊効果を持つ毒液を実装しようと、mhitu.cを眺めていたのですが… 見ると、能力減少関係のものは皆「毒攻撃」の一種として扱っている模様。  #後から見たら知能だけは別扱いだったけど(^^;) なので、強毒(strong venom)を組み込むつもりだったのを再考し、衰弱の毒液自体を「たまに強毒(毒の武器と同等)の効果を発揮する事がある弱毒」としました。 そして、衰弱の毒液その他を一緒くたに、既存の毒武器処理に組み込み。  #知能減少の毒液には忘却の効果は無いけど、別に遠距離攻撃をマインドフレアと同等にしなくても良いでしょう。 しかしこの辺りは吐かせる怪物の案が無いなあ… --- ここでちょっと脱線。 暇をみては、既存以外の効果を持たせた爆発なりブレスなりが実装できないかと少しずつ調べてみてます。 あとは命中地点に落し穴を作れないかとか、遠隔反撃は可能か、とか… Cの基礎知識もロクに無い身(- -;)なので高級な事は出来ませんが。 ------------------------------------------------------------ 04.03.11-13(ver0.90[続き]) おや? 眠りの爆発(explode type13)ってもしかして設定されてないのか? エラーが出るなあ。 即死/分解(explode type14)は大丈夫だったけど… ->やはりexplode()に眠り爆発は実装されていない模様。 その後色々いじったけど簡潔に。 銀鷹を仮実装。本当は捕縛の毒液を吐かせたいので、能力調整はその後かも。 雷ナーガとその雛を実装。番兵ナーガより上位に設定したけど、バランスとしてはどうなんだろ。 #monsterでブレス/毒吐きと他の能力とを併用させる事に成功(最初に吐くかどうかの選択肢を出し、吐かないなら他の能力)。ついでに、#monsterで蜘蛛の巣を張った時に何もメッセージが出ていなかったので、出すようにした。 殴ると数倍返しで数種類の反撃が来るヤバい怪物を実装しようと思ったけど(実は雷ナーガがこれだった)、複数の反撃能力をもっていても最初に設定した方だけが有効になっている模様(ちぇっ)。 そして、イカルを実装。属性がころころ変わる怪物(これがやりたかったのですよ)。 人間形態を持たず感染能力も無い変なワークリーチャーになってますが…(ソース内では#define HONEY_WEREで区別)。 ダメージ系の光線や魔法・ブレスを受けるとそれを防ぎ、即座にもう片方の属性に変化。最初は単にzhitm()内の処理をすっ飛ばしていたので、即死/分解属性を持つはずのイカル(陰)が死の杖で死んでたけど(^^;)。  #type = -1でセービングロールを回避してなかったので問答無用で食らってた。 耐性の有無に関わらず必ず属性変更しているのは、食らう寸前で変えてるか食らった直後に変えてるかの違い…という事にしといて下さい(笑)。「変化時に必ず反撃の毒液」というのも今は無しで。  #ブレスの処理最中にそんな処理を割り込ませたら何が起こるやら。 また初期は色んな薬に対しても属性変化で対抗させていたけど、それは1種類を除いて取りやめました。「実体系の攻撃は防げない」として統一したいし。それにこいつ、Wizardモード検証中は接近戦でもアイテム破壊に盲目か朦朧と、結構厄介だったし。 …それにしてもイカルの英名(てかラテン語名)、長っ!(; ^)  #eophona personata。英語ではJapanese Grosbeakだけど。  #後で単なるgrosbeakに変更しようかなあ。 PCがイカルに変化した場合は、召喚の代わりに属性変更をさせようとしたけど、うまくいかないので封印。他にも色々と穴が有るかもしれないし。 で、その最中に、イカル(陰)に変化したPCが冷気系毒液を吐いている事に気づく。…あー、もしかしたらdospit()の基本構造がまずいせい? なのでここも怪物の毒液選定と同様の形式に直す。  #毒液選定時に(AT_BITE, AD_COLD)を先に読み込んで判定していた模様。 ------------------------------------------------------------ 04.03.10-11(ver0.90) つぎはぎだったダメージ系毒液のソースを徹底整備。三者三様の実装方法は相変わらずだけど。 そのついでに、実装できそうな爆発タイプも全部実装する事にしました。  #今まで入れてなかったのは魔法の矢、眠り、即死/分解、電撃。  #眠りは通常型が機能しそうになく、また即死/分解は強すぎると思い通常型を実装していませんが。 ここでちょっと妄想メモ書き。 色々実装するのはいいけど、吐かせる怪物の案が思いつかない(; ^)  #創作であれネタ由来であれ由緒正しい怪物であれ、それなりにイメージが定まらない  #ようでは良い物は出来ませんのですよ。 とりあえず無い知恵絞って考えて、出て来たのはspot pigeon(マダラハト)。 なのですが…ちょっとこれ今のワタシに実装できるかどうか… 今はspitの確認が主体なので、即興で試験用怪物black flyを実装。能力はおなじみ女王蜂コピー。  #試験用だし素早い方がいいし。 攻撃内容ですか? A(ATTK(AT_SPIT, AD_MAGM, 0, 0), ATTK(AT_SPIT, AD_FIRE, 0, 0), ATTK(AT_SPIT, AD_COLD, 0, 0), ATTK(AT_SPIT, AD_ELEC, 0, 0), ATTK(AT_SPIT, AD_DRST, 0, 0), ATTK(AT_SPIT, AD_ACID, 0, 0)), …いや、ありったけ毒吐きで埋め尽くしてみたらどうなるのかなぁと(^^;) 結果メモ。  ・きちんと1ターンに複数吐いてくれる。立て続けに毒液が飛んでくるので凄まじいの何の。  ・但しPCに隣接しようとしてくる癖に、隣接すると何もしてこない(^^;)  ・PCが変化した場合、最初に設定された毒吐き(魔法弾)だけが有効になっている模様。  #他に思いついたのは勝利の天蛇とか、和名がつけられないR型とか(; ^)  #空牙狼てのもあったか。 次に、毒吐きをブレスに変化させる試験。 …フラグにintの=1を使ってたら、他の怪物も含めて全ての毒液がブレス化してるし(; ^)  #きちんとbooleanのTRUE/FALSEを使うべし。 それも直し、きちんと吐き分けるようになりました。エラーにもならないようだし良かった良かった。 でも敵の吐く毒液のバランスが悪いのが気になるなあ。twin beeが凍結液ばかり吐いてくるし。以前に話題になった乱数の隔たりの問題って、3.4では改善されてたんでしたっけどうでしたっけ。 素人ながら分岐方法を多少いじってみたりもしたけど…(根拠も無く気休め程度) 粘液が地面に落ちたときに蜘蛛の巣を設置できないかと、色々調べてみる。 副産物として、怪物の上位種の設定方法や罠の設置方法なども確認。 むう、今の所、ブレス持ち・毒吐き持ちの怪物にPCが変化した場合、#monsterでは他の行動をとらせる事が出来ないのか。  #この二つが#monsterの能力選択の上位に来ている上、#monsterは複数の能力を発揮できる  #ようにはなっていない為。 投網グモに変化した時には蜘蛛の巣も張りたいし粘液も吐きたいのだが…直しとこ。 ------------------------------------------------------------ 04.03.09(ver0.89[続き]) 妄想。 蜂類にアイテムを持たせるには、図体のでかい巨大蜂(giant bee)を実装した方がいいのかなあ。 その場合は飛翔蜂etc.も巨大にして、Giant Beehiveを…作るべきかどうするか。 あと、毒吐き蜂自体は最近妄想してた殺人スズメバチ(killer hornet)というのも有りかも。可能なら他の蜂類とかち合った途端に戦い合うとか。 他にも女王候補としては、噛み付きの「通常攻撃」をしてくるdrone(オス蜂)とか、ドラゴン並の図体をもつgigantic beeとか… 妄想はこの位にしときましょうか(^^;)。 閑話休題。 --- 炎と冷気、実装完了。 …と思ったけど、バランス面からすると装備破壊効果ばかりを発揮させるのも強すぎるような気がしてきた。 装備破壊も引き起こす特殊型と、属性によってダメージが上下するだけに留めた通常型とを分けた方がいいのかな… でもそうなると、やはり攻撃dice数による生成毒液の振り分け[懸案*15-step 4]を行いたいなあ。どうやって読み取ればいいんだろう。AD_**** はadtypで読めるけど… と思ってたらありました(^^;)。damnですか。(参考:permonst.h) ならこれさえ読み取れれば[懸案*15-step 4]も行えそうだな。  #これが実装されると、Jubilexはdamn=3なので、爆発3割特殊6割通常1割となります。  #Jubilex以外の既存怪物はdamn=0なのでバランスはあまり崩れないかと。  #(黒ナーガしかいないけど。) なので、炎や冷気がテスト不足かもしれないけど実装。それと共に毒液の構成案も色々練り直し。 コンパイル後試験。Jubilexを呼び出す…名前が違ってた(^^;)。  #正しくはJuiblex。 で、Juiblexが酸を吐こうとすると何故か落ちる落ちる。 damnの変数関係が最も不安だったのでいちいち表示するようにテスト文を入れてたけど…何だよprintfって(- -;)  #正しくはpline。 でもそこを直してもエラーは止まらない。うーん、おそらく何か間違えてるんだろうなあ。 なので現在は確率固定にしておきました。Juiblexなら爆発3:特殊6:普通1。その他の怪物は爆発1:特殊2:普通7。 …あー、自分が怪物に変身した時の毒液内容の更新忘れてた。 ------------------------------------------------------------ 04.03.07-09(ver0.89) さあ、通常型と爆発型の同時実装に挑戦だ。 参考にするのはzap.c。 一通り眺めてみたけど、どうやら個別に構文を引っ張り出して埋め込むのは可能な模様。 実装箇所がm_throw()かthitu()[敵->自分]、ohitmon()[敵->怪物]、hmon_hitmon()[PC->敵]の3種類あるから、それに応じて変数等を変える必要はあるけど。 ついでに眠り効果も移植。魔法と雷と分解/即死は今は見送り(雷は放電球という手がありそうだけど)。 毒については即死毒を採用していないので、怪物に対しては1/3の確率で追加ダメージを与えるように。 -> …[敵->怪物]と[PC->敵]のどちらか片方には実装し忘れてたかもしれない…(汗) --> [04.03.09]あ、入ってた。良かった… また対怪物用の減速効果もuhitm.c内にあったのを引っ張り出す。以前失敗したのは、適した変数を設定しなかったのも原因の1つだから、それを直せばなんとか… ちなみに、最初は爆発の後に通常型の特殊効果(アイテム破壊とか)を付随させてたけど、実は爆発自体に特殊効果が付随している事が分かったので取りやめ。acid ball1発で2回も鎧錆びさせちゃ駄目でしょ(^^;) >自分 しかも、今回は実装済みの箇所(酸とか毒とか)にまで手を加える事になるし、色々といじっているうちに言葉遊びの誘惑が…(結構好き)。 英語が変な所もあるかもしれないけど、あれこれ組み込んでおきました(w)。 で、ソース書き換え完了。コンパイル。エラーの嵐(汗)。 変数の食い違いは覚悟してたけど、カッコの閉じ忘れとかカッコ数の間違いとか多発してるし(汗汗)。 しかも1箇所は#endifが多すぎて、既存の#endif (しかも構文の最後の奴)がエラー扱いになってるし(大汗)。 それらも何とか全て対処してコンパイル。 twin beeが凍てつく毒液を吐く。きちんと機能しているようだ。 続けて凍結弾を吐く。と、いきなりエラーで落ちる。 試しに酸の液塊を投げる。きちんと爆発する。 今度はナパーム弾を投げてみる。落ちる。 広い場所で投げてみる。地面に落ちて飛び散った途端に落ちる。 凍結弾を投げる。着弾。落ちる。 何故だあああ!! Wizardモードとはいえ、毎回落ちた後の残骸データはRestoreせずきちんと消してるのに。 どうも爆発処理がうまくいってない模様。それも炎と冷気だけ。構文は全て酸の爆発と同じ形式だから、酸だけがokというのは解せないのだが… ソース上で処理を追いつつ微修正と動作確認を繰り返すものの改善されず。 なので、怪しい箇所のあちこちにpline文を埋め込み、どこまで処理が進んでいるのか見てみる。 うーん、splatter_venom()内で落ちてるなあ。でもここでやってる事って変数2つ設定してからexplode()に渡してるだけだし、その変数も仮の初期値が入っているのに… 怪しい方の変数を固定にしてみても変わらず。  #今はVENOM_CLASSが入っている部分。当初はアイテム名を入れるものと勘違いしてたのですよ。 大体、酸についても同じ処理を通してるのに。何故だろう… と首を傾げつつ何度もあちこち見まわしてたら…あれ?  酸以外は変数設定の部分が#if 0 で無効化されてるやん!(滝汗)   #ソースを読みやすいよう、除外部はよほどの時以外は/* 〜 */を利用するようにしているのですよ。   #(sakuraエディタでは、その部分を別色で表示できる。#if 0 では駄目)   #でもこの部分は既に/* 〜 */でコメント書いている箇所が多かったので、仕方なく#if 0 を使っていたのですが…   #酸だけを先行実装した時のまま直してなかった(泣) そこを直したら落ちなくなりました。やれやれ。 ちなみに、粘液の減速効果は実装成功。鎧を着てそうな怪物をと思ってguardを召喚したら、人間のゾンビが呼び出されたけど(^^;) 眠りの雲の方は…ぜんぜん眠ってくれない(泣)。jackalもnewtもオーク類もアイテムぶつけたダメージで倒してばかり。眠る確率を規定してそうな変数をあれこれ変えてみたけど、全く駄目。もうあきらめます。 あとは細かい部分(出力文とかアイテムの名称とか)を色々調整して形にするかな。 ------------------------------------------------------------ 04.03.04-06(ver0.88) 自作のjdata.baseを再構築。これで文字化けも無くなるはず。 妄想。 誘惑の毒液(じゃないけど) love shine。 「○○は天使の矢を放った!」 「ラブシャインが◇◇のハートを射抜いた!」 「Heart brake!」(venom破壊時) 敵Aが友好的な敵Bに当てた場合、Bは敵対化。PCが当てた場合は魅了効果。  #いちお、曲は聴いた事あります。 で、低確率でlove shineの代わりに生成されるlove-come shine-shine。 「○○は悪魔の矢を放った!」 「ラブコメシネシネ弾が◇◇に命中した!--more--」 「まずい、非常にまずい、◇◇に(もっと)気に入られてしまったかもしれない…」(魅了時(^^;)) 効果はおんなじだったり(^^;);;;  #いや内容は全然知らんですが。 閑話休題。 --- 爆発効果をテストしてみる。 explode()関係を調べていたら、ちょうどsplatter_burning_oil()という燃える油の効果があったのでこれを利用する事に。 x,y座標指定なんて初めてだけど…  #いや命中地点で爆発起こす方法がなかなか決まらなくて。  #調査前は火の玉の魔法撃たせるとか、命中地点に炎の球体(e)召喚して即座にHPを0にするとか、  #命中地点で杖を生成していきなり破壊とか、そりゃもういろんな方法を検討(妄想)してたけど。 うまくいったら、今度はこれを応用して冷気爆発だ。 とりあえず双刺蜂に仮実装してみる(後で修正予定)。 何箇所か修正箇所はあったものの、一応コンパイルには成功。 おなじみWizardモード、双刺蜂の吐いた毒がペットに命中。おお、爆発エフェクト出るじゃん。 と思ったら何やらエラーメッセージの後に「#quitしたほうがよさそうだ」。 その後も一応動かせたけど、双刺蜂の動きが変になったりしていた。 #quit後にもう一度だけ確認プレイ。今度は自分に当たった爆発にnewtとlichenを巻き込ませる。と、2匹とも死んだ後にやはりエラーメッセージ。何がまずいんだろう。 周囲に敵を呼びまくりもう一度実験。ペットに当たり3匹死亡。 dmonsfree: 3 removed doesn't match 4 pending--More-- プログラムに障害発生 - #quitしたほうがよさそうだ. …むう、もしかしたらと思ってたけど、やはり怪物死亡処理が ohitmon() [ここで毒液効果処理] の後部とexplode()で2重になってるのかな? なので後半のHP処理をgoto文で飛ばす。成功。 あ、床に黄色い点が落ちてる。新たに作った毒液が消えるようにする処理を忘れてた。 てか、特殊弾なんだから落ちた場所でも爆発させたいなあ。[と思ったけど面倒そうなので見送り。] それと、毎回火の玉を発射させるつもりはないので、ノーマルな火属性毒液も実装しないと。 で、splatter_burning_oil()の構文を活用すれば冷気系も簡単に実装できそう。 その後もう一度組み直す。一箇所は、完全に組み変えるついでにswitch文にしてみる。 …break時のメッセージを入れなかったら、またエラー文が(^^;) でもこの辺りを見ると、爆発効果はbreakobj()辺りに組み込んでしまった方がよさそうだなあ。死亡処理を気にする必要も無くなりそうだし、落ちた地点で爆発してくれそうだし。 色々複雑そうな所もあるかもしれないけど、やってみる価値は有るかな。 ->なのでこの辺りは一時封印。構文がぐちゃぐちゃな所はあるけど、一旦公開可能な状態のパッチを作成しますわ。 -->むう、breakobj()だけだと「命中した時には」爆発してくれないのか…嫌な仕様だ。  となるといきなりstep 1 の内容から再考する必要があるなあ。全箇所についてbreakobj()に送ってしまって、あとは後部のダメージ死亡判定に注意しながら埋め込まなきゃならんのか… -->ようやく分かった事。[参考:ohitmon_explode_test.txt] ・m_throw()--ダメージ関係と命中判定はthitu()に飛ばして処理。その後、こちらの内容を処理。なのでthitu()の後でこちらで爆発処理してしまえば充分? ・ohitmon()--後部で怪物の死亡判定を行っている箇所が有る為,その前に式外で標的の怪物が死亡した場合、こちらの死亡判定をskipする必要がある。って、前にもgoto文を入れてみた箇所じゃん(^^;)(その後消してた) ・hmon_hitmon()--以下の様な二重処理回避のパラメータがあったので利用させて頂く。何故これが怪物側に無いんだよ…   #爆発の中心には「PC」又は「爆発する怪物」が必ずいるものという前提で書かれたコードでしょうか。 if (DEADMONSTER(mon)) already_killed = TRUE; それにしても色々妙な構文だなあ。前ににゅうきゃら掲示板(復帰まだかなあ)で「NetHackのソースは“汚い”」って話題があったけど、分かるような。 で、この辺りは何とか処理。 …と思ったら、爆発に巻き込まれて死んだのに墓石の銘が「自分自身の燃える油につつまれて」…   #今回初確認。それまではWizardモードで何度も生き返り、確認できた所でquit。 むう、この部分は書き換えないといかんか。「自分自身の」って要らないよなあ。   #死亡理由の処理が「怪物の爆発」>「自分自身の%s(SCR_CLASS以外の炎など)につつまれて」>「それ以外」   #の順になっている。怪物が投げたfireballで焼かれる事を想定していない。 普通の火山弾の方は、fire trapを流用させてもらうかな。…あ、怪物に対しては駄目なのか。 予定: 敵->自分: m_throw()内で以下の式を利用 dofiretrap((struct obj *)0); 敵->敵: ohitmon()内で…横着せずに書かなきゃ駄目かなあ。内容はzap.cなりexplode.cなりtrap.cなりを参考に。 自分->敵: hmon_hitmon()内で命中判定後にdamageum()を呼び出す あ、mucusによる怪物の減速効果もこれで処理すればいいのか(^^;) -->うーん、あれこれやってみたけど、どうもうまくいかないなあ。splatter_venom()は設定できたから、様々な爆発は起こせそうな気がするけど。 dofiretrap()も外部呼び出しするものじゃないし。 爆発や光線より単発攻撃に属性持たせる方がきついってのは何なのよ(T T) なので、方針変更。爆発型の実装はとりあえず酸に対して行い、他は延期。   #今の所は爆発型「だけ」を吐かせるつもりはないので。 アイテム命中と同時に1体相手に光線を撃ち込む方法ってあるのかな(- -;)   #zap.c中のzhitm()を利用しようとしたけど、外部呼び出しでは無かったせいもあり失敗。 それか、直接攻撃の構文を片端から移植して、機能しそうなものを実用化するという手もあるにはあるけど… ->[04.03.07]現在移植中。調査と移植の副産物として、acid ballがPCに「命中した時」にはPCの武具を錆びさせる機能を追加。怪物に対しての機能は未調査。 --- 調べている間に知った悪臭の雲の効果。なるほど、面白そうな機能だ。 最後に妄想。 ・AD_DRSTの場合、低確率で命中地点中心に小型の悪臭の雲を発するとか。(見た所範囲パラメータもあるので、発動範囲を狭く固定するのは可能な模様) ・毒吐き中心のmiddle ** naga(和名未定)とか、爆発型の毒を吐く率が高いancient ** naga(歳経たナーガ)とか。でも怪物の進化ってどうやって設定するんだろう。この辺りは何も調査してないしなあ。 ------------------------------------------------------------ 04.03.04-(ver0.88) じつは同時進行でhoney関係の方もhoneyパッチとして移植試験していたけど、FOOD_CLASSもVENOM_CLASSと同じく不確定名の実装がうまくいかないので停滞中。この状態では仙豆やBob sapの意味が半減するのに。 しかもにんにく効果(NOGARLIC)はフラグによる制御と判明。フラグは一杯一杯で、鬼が豆/仙豆、桃/仙桃を恐れる効果(NOBEANORPEACH)のフラグを新たに立てられない。またこの辺りの制御は複雑怪奇(に見える)で、ソースを読んでも何がどうなってるのかさっぱり分からない状態。他の手段による制御方法も思いつかなかったので実装取りやめ。 一応、現在のhoneyパッチで成功してる箇所(ver0.88では非公開): ネクタールの「全能力値up」処理、FALSEだったパラメータはTRUEに変更。それ以外は一応問題無い事を確認。 蜜類には更に普通の「蜜(lump of treacle)」を追加。癒し効果の無いhoney。蜂以外のaと共に、1/50の確率でsapかtreacleが生成される(下手に小型怪物にアイテム持たせると動けなくなる可能性が有るので、蜜類は全て足元に生成し「拾わせない」ようにした)。しかしこれで蜜関係は6種類か… Bob sap、cream pieやvemonと同様に一発で壊れるようにしたので、腐る効果も材質をFLESHにしてたのも取りやめ(実は何を間違えたか、あの構文では蜜類全てが「巨大蟻の死体は腐ってしまった…」となってしまう事も判明)。それと、食べた時に力が3上がるようにしました。 …でも投げても全然当たらない(T T)。Wizardモードで自分のLVを30にして+30の品(意味無いけど)を願ってもイモリにさえ当たりゃしない(; ;)。折角ダメージ時のセリフを追加したのに。 /*JP if(!rn2(3)) { You("hear the beast roar... "); */ if(!rn2(3)) { pline("野獣の咆哮が聞こえる…"); /* It is better not to translate JP this sentence */ pline("FU-HA-HA-HA-HA, The Beast is always hungry! HA-HA-HA"); } ちなみにGoogle検索で見つかったセリフを頂いてます。 出来ればtreacleは蟻の巣に生成させたいもの。そういえば3.4には木があるらしいけど(見た事ない)、木の仕様が分かったら樹液がとれるようにしたいなあ。…「ボブの木」?(^^;) Bob Sapが当たらない理由も推測できるし(クリームパイやvenomの命中判定を利用してないのが原因)、実装できる攻撃系のものはspitパッチと統合してしまおうかなあ。 …非攻撃系で実装可能なものがほとんど無いかも(^^;) --- 妄想いくつか。 ・次の毒液は何にしよう。  *「仕掛け槍」。対応怪物は「青銅golem」とか(かなり適当)。発射時の文章は「仕掛け槍を撃ち出した!」、break時の文章は「仕掛け槍(何か)は引っ込んだ」。罠の方にも応用が利くし。  * それとも火炎と冷気に挑戦するか。    #低確率で爆発させたい。成功したら双刺蜂と虹羽蜂の攻撃をこれに差し替える  * 「長い舌」も面白そうだけど(対応怪物はカエル類)、命中した相手を射手の隣に引き寄せる事が私の技術で可能かどうか…何とも言えず。  * 眠り、麻痺、混乱、幻覚辺りは簡単そうかも。何に吐かせようか。それと、他にも面白い効果(低確率で発動)を持たせてみたいもの。  * 錆というのもあったな。対応怪物は当然Rで。腐食の方は…何に吐かせよう。  * 実はテレポートも、ブラックホールとか次元の扉とかで考えてたり。  * 固化液(石化)、汚染された毒液(病気)はRJNH以外では強すぎかな… ・爆弾ケーキの地雷爆発、命中地点に地雷を生成し即座に爆発…と出来ればいいんだけど。 ・新部屋「オーガの住処」。食べかけの食料類やらガラクタが散らばってたり。オーク部屋でもいいのか。 ・白蟻(acid ant)。酸攻撃中心。そういえばSlash'EMに女王蟻もいたような。 それと、関係無いけど自作のjdata.baseを組み込んだら文字化けしてた(汗)。今はEUCとSJISが混在してるはずだから…再構築する必要があるなあ。 ------------------------------------------------------------ 04.03.01-03(ver0.88) 下記の様に、どうにかJNH3.4.3だけは自力compileと確認ができるようになったので、蜂蜜patchからspit関係だけを選んで移植。  #簡単なのだけ実装しても張り合いないし。 一通り移植してからcompileしたら見事に失敗(汗)。 でもまずい所をいくつか直したり簡略化したりし、よく分からない所は + (sx == tx && sy == ty ? + (!rn2(10) ? &mons[PM_TWIN_BEE] : + (!rn2(9) ? &mons[PM_WING_BEE] : + (!rn2(8) ? &mons[PM_DON_PATXI] : &mons[PM_QUEEN_BEE] ) + ) + ) : &mons[PM_KILLER_BEE]) : のような力技も加えつつ(^^;)、どうにかcompile成功。 その後はWizardモードで呼び出しテストとvenom生成、調整して再コンパイルの繰り返し。 テストの度にwand of speedを願ってしまったりしてたけど。    #実際にあるのはwand of speed monsterです。 テスト中、不要になったボス蜂は主に死の杖で片付けていたけど、途中で首領蜂が死の杖でも死ななくなった。あれ?と思い魔法の矢の杖も使ってみたけどやはり効果なし。結局雷の杖で倒したけど…。考えてみたら、弾幕のダメージtypeをAD_MAGMに変更してたんだっけ(^^;)。 変化制御の指輪はめて飛翔蜂に変化したら、爪にはめた指輪以外のアイテムを全て落としても重量オーバーで、移動もテレポートも出来なかった。指輪の重量はたった3なのに…となると、狩人蜂に投げ矢を持たせられない?(泣) しかし、何故か毒液の名前表示がうまくいかない。弾幕が「毒液のしぶき」になってたり… どうも4種類のうち、1番目もしくは2番目に生成された毒液の名が強制的に「毒液のしぶき」にされている模様。 src/objects.cでのアイテム並び順や、dat/jtrnsobj.datでの名前の順序を色々変えてみたり、不確定名をあれこれいじってみたりしたけどうまくいかず。 blinding venomだけ“毒液のしぶき”とし、他は確定名で表示したかったのだが…  #src/objnam.cはあえていじらなかったので、blinding venomが最初でacid venomが最後と  #いうのは堅持していたのだが。 結局、mkobj.cをいじり、VENOM_CLASSは全て識別済み状態で生成されるようにした。 blinding venomも識別されてしまうが仕方ないか。 ->これ書いてて「blinding venomだけ識別対象から外す」様にすればいいと気づく。[>04.03.03 実装]  それに、mkobj.cをうまく使えばfurやbeast hideも祝呪・魔力無しで生成できそうな。 -->04.03.04 駄目押しにo_init.cでVENOM_CLASSをランダム対象から除外。  あまり有効そうでもなかったけど。((char)0 を2種類以上設定すると駄目になる) 調子に乗って、減速効果のmucusも実装。 でも実際浴びてみると、素早さを得ていない時はほとんど関係なさそう。今は敵に当たっても効果ないし。かえって他の能力(itemの下に隠れて麻痺攻撃)の方が嫌らしいし。 なので、もう少しまともに効果実装してみようかと思案中。 まずは怪物に対しても減速効果を発揮するように。また、クリームパイのようにべっとり顔に張り付いてもほしいし(できればBlinding venom型よりcream pie型の方が望ましい)。 落ちたらその場所に蜘蛛の巣が…というのは難しそうなので今は見送り。  [>04.03.03 怪物減速は実装が難しいので取りやめ。盲目は成功。Wizardモードで初期キャラで受けまくった所、高ACかタオルが無いとかなり嫌らしい事が判明。手だとぬぐう端から飛んでくるし、こんな相手に回復薬がぶ飲みするのも何だし。] 騎士のテストプレイ時の1コマ。 キー入力1発では乗り降りできないのか… 乗馬は面白い。でも乗馬状態だと宝箱も扉も蹴れないのがちょっと困り者(罠など調べず蹴り壊す派)。 よろめき状態で乗馬したまま階段下りたら転がり落ちて、馬から落ちて落馬して死亡。 ------------------------------------------------------------ 04.02.28-29(ver---) まずはコンパイル環境を整える所から。 とりあえずBCC(Boland C++ compiler)とCPadを導入。結局CPadは初期設定の時しか使わなかったけど。 で、日本語でも英語でも良いから何か1つでも動けばと思ったのだが、  ・NH3.4.3(本家英語版) :コンパイル自体は成功したものの、マップが文字化け。          調査した所、DOSが日本語モードだと起こる現象で、対処の為にはDOSを          英語モードにする必要がある模様。          しかしWin98のDOS窓は英語モードにできない模様。てか英語モード入ってる          のかと思いたくなる(us.batも無効)。          DOSモードでの操作も考慮したが、そもそもWindowsを立ち上げてないと          DOS版compile環境が必須になるので(もうサポートされてない可能性大)          検討放棄。  ・JNH3.4.3-0.2 :日本語を認識できないエラー続出。          どうやらSJISでは特定の文字が文末に来るとエラーになるようなのだが、          対象が多いようだし、中には「め」より後のひらがな(「る」含む!)も          入っているので、いちいち調整してたら日が暮れる。  ・RJNH 02.11.17版 :「UNIXコマンド使えないからアイコンの変換できないよ」と泣かれる。          その後JNH3.4のアイコンfileを移植するも別のエラーでcompile出来ず。  ・NH brass 03.12.28版 :コンパイル自体は成功したが、英語版なのでやはりマップ化け。          youkanさんもspit周りはいじってないと思い検討してみたのだが…。          ちなみにスコアにクリアスコアも入ってたり。本当に確認版なのね(^^;) なので、やけになってRJNHをJNH3.4のMakefile.bccでcompileしようとしたり、 英語版をSJIS変換してマップも正常表示できないかとあがいてみたり、 JNH3.4でcompileの引っかかった箇所を片端からsakuraエディタで手作業修正(EUC化)してたけどあまりに多すぎたんで全選択>EUC化を行ってみたらコンパイルはできたけど文章が「|w{w/w?w\w}w]w[w.w%w&w#w」のようになって訳わからなくなったり、 と紆余曲折の末、 最終的には  「JNH3.4.3の日本語の含まれるファイルを全て“専用変換ツールで”SJIS化」 でいけました。 ちなみにsrcフォルダ以外で引っかかったファイルをメモ書き:  ・\util\makedefs.c  ・\src\decl.c  ・\win\tty\wintty.c  ・\\japanese\jconj.c  ・\japanese\jlib.c  ・\japanese\jtrns.c  ・\include\jdata.h  ・あと何か (直しとかないとトップのCopyright[日本語] がバグリます)  他にもあるかもしれないけど忘れた。 --- 自力コンパイル品のテストも兼ねてしばらくランダムキャラでテストプレイ:  ・色彩関係の見栄えが色々変わってるのに驚き。ペットが灰色背景カーソル状態で表示されたり、通路は隣接するマスだけ明るくなってたり。黒い敵も黒く表示されてます…見えにくい(; ^)    #JNetHack1.1.5では、確か黒い敵も灰色で表示されてた。  ・レンジャー強い! 弓を射たら連射するし、初期の力が18有ったのと力の小手が入手できたのとで、短剣での接近戦も敵をさくさく倒せるし。サソリ食べて毒で死んだけど。  ・やはり野蛮人はさくさく進める。戦斧が両手持ちで盾使えないけど。確か幅広の剣持った緑エルフと連戦して死亡。  ・モンクもそれほど弱くないかも。何が得意か知らないからずっと素手で戦ってたけど、それでも敵を2、3発で倒せるから割と楽だし。  ・ローブがクローク系だという事は後から気づいた(^^;)。モンクがミスリル服着たら鎧が邪魔で戦えなくなった。革鎧ならと思ったけどそれも駄目なのね…  ・どのキャラも食糧事情が良かった。食えるdが増えてるし、モンクでもそれなりに食料が出たので飢えた覚えがほとんどないし。1.1.5やRJNHだと序盤は祈りで腹を満たす事がほぼ必須なのを思うとえらい違いだ。  ・鉱山の町にほとんど店が無いなあ。雑貨屋と照明店だけであとは空家じゃん。ここにも不況の影が(違 とりあえず一番進んだのはモンク。 10階で横長のレプラコーンホールに遭遇(縦に2マス)。金貨を離れた場所におきつつ個別撃破。5000G以上かき集め。 同じ階で、ようやく属性違いの祭壇発見。同時に、離れた場所にチカトリスの集団が(近づいて気づいた)。狭く入り組んだ通路の中、相手が遅いのを利用して1匹ずつ弓で撃破。 さあ最後の1匹だと思ったら、それがコカトリス(滝汗)。 冷や汗掻きながらも何とか倒す。 死体に触れないようにしながら祭壇に戻り、量子物理学者を倒して転換図るも失敗、サキュバスにLV下げられる。 復讐に燃えつつ防具再装備。と、ここでモンクの初期装備には小手がある事に気づく(^^;) ここは最強の武器といわれるあれを使うしか無いでしょう(実は使ったことが無い)。 さっきのホールまで戻ってコカトリスの死体を拾い、装備した所にサキュバス出現。 倒そうと近づいた所、  誘惑され小手を外されてそのまま石化(- -;) ちなみに別の時には、ペットが途中階でカメレオンの死体食って苔の怪物になったので放置(- -;)