ローグライク攻略&開発雑記

コンシューマー/PCに限らず、適当に綴っていくブログ 無駄にあれこれ遊んだので要らん知識だけは豊富

2020年02月

変愚蛮怒2.2.2 進捗状況に関するお知らせ

こんにちは、Hourierです
今日は重要なお知らせがあります
進捗は別途更新します

これは大変にありがたいお話であると同時に、当該ビルドはまだα版であり未修正の不具合がいくつか (更にその内のいくつかはゲーム進行に差し支えのあるバグ)残っております
deskull氏と協力しつつ修正等進めておりますので、当該バージョンをプレイされる際には本件留意願います
新規にキャラメイクから始めて頂くのが良いかと思われます
皆様、よき変愚ライフを!

変愚蛮怒2.2.2 進捗状況 その3

こんにちは、Hourierです
ひたすらガチリファクタリングしたり悪い文明を粉砕したり、あと狂気を誘う文言を追加したりしてました
いやはや、「量子生物 かつ ユニーク」と「狂気持ち かつ 非邪悪」の場合における処理がそれぞれまるっと存在しなかったので自力で追加しましたが、大変さと同時に面白さもたっぷり味わえました
というか今日の今日でようやく量子ドット以外のモンスターに量子生物フラグが存在しないことに気付きました
すなわち2.2.2でようやく全力活用するフラグとなりました!
「量子生物 かつ (ランクエには出ないので、それ以外の)クエスト討伐対象」っていう妙な条件はキッチリ網羅されていたのですが……ま、こんなこともありますね!
多分召喚持ちモンスターのいるクエストとか、そんな感じの扱いなのだと思います
そしてコードへの理解度は高まったので、その分のプラスは十分残りました

ついでにUbuntu 18.04で動かしたりFedora 31で動かしてみたりしました
やはりWaylandよりX11の方がまともに動きますね
筆者のコード追加はこの子周りだけなので、その辺動くのかテストも兼ねつつデバッグデバッグ
起動かくにん! よかった
X11起動成功

Fedoraだとなんかあちこち表示が崩れてます
そもそも、まともに動かせるまでかなりあれこれ試す必要があって疲れました
ちょっと壁に引っかかったりすると画面上@さんが分身したりしてあんまり遊びにくいです
常時再描画オプションがONならもう少しマシだと思います (未調査)
バグかもしれない? 君のような勘のいいガキは嫌いだよ
Fedoraでも起動成功?

まぁ実は標準品ではなくMATE版という微妙に画面感の違うUbuntu/Fedoraで試しています
OSのコアは普通のUbuntu/Fedoraと変わらないですが、そこら辺ワンチャン関係なくもないかもしれません (多分関係ない)

ちなみにCentOS 8はダメでした (7は起動する模様 by deskull氏)
nkfというライブラリがないとコンパイルできないのですが、そもそもそんな子はいないと怒られます 赤城さんったら読まずに食べた
調べると、EPEL っていうリポジトリにまだ登録されてないみたいですね
既にCentOS 8がリリースされてから数ヶ月経過しているので、この調子だといつまで経っても登録されないような気がします
Red Hat系で変愚を遊ぶのは色々とハードルが高いようです

といったところで今日はここまで
次回もお楽しみに!

変愚蛮怒のモンスター実装予定について その2

こんにちは、Hourierです
少し時間が開きましたが色々調整した結果、無事(?)あれやこれやと実装が完了しました
とはいえまだやることはいくつかあるので、β版が皆様の前に届くのはもう少し先になりそうです
#ぐりっどばぐ でもようよう話題にして頂きましたが、その中心は鬼とか天使よりもこっちでした

そして、リファクタリングとエンバグ修正以外にもとうとうソースコードに手を入れてしまいました
詳細はこのコミットで行っています (注:その後更に修正あり)が、「ユニークなのに量子生物フラグがあるとどこかへ消えちゃうのはどうなのよ……」と悩みました
その挙げ句「よし、ユニークなら反テレポ無視で強制的に位置変更させよう! 量子力学っぽいし、いいでしょ!」というほぼ反則的なコードを実装しました
小学生の頃やりましたよね、○○無効を無効化的なヤツ。あれです

