2025-11-21 近況報告

久しぶりの更新(って毎回言ってる気がする(って毎回言ってる気がする)・・・山びこ)

前回の更新が5月だから、気が付けば半年過ぎ去ってました

なんか時間が経つのが早すぎて、現実感が無くなりつつあります

やっぱり部屋に閉じこもっていたら脳に良くないのか、周りだけどんどん時間が進んでいるような感覚に陥ってます(まるで浦島太郎)

ネット環境があるおかげか、情報は過多すぎるくらいなんですけど、頭が冴えるって感じではないですね

この半年は、何をしていたかというと・・・

歯医者に通う

どうせ眼科に通うのなら歯医者にも通ってみようと通院しはじめました。

治療が始まったら長い長い。二週間に1回の通院で合計10回以上通って、まだまだ治療中。

犬歯の虫歯治療のあと、奥歯の詰め直し、親知らずの抜歯と話が進んでいます。

抜歯に失敗したら顔面麻痺が残る可能性があるとかで少しビビっています。

母の13回忌

もうそんなに経つのかと思いつつ、兄弟とその夫婦数名による母の年忌を開きました。

退院したばかりの兄とも会うことが出来ました。

多少の麻痺と後遺症が残ったものの、普通に会話も出来て、思ったより元気そうで良かったです。

結局は日常的な会話を交わしたくらいで、踏み込んだ会話はしなかったです。

