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

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

2023年12月

変愚蛮怒3.0.0 進捗状況 2023総集編 (技術編)

この記事はRoguelike Advent Calendar 2023 の16日目の記事です
https://adventar.org/calendars/9031

こんにちは、Hourierです
技術編と銘打っておきながら年末進行の都合でそんなに細かく書けない状態です
備忘録的な設計はGitHub のWiki にまとめているので、併せてご参照下さい

この1年何やってたかというと大半がリファクタリングです
まぁそれは3年前から何も変わっていないのですが、逆に言えば「3年経ってもまだまだ作業中」ということを意味します
3年あればどうにでもなるだろうというのは素朴に考えれば大抵合っていますが、残念ながら変愚蛮怒の泥沼は想像以上に深かった、ということです
単純に、ボランティアベースの活動であるが故に全員の作業スピードが不安定であることも問題の長期化に拍車をかけてしまっています

では今年のテーマは何だったのかというとズバリ「モデル化」です
この辺がその第一歩だったように思いますが、「フィールド変数がpublicなせいでどこでもget/setできる」という、非オブジェクト指向言語の欠陥を見事に踏み抜きまくっていました
「同一処理が何箇所もコピペされていて見通しが悪すぎる」という問題が起こり、その結果「何をやっているのか分からないので保守できない」に発展していました
「何十ファイルも同時に追跡しないとアイテム強化ルーチンを把握できない」とか
(これはC時代に分割しまくった名残でもありますが、当時は「ファイルが長すぎて誰一人読む気が起きないし誰も修正したがらない」というもっと重篤な問題が起きていました)

変愚蛮怒の前身であるZangband が更新停止した理由もこういう問題が遠因だっただろうという話は一度ならずDiscord でも出てきました
この辺りにようやくメスを入れ、「フィールド変数を外から引っ張り出してあれこれする」から「クラス内でできることはクラス内でやる」という、まともなカプセル化の道を歩み始めました
しかしあまりにも道が半ばで先は全く見通せません

多少でもコーディング能力がある方はぜひ開発チームにいらして下さい
むしろなくても1から教えます
去年の今頃に比べれば見違えるような綺麗さのコードにはなりました
それどころか「半年前のコードはもう見たくない」というレベルでモダナイズを続けているプロダクトでもあります
先進技術に触れてみたいという方も大歓迎です
Discord にてお話頂ければ誰かしら案内をするはずですので、ぜひ覗いてみて下さい

変愚蛮怒3.0.0 進捗状況 2023総集編

この記事はRoguelike Advent Calendar 2023 の9日目の記事です

こんにちは、Hourierです
ブログ更新が年1になってすみません……HUNTER×HUNTER よりはマシ
GitHub にコミュニティ機能があったりコード差分が可視化されやすかったりで敢えてブログに書くほどの記事って中々ないんですよね
ということで年に1回しかできないこと──そう「総括 in 榛名ベース」を行います

以下、「最新のコード」とは12/3 時点のβ2を指します

2023年最初のリリースはα74から始まりました
最新は上記の通りβ2です
αはホットフィックス (リリース直後に発覚した緊急バグの修正)も含めて91まで伸びました
またβは無印 (実質β0)から始まっています
途中夏休み等で開発メンバーが全員不在になってリリースが滞ったりもしつつ、合計21回のリリースを行いました
ちなみにGitHubでリリースノートがまともに整備されたのはα64、2022/07/31 のできごとです
色々集計しやすくなって便利の極みです

ということで簡単に集計してみました
予想通りというかバグ修正とリファクタリングばっかしてんなお前

リリース番号 リリース日 PR数 自分のPR数 新機能数 自分の新機能数
α74 01/08 21 4 0 0
α75 01/22 25 2 7 0
α76 02/05 4 0 0 0
α77 02/19 10 0 3 0
α78 02/21 2 0 0 0
α79 05/01 31 23 1 1
α80 05/02 3 0 0 0
α81 05/03 9 5 0 0
α82 05/05 5 3 1 1
α83 05/14 16 9 1 0
α84 05/28 25 15 1 1
α85 06/11 37 25 7
5
α86 06/25 27 7 2 0
α87 07/09 30 9 4 0
α88 07/23 17 9 1 0
α89 08/07 5 2 0 0
α90 10/16 25 10 1 0
α91 10/18 5 2 0 0
β0 10/30 10 4 0 0
β1 11/12 19 10 1 0
β2 11/26 8 4 0 0






合計: N/A 334 143 30
8

今年1年のPR (Pull Request≒1作業)に占める新機能率は9.0%!
自分担当に限れば新機能率5.6%!!
世のオープンソースでこんなにリファクタリング率の高いプロジェクトはそうそうないと思います
(普通は目を引くために新機能追加するんだけどね変愚は無理なの)

さて新機能というか機能廃止も含まれていますが、自分の機能変更を列挙してみましょう
  • 固定アーティファクトの追加 (トロルズベーン、黒のガラドリエル)
  • 羊皮紙の追加 (洞察の魔法大全×3、アーティファクトの伝承×3、宝の地図)
  • ウィザードコマンド強化 (帰還、アイテム生成、モンスター生成)
  • 全コマンド強制確認機能削除
  • 256色以下のモニタサポート削除
……しょっぱいな!!
しかも固定アーティファクトはリファクタリングを目的に「取り敢えず埋めた」ってレベルの大したことない品です
羊皮紙に至っては「誰得の巻物」専用ドロップなので見たことがないプレイヤーもいるかもしれません
おまけに「洞察の魔法大全」も「アーティファクトの伝承」もタイトル以外未翻訳というふざけた有様です
どなたか翻訳して下さい、私は「最大999個まで羊皮紙を追加できる機能」を開発した時点で力尽きました

もちろん「開発者にしかメリットのないリファクタリングだけしていた」のではありません
例えば:
  • 分離/合体ユニークを気軽に追加できる設計改善 (正常に動作するモンスター種族定義を添えて追加要求頂ければ1日以内にコード面は実装可能!)
  • 休憩ターン数を始めとした数値入力プロンプト改善 (※ 長期の改善項目で複数バージョンに跨るため上記には載せていない)
  • いくらかの高速化 (体感できるかどうかは不明)
  • 英語版対応 (英語だと何も表示されなかったり汎用メッセージだったのを日本語と同様に拡張)
嬉しいことに海外プレイヤーも時折GitHubやDiscordでコメントしてくれているので、少しずつ変愚蛮怒の輪が広がっているのを感じます
この調子でどんどん活気が出てくると良いですね!

(なお作業はまだまだ完了する見込みなし……正式版のリリースは未定です)

明日はまだ埋まってないよ!
みんなも記事を書いてみよう!
ギャラリー
  • 開発者になろう GitHub編
  • 開発者になろう GitHub編
  • 変愚蛮怒3.0.0 進捗状況 その36
  • 変愚蛮怒 3.0.0 進捗状況 特別編 その3 C#への可能性
  • 開発者になろう
  • 開発者になろう
  • 変愚蛮怒2.2.2 進捗状況 その21
  • 変愚蛮怒(2.2.2 開発中版) ハイエルフレンジャー その5
  • 変愚蛮怒(2.2.2 開発中版) ハイエルフレンジャー その3