2017年9月25日月曜日

メイドモデルの話。

いわきから横浜に戻るまで作業ができないので、バス内でウィルキンソンを飲みながらメモメモ。


Twitterにも書いたけど、メイドモデルは後方互換を無視できるなら、真っ新に作り変えたい部分である。ていうか自分自身構造を理解しきれていない。

なぜか知らないけど、メイドモデルに関しては無駄に継承階層が深い(スーパークラスが多い)せいで、どこに対してどういう読み込み処理をしているのかはっきり整理できてない。

継承元を変更するだけなら、ASMで書き換えればいいんだけど、それには読み込み構造を整理しておかないといけない。


そもそも、メイドモデルが使用しているクラスは、バニラのModelBaseクラスと互換性がない

メイドの状態をModelCapsという機構で管理しているので、そこは独自メソッドを用意せざるを得ないのだが、それだけ見ると、なぜバニラ非継承にしたのかが全く分からない。

LMMXから引き継いできて、いざ蓋を開けてみると、このように難解な部分が結構あるのだ。ていうかこれ本家からそのままな気が…


読み込み方にも問題がある。

現状、モデルの読み込みはmods下を手動で探索しているのだけれど、当初mods場所の取得方法がFMLInjectionDataから直接取得するというもので、これがなにを意味しているかというと、開発環境のビルドパスは自動で読み込んでくれないという、厄介な仕様だったのである。

その証拠に、ベースであるLMMXを開発環境でテストするには、コア部分を取り除いたパッケージをわざわざmods以下に配置しないといけないという問題を抱えていた。

しかもこれ、loadメソッド自体を共有する継承構造のせいで、一回で済ませればいいものを無駄に3回探索している。


さてどうやって切り替えようか。

先んじてメイドのモード読み込みに関しては、既にクラスパスからのパス取得と、探索を1回にしたうえでのHandler式に切り替えた。他の機構に関してもこちらに吸収すれば、ひとまず読み込み処理の問題は解決となる。

それをやりつつ、どうにかメイドモデル自体の構造をなんとかシンプルにできないか、いろいろ試すことにする。

2017年9月24日日曜日

IFFとトリガー、そしてちょっとだけメイド養成のお話。

まず最初に書いておくと、私のリポジトリはここな。
リトルメイドの移植版を名乗ってはいる。

で。。

今取り掛かっている作業なんだけど、IFFとトリガーの一新なのね。
IFFっつーのは簡単に言うと、Mobの敵対設定を変更できる機能で、従来通り本でメイドさんを右クリックで設定できる。
これ、管理方法がオーナーのUUID別で、もともとサーバ・クライアントで別々の処理をしていたんだけど、1.10.2に対応するにあたってちょっと注意が必要になった。詳しいことはこのissueをみていただきたい。
要するに、クライアントだから使用者は一人だろう、と胡坐をかけなくなったというわけだ。

それに対応する変更はとうに済んでいるんだけど、ここで一つ思い出した。

たしかIFFには武器トリガーの設定も同時に保存されるんだよな…
ということは、武器トリガーの設定もユーザ単位で保存されるというわけだ。

それって、今後の開発方針としてはちょっと、まずいことになるのでは…?

将来的に、メイドREは個別に能力を育成するシステムを構成しようと思っていて、これが武器トリガーにもひじょーに深く関わってくることになる。具体的には、ダイヤのソードやエンチャント付きの矢はある程度のレベルにならないと使えない…とか。
そうなると、ユーザ単位でトリガー設定が保存されるのは非常によろしくない。

というわけで、コミットがない裏で、今は武器トリガー設定を「メイド単位」にしてNBTに書き込むように変更中である。
そうなるとIFF設定も、メイド単位で保存する必要が出てくるな。さあ大変。
問題は、それでデータサイズがどのくらい増えるかだが…タグ数抑えた方がいいのかなあ。

なにがめんどくさいかって、「もともとトリガーとして認識されるアイテムがトリガー設定に重複して登録される」ということが、現状できてしまうので、この無駄を防ぐ方法が必要になる。育成システムの概形がまだイメージできていないので、この部分をどう実装するか全く見えてこない。同様の理由で、IFFの移行も、元々敵対であるエネミーを敵対として重複登録しないようにする必要がある。もっとも、こちらはEntityのListが種類別にstatic参照できるので、さして判断機構の制作は難しくないが…。

なんか、すごく長い道な気がしてきたぞ。

基本的に、コンパイル通らない状態ではコミットしないようにしているので、今回ばかりは一度の変更が結構大きくなってしまう。
なんせ、今まで使っていた機構が一切使えなくなるんだからしょうがない。

あるいはベースの親実装と末端の子実装を分けて、細かくコミットした方がいいかなー?

ブロガー始めてみました

今のところ開発進捗を書きためておくところがないので、自分用のメモがてら公表することにした。
もっだーさんしか興味がないだろうけど、つれづれなるままに書きます。