Edited at

コミュニティ版コアスクリプトにプルリクエストを送ってみた

More than 1 year has passed since last update.


通ったプルリクエスト


Window_Options.drawItem()で座標が正しく反映されていないバグの修正

実はXが0であることを前提に処理が書かれていたため、正しく動いていませんでした。

1行修正して、そのまま通りました。


Game_Interpreter.requestImagesの修正

Game_Interpreter.requestImages()は画像や音声などのリソースを先読みする処理です。

しかし、プラグインコマンドによる画像の要求には対応していない問題がありました。

そこで、プラグインコマンドに対応するように修正。

また、コマンド全てをまとめてチェックしていたのをコマンド一つずつのチェックへ処理を分けました。


アイテム使用時のフリーズの修正

Scene_ItemBase.canUse()はスキルに使用者をthis.user()で確保した後に、Game_ActorのcanUse()でチェックしています。

しかし、何らかの理由によりuser()でnullが返ってくると落ちてしまいました。

公式フォーラムでも報告があったのですが、原因を突き止めて修正。

バグ修正でしたので、素早く通りました。


通らなかったプルリクエスト


BattleManager.checkBattleEnd()の修正

判定部分を関数化してフックしやすくする提案。

しかし、関数追加は予想外の所で問題を起こすことがありえるので、行わなかったとのこと。

外から見た動作は変化していないのに、なぜ問題が起こる可能性があるかですが、個人的には新規追加された関数を使ったプラグインが出たときの事を想定しているのだと思います。

新しいバージョンで増えた関数を前提にプラグインを書くと、古いバージョンでは動かなくなってしまいます。

また、プラグインと本体スクリプトのバージョンが変わったときに、思わぬ場所に影響が出る可能性があります。

単純な関数追加でも、ダメな場合の好例です。

その他、同時期に提案したが通らなかったプルリクエストも同様だったので割愛。


まとめ


  • バグ修正は通りやすい。できれば、症状などについてまとまっている記事があるとGood。

  • 機能追加やプラグインのためのメソッド追加は大きなメリットが無いと通らない。

  • プルリクエストが大きすぎると通らない。機能別に分けた状態かつ影響の少ない方法を考えよう。

  • コアスクリプトはとても保守的。便利な新機能と動作の安定性なら後者を優先する。

大体はこんな感じです。

githubは不慣れでしたが、ここまでのプルリクエストで使い方を掴めました。

プラグイン作成とは勝手が違い、安定性を重視してます。

(デュエリスト的な言い方をすれば、ミラフォや分断の壁を警戒してモンスターの展開を抑えるような雰囲気)

リポジトリは英語が多くて身構えてしまいますが、中の人は日本人もいますので、相談はしやすいです。

恐れずにオープンソースの世界に踏み出してみましょう。