幽体化しようが壁から引きずり出されます (そもそもこいつも壁抜け持ち)し、時を止めている間に暗黒の嵐をぶち込んでくる挙げ句どっかへ行って闇に紛れ込みます
テレパシー感度も低いので、時が動き出した後どこにいるか実装者ですら本気で見失いました
ここまで来ると、低層なら「あ、攻撃喰らわなかったラッキー」程度だったランダムウォークすら恐怖の対象になります
テストプレイ時はデバッグモードでやりたい放題やりましたが、それでも20回以上死にまくりでした
中層Vaultに湧いたのを見つけた場合、その場でレベルテレポすることをオススメします
戦士やメイジでガチるとキツいです

打撃・HP・ACは深層ユニークにしては弱い方なので、修行僧なら案外ボコれると思います
魔獣使いや騎兵ならバランス・ワイアーム先生に頼むと耐性がスカスカなので案外さっくり倒せるでしょう
逆に虚弱なキャラメイクの@は時止め中に死ぬので*破壊*推奨ですね メイジノススメとは何だったのか

β版完成の暁には是非戦いを挑んでみて下さい!
強いとか弱いとか怖いとかいう感想お待ちしております!
今日の更新情報はここまで、次回をお楽しみに♪

変愚蛮怒2.2.2 進捗状況 その2

こんにちは、Hourierです
最近はコードを一時お休みしつつ、モンスター調整に勤しんでおります
皆様に新たな刺激を届けられるよう精進しています

さて、不具合がいくつか耳に届いております、あと自分でも数件見つけております 祭りじゃー!
今のところコード整形時にif文 (のTRUE/FALSE反転ミス)をやらかした程度の問題ばかりですが、どこのif文を間違えたのか分からなくて困ったりもしとります
というかCのif文はめんどっちすぎてヤバみが深いです、動いてるんだから動くんだろうレベルの怪しげなコードがそこかしこに散見されます
私の担当範囲では「既存の動作は全て既存のまま」というコンセプトで弄っていますので、何か今までと異なる点がありましたらお気軽にご連絡下さい (というか既存の動作を変えるなんて怖くてとてもとても!)
ここのコメントでもOSDNのチケットでも#ぐりっどばぐ でもどこでもどうぞ!

そしてFxCopAnalyzersとかいうのを使ってみて、変愚にどんな潜在バグがあるか調べてみました。
すると……