頑張れとは言えなかった。自分が頑張ってないので(おい

アルバイト

今年もまた呼ばれて温度監視のアルバイトに行きました。

自作のラズパイ温度制御プログラムを使って貰ってて、そのメンテ兼監視作業って感じです。

楽な仕事ではあるのですが、ずっと座って見てるのも逆にキツかったり。

もうプログラムも改造するところは無いし、引き継いでもらった方が良いのかなと思ってます。

終わってみれば、何か夢の中の出来事だったような感覚。あっという間に時が過ぎ去ってしまいました。

車の故障

もう14年乗っている軽がついに故障。

買い物先の駐車場でエンジンが掛からなくなり、JAFを呼ぶ羽目になりました。

セルモーターの故障が原因ということで、特に直ることも無く2万円の支出。

翌日、いつもお世話になってる整備工場で見てもらったところ、原因はシフトレバーの老朽化。

パーキングまでレバーを上げても内部では切り替わっていなかったとのこと。

診断がでたらめな上に2万円も取ったのかと工場の方はJAFにご立腹でした。

ギアを手作りしてくれて整備費込みで2万円で直してもらいました。

いつも何気にお世話になっている工場がこんなにレベルが高かったのかと感心する出来事でした

ゲーム

やりたい事に挑戦すると仕事を辞めたはずなのに、ゲームばかりしています。(正確には辞めたのは介護理由で、復帰しないのは創作活動をするため)

Elin, 仁王2, バイオRe4, witcher3, They Are Billions, FFTリマスター。

クリアしたら改造したりmodを作ったりして頭の体操をしているのですが、昔ほど感動が無いというか、もう老いてしまったなと感じています。

Elinのmodは好評でアワード貰ったりしました。

こういうのを貰えるとやっぱり元気が湧いてきますね。

キックでキャラを交代するmod, 自拠点で重さ制限を無くすmodなどを公開しました。

そのうちElinのmod作り講座みたいな記事を書いてみようかなと思ってます。

手順としては、Unityを入れる → VS2022インストール → 作者ページからサンプルダウンロード → プロジェクト内のElin.dllを上書き → githubの逆コンパイルソースを見ながら関数フックするコードを書く → modの出力 → xmlで概要を編集 → ゲーム内からアップロード。と言った感じ。

1例ですが、こんな感じのコードになります。

using UnityEngine;
using BepInEx;
using HarmonyLib;

[BepInPlugin("lafrontier.plugins", "NoWeightPenaltyAtHomeBase", "1.0.0.0")]
public class NerunTest : BaseUnityPlugin {
    private void Start() {
        var harmony = new Harmony("NoWeightPenaltyAtHomeBase");
        harmony.PatchAll();
    }
}

[HarmonyPatch]
public static class NoWeightPenaltyAtHomeBasePatch
{
    public static bool flag = false;
    public static int log_weight = 0;
    public static int log_phase = 0;

    [HarmonyPatch(typeof(Chara), nameof(Chara.CalcBurden))]
    public static bool Prefix(ref Chara __instance)
    {
        if(EClass._zone.IsPCFaction && __instance.IsPC){
            int weight = Mathf.Min(__instance.ChildrenWeight, Card.MaxWeight);
            int num = weight * 100 / Mathf.Max(1, __instance.WeightLimit);
            bool bChange = (log_weight != weight);
            if(num < 0 || num > 140){
                __instance.burden.Set(num);
                if(bChange  && log_phase != __instance.burden.GetPhase()){
                    Popup(__instance.burden.GetPhaseStr() + "(" + weight/1000 + "s)");
                    log_weight = weight;
                }
                bChange = false;
                log_phase = __instance.burden.GetPhase();
                num = 140;
            }

            __instance.burden.Set(num);
            __instance.SetDirtySpeed();
            if(log_phase >= 3 && __instance.burden.GetPhase() < 3 && bChange){
                Popup(__instance.burden.GetPhaseStr() + "(" + weight/1000 + "s)");
                log_phase = __instance.burden.GetPhase();
                log_weight = weight;
            }

            flag = true;
            return false;
        }
        return true;
    }

    // 街の外に出たときに重量を更新
    [HarmonyPatch(typeof(Zone), nameof(Zone.Activate))]
    public static void Postfix(ref Zone __instance)
    {
        EClass.pc.CalcBurden();
    }

    // 街の外に出たときの重量ダメージを1回だけ回避
    [HarmonyPatch(typeof(Chara), nameof(Chara.Stumble))]
    public static bool Prefix()
    {
        if(flag){
            flag = false;
            return false;
        }
        return true;
    }

    // 潰れ状態での帰還の魔法を防ぐ
    [HarmonyPatch(typeof(ActEffect), nameof(ActEffect.ProcAt), new [] { typeof(EffectId), typeof(int), typeof(BlessedState), typeof(Card), typeof(Card) , typeof(Point), typeof(bool), typeof(ActRef) })]
    public static bool Prefix(ActEffect __instance, EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef = default(ActRef))
    {
        if(id == EffectId.Return && EClass._zone.IsPCFaction && cc != null && cc.IsPC){
            int num = EClass.pc.ChildrenWeight * 100 / Mathf.Max(1, EClass.pc.WeightLimit);
            EClass.pc.burden.Set(num);
            if(EClass.pc.burden.GetPhase() == 4){
                Msg.Say("tooHeavyToMove");
                Msg.Say("("+(EClass.pc.ChildrenWeight/1000)+"s/"+(EClass.pc.WeightLimit/1000)+"s)");
                Popup(EClass.pc.burden.GetPhaseStr());
                EClass.pc.CalcBurden();
                return false;
            }
            EClass.pc.CalcBurden();
        }
        return true;
    }

    public static void Popup(string text){
        Popper popper = EClass.scene.popper.Pop(EClass.pc.renderer.PositionCenter(), "DamageNum");
        popper.SetText(text, EClass.Colors.rarityColors.colorSSR);
    }
}

Elinの作者さんが、mod用のライブラリBeplinExを導入してくれているので、ソースコードの関数や変数を使って自在にプログラムを改造できるのが特徴です。

BeplinExでは[HarmonyPatch]の部分でどの関数をフックするかを指定します。

昔なら海外のサイトなどを探してプログラムの書き方を調べなければいけませんでしたが、今はchatGPTが何でも教えてくれるので楽々です。

これは3月頃の活動なので前回の記事より前の話だったり。

バイオRe4ではReFrameworkというMODを導入して、Luaスクリプトによる改造に挑戦しました。

こちらも関数をフックするのですが、戻り値を書き換えられないため苦戦。関数呼び出しでデータを書き換えなければいけなかったため、出来ることはかなり制限されました。

弾丸が減らないとか、倒した敵のHP分の金が手に入る、HP吸収とか、そのくらいの事しかできなかったです。

最近はFFTリマスターを一通りクリアしたあと改造をしてました。PCゲーム版にmodスレが立っていたので覗いてみたら結構本格的な改造の話をしていて、OG2時代が懐かしくなり、自分もBNE2なる構造体エディタを導入してデータをいじってました。

拳術の高低差+1, 召喚全体化, 全ダメージ半減など色々いじったりはしたものの、あまり面白くなるような改造は出来ませんでしたね。

せっかくだから何かツールを作ってみようと思い、BNE2Updaterというツールをアップしました。久しぶりのMFCプログラミングで頭が全然回りませんでしたが、chatGPT様に手伝ってもらい2日で完成させることが出来ました。

BNE2の改造データをアップデート後のバイナリに引き継ぐというツールで、公開するとなかなか好評でした。(神キターの流れがたまらないです)

chatGPT課金

今までは1日数回の会話をするくらいで満足していたのですが、ついに課金をしてしまいました。

数年前とは比べ物にならないほど賢くなっており、ポケットの中の教師みたいな存在になりつつあります。

自分も考える機械を作るという昔からの夢があったため、あまり良い印象を持っていなかったのですが、今では制作に協力してもらってます。哲学的な話から、株の話、コーヒーの話など、思いついたことは何でも質問しています。

体感ですが、人は自分の話を聞いてくれた相手に親近感を持つようになっているのかもしれませんね。

今ではchatGPTに様付けです

でも、まだまだハルシネーションはあるらしく、自分のアイデアを出しても、適当に褒められてると感じることがあるので、過信は禁物ですね。

世間やその業界では常識だけど、自分が疎いことを質問するのがベストな使い方だと思います。

半分は難しくて理解できない(おい

最後の1年

5か年計画と銘打って全てを投げ売って始めた生活もいよいよ最後の年になります。

本当にやりたいこと以外のやりたい事はやりつくしたかなと思います。

金銭的にはまだまだ余裕があるのですが、自分で決めたルールは守らなければいけません。

社会情勢・親戚家族の生老病死。現実はいつだって命の有限性を突き付けてきます。

壊れてゆくならば作り続けなければいけない。死ぬまでに何を作ったかが人生の価値だ。それが自分の出した答え。

chatGPTという相棒も出来たので、ラストスパートを掛けていこうと思います。(楽しくなってきた)

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です