この記事はLava Bucket Advent Calendar 2017 10日目の記事です。
9日目の記事を先に見たことを前提として書いていきます。
Luaスクリプトを覗いてみる
Luaスクリプト群はcore/lib
とlib/
に存在しています。前者はこのゲームの基礎の基礎となる部分、つまりDiesel Engine*1の中心スクリプトとなる部分です。後者はこのゲーム自体のスクリプトとなる部分です。
さて、この中にLuaスクリプトが入ってるわけなのでそれを見ようと思いますが…。
(core/lib/utils/coreapp.luaの例)
あれ?
運の悪いことに.lua
をテキストエディタで開けません、どういうことでしょうか?
実はこのluaファイルはコンパイル済みであり、通常のテキストエディタで開くことはできません。なので、これらのLuaファイルをデコンパイルして読まなければなりません。
これを全てデコンパイルするのはかなり時間かかるのと手間がかかりますので有志の方が公開しているリポジトリをダウンロードかクローンして覗いてみましょう。
これらからお好きな方を選んでください。
これでもう一回同じファイルを見てみましょう。
これにて正常に開けました。
Luaスクリプトから推察する
さて、先程見れるようになったLuaスクリプトですが、これからpayday2のシステムを(一部ですが)推察してみましょう。
とりあえずデータを見てみる
今回はpayday2自体を見るのでlib/
内のフォルダを見ることにしましょう。
(lib/の内部)
この中には膨大というわけでもありませんが多くの量のスクリプトがあるので今回は"ゲームデータ"関連のスクリプトに焦点を当てて見てみましょう。
lib/
内部をすべて解説するほどの労力がない(ごめんなさい)ので目的のフォルダだけを挙げます。今回の目的のフォルダはtweak_data
フォルダです。
(lib/tweak_dataの内部)
内部だけでも大量のluaファイルが存在するのでさらに焦点を当ててみましょう。"キャラクター関連のゲームデータ"を探そうと思います。
(lib/tweak_data/charactertweakdata.lua)の内部
まず、1行目から見てましょう。
CharacterTweakData = CharacterTweakData or class()
ここの定義からCharacterTweakDataはクラスとして定義されていることがわかります。*2
次に4行目を見てみましょう。
function CharacterTweakData:init(tweak_data)
…
init
の詳しい説明は省きますがこの関数(メソッド)はオブジェクト指向型プログラミングでいうコンストラクタみたいなものです。ここでは、CharacterTweakDataクラスが呼び出されたときの初期化処理を行っています。
余談ですが、今回init
の詳しい説明を省いたのはinit
自体は別のファイル(クラス)で定義はされており、それを解説するとキリがないことや今回の目的とは少し遠くなるので説明を省きました。また今度違う記事で説明するかもしれません。
さて、このクラスについて基本部分はある程度の説明できました。あとは、各種のメソッドの処理がどうなっているか調べるだけです。
この部分が理解できればあなたも立派なHeisterです。いえい!(あいにく私は理解できていませんですが。)
もうほとんど書ききってしまったのとこれ以上書くと記事が長くなるのでここでお終いとします。
ここまで見てくださりありがとうございました。
明日はNagisberryさんの"ラズライト ~天藍石と青金石の関係性~"です。一体どういう記事なんでしょうか、楽しみです。