autopick.c(3129): warning C6385: 'tb->states' から無効なデータを読み取っています: 読み取り可能なサイズは '3000' バイトですが、'-1' バイトを読み取る可能性があります。
autopick.c(3129): warning C6386: 'tb->states' への書き込み中にバッファー オーバーランが発生しました: 書き込み可能なサイズは '3000' バイトですが、'-1' バイトを書き込む可能性があります。
autopick.c(4100): warning C28182: NULL ポインターを逆参照しています。's' には、'tb->lines_list[y+1]' と同じ NULL 値が含まれます。これが行われる可能性のある以前の行 4079 を参照してください
birth.c(833): warning C6385: 'realm_jouhou' から無効なデータを読み取っています: 読み取り可能なサイズは '52' バイトですが、'-24' バイトを読み取る可能性があります。
birth.c(4708): warning C6385: 'realm_jouhou' から無効なデータを読み取っています: 読み取り可能なサイズは '52' バイトですが、'-28' バイトを読み取る可能性があります。
bldg.c(3573): warning C6001: 初期化されていないメモリ 'temp[BYTE:0]' を使用しています。
bldg.c(3562): warning C6001: 初期化されていないメモリ 'temp' を使用しています。
chuukei.c(803): warning C6031: 戻り値が無視されました: 'sscanf'
cmd\cmd-dump.c(4403): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8704' バイトを読み取る可能性があります。
cmd\cmd-dump.c(6417): warning C6001: 初期化されていないメモリ 'rand_tmp_str' を使用しています。
cmd\cmd-hissatsu.c(269): warning C6001: 初期化されていないメモリ 'sentaku' を使用しています。
cmd\cmd-item.c(1295): warning C6001: 初期化されていないメモリ 'temp' を使用しています。
cmd\cmd-item.c(1305): warning C6001: 初期化されていないメモリ 'temp[BYTE:0]' を使用しています。
cmd\cmd-spell.c(233): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8192' バイトを読み取る可能性があります。
cmd\cmd-spell.c(1154): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8192' バイトを読み取る可能性があります。
english.c(45): warning C6001: 初期化されていないメモリ 'dummy' を使用しています。
english.c(45): warning C6385: 'dummy' から無効なデータを読み取っています: 読み取り可能なサイズは '80' バイトですが、'-1' バイトを読み取る可能性があります。
floor-generate.c(807): warning C6385: 'dun->cent' から無効なデータを読み取っています: 読み取り可能なサイズは '800' バイトですが、'-8' バイトを読み取る可能性があります。
player-damage.c(144): warning C6011: NULL ポインター 'o_ptr' を逆参照しています。
player-status.c(3893): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8192' バイトを読み取る可能性があります。
files.c(621): warning C6011: NULL ポインター 'option_info[i].o_var' を逆参照しています。
files.c(3786): warning C6001: 初期化されていないメモリ 'id' を使用しています。
files.c(4520): warning C6387: 'shower' は '0' である可能性があります: この動作は、関数 'strlen' の指定に従っていません。
inet.c(96): warning C6387: 'proxy' は '0' である可能性があります: この動作は、関数 'strcpy' の指定に従っていません。
load.c(2981): warning C6262: 関数はスタックの '262288' バイトを使用します: /analyze:stacksize '16384' を超えています。 データの一部をヒープに移動することを考慮してください。
main-win.c(1518): warning C6387: 'hNewPal' は '0' である可能性があります: この動作は、関数 'SelectPalette' の指定に従っていません。
main-win.c(2807): warning C6387: 'hdcMask' は '0' である可能性があります: この動作は、関数 'SelectObject' の指定に従っていません。
main-win.c(2808): warning C6387: 'hdcMask' は '0' である可能性があります: この動作は、関数 'DeleteDC' の指定に従っていません。これが行われる可能性のある以前の行 2807 を参照してください
main-win.c(3040): warning C6385: 'data' から無効なデータを読み取っています: 読み取り可能なサイズは '_Old_2`284' バイトですが、'2272' バイトを読み取る可能性があります。
main-win.c(3037): warning C6387: 'td->w' は '0' である可能性があります: この動作は、関数 'SetActiveWindow' の指定に従っていません。これが行われる可能性のある以前の行 3027 を参照してください
main-win.c(3074): warning C6387: 'td->w' は '0' である可能性があります: この動作は、関数 'SetWindowPos' の指定に従っていません。これが行われる可能性のある以前の行 3071 を参照してください
main-win.c(3071): warning C6387: 'td->w' は '0' である可能性があります: この動作は、関数 'ShowWindow' の指定に従っていません。
main-win.c(3882): warning C28159: 'CreateProcess' を 'WinExec' の代わりに使用してください。理由: Deprecated. See MSDN for details
main-win.c(4112): warning C6011: NULL ポインター 'lpStr' を逆参照しています。
main-win.c(4718): warning C28251: 'WinMain' に対する整合性のない注釈: このインスタンスには 注釈なし が含まれます。c:\program files (x86)\windows kits\10\include\10.0.17763.0\um\winbase.h(913) を参照してください。
monster2.c(2533): warning C6001: 初期化されていないメモリ 'place_x' を使用しています。
monster2.c(2534): warning C6001: 初期化されていないメモリ 'place_y' を使用しています。
racial.c(847): warning C6001: 初期化されていないメモリ 'power_desc' を使用しています。
readdib.c(175): warning C6011: NULL ポインター 'lpInfo' を逆参照しています。
readdib.c(232): warning C6001: 初期化されていないメモリ 'of' を使用しています。
readdib.c(315): warning C6011: NULL ポインター 'lpbi' を逆参照しています。
realm-hex.c(131): warning C6001: 初期化されていないメモリ 'sp' を使用しています。
rooms.c(451): warning C6386: 'dun->room_map' への書き込み中にバッファー オーバーランが発生しました: 書き込み可能なサイズは '108' バイトですが、'by' バイトを書き込む可能性があります。
spells3.c(2003): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8704' バイトを読み取る可能性があります。
spells3.c(2158): warning C6385: 'technic_info' から無効なデータを読み取っています: 読み取り可能なサイズは '1536' バイトですが、'-8192' バイトを読み取る可能性があります。
util.c(2469): warning C6001: 初期化されていないメモリ 'av' を使用しています。
util.c(2469): warning C6385: 'av' から無効なデータを読み取っています: 読み取り可能なサイズは '256' バイトですが、'-2' バイトを読み取る可能性があります。
util.c(2467): warning C6001: 初期化されていないメモリ 'cv' を使用しています。
util.c(2467): warning C6385: 'cv' から無効なデータを読み取っています: 読み取り可能なサイズは '256' バイトですが、'-2' バイトを読み取る可能性があります。
wizard1.c(1947): warning C6054: 文字列 'roff_buf' は 0 で終了しない可能性があります。
wizard2.c(1211): warning C6287: 重複するコードです: 左と右のサブ式が同一です。
z-util.c(136): warning C6011: NULL ポインター 'crash' を逆参照しています。

多すぎだろいい加減にしろ! 実は半分くらい自業自得なのでは
参画以後に作り込んだ警告は可能な限り除去していきます
以前からあった警告はdeskull氏に報告して直してもらいましょうかねぇ。。。

今日はこの辺で!
次回更新までには多分新モンスターがOSDNにいるかも……かも?

変愚蛮怒 2.2.2 進捗状況

こんにちは、Hourierです
ダンジョンに入れないというコンセプト大崩壊級のバグが発生して修正したり、もののついでにMS-DOSのサポートを打ち切ったりといくつか工事を行っておりました MS以外のDOSも対応していた疑惑
元々Vista以降のみ対応だったのにDOSは(あくまで名目上)サポートし続けていたという長寿ソフトの闇を一つ潰しました
残念ですが2.2.2はPC-98シリーズでは遊べません(当たり前)
20~30年前のその他極古OS達も軒並みサポートを打ち切りました、というか絶対動かないのに処理だけ残ってたのを消しました
今動くのはWindowsとLinux系 (OS X、Debian/Ubuntu、CentOS/Fedora)くらい……なのかな?
OS X版はここで超精力的に開発が進んでいます、気になる方は見てみると面白いと思います

Classic Mac用のコードが7000行以上あって、それを消したのがブーストかかってます
なんでこんなにあったのか、酷いのになるとcase文と全く同じ内容がそのままコメントになってたりしました
コードの調整で減らした分もありますが、コード量が先月比で10%削減できました!!
……変愚のソースって約21.3万→約19.2万行あるので、この調子でコメントを削ればあと5000~1万行くらいは削減できる気がします
誰か手伝って下さい(五体投地)
おまけにコメント削減後の状態で6000行以上ある残念ファイルもあるので、今後はこれらを片付けて行く流れかなーと思いつつ、何かファイルを分割するとコンパイルが通らなくなる残念な目に遭ってしまっているのでorz状態です
しばらくは待ち時間or引き続きコメント削減orバグ修正 って感じになっていくのかなーと思われます
まぁ去年の今頃は10000行近いファイルもあったようなので、割かしマシというレベルに落ち着いたと言えるでしょう

なお未だにnear/far/hugeポインタとかいう古代遺跡級の変数も埋まってますが、他との兼ね合いで一旦休止中です

もう少し(?) したら、β版として変愚2.2.2を皆さんの前にお見せできる日が……来るのかなぁ?
今後ともお楽しみに!
ギャラリー
  • 開発者になろう GitHub編
  • 開発者になろう GitHub編
  • 変愚蛮怒3.0.0 進捗状況 その36
  • 変愚蛮怒 3.0.0 進捗状況 特別編 その3 C#への可能性
  • 開発者になろう
  • 開発者になろう
  • 変愚蛮怒2.2.2 進捗状況 その21
  • 変愚蛮怒(2.2.2 開発中版) ハイエルフレンジャー その5
  • 変愚蛮怒(2.2.2 開発中版) ハイエルフレンジャー